我写了一个程序,将两个分数相加,如果分母为 0,它应该抛出IllegalArgumentException
. 当我测试它时,我遇到了失败,当我尝试添加时0/2 + -1/2
我应该得到-1/2
但我得到1/-2
了,我该如何解决这个问题?
语言是德语,bruch
手段fraction
,neuNenner
手段new denominator
,neuZaehler
手段new numerator
和ggt
是gcd
。
我删除了
assertEquals("Zaehler = -1 Nenner = 2",
rechnen.Rechnen.bruchAddition(0, 2, -1, 2));
但后来我得到了这个错误java.lang.AssertionError
这是我的代码:
public class Rechnen {
public static String bruchAddition(int z1, int n1, int z2, int n2) {
int neuZaehler = (z1 * n2) + (z2 * n1);
int neuNenner = n1 * n2;
int ggt = ggt(neuZaehler, neuNenner);
neuZaehler = neuZaehler / ggt;
neuNenner = neuNenner / ggt;
if (n1 == 0 || n2 == 0) {
throw new IllegalArgumentException();
}
return ("Zaehler = " + neuZaehler + " Nenner = " + neuNenner);
}
static public int ggt(int x, int y) {
if (y == 0) {
return x;
}
return ggt(y, x % y);
}
}
这是 JUnit 测试用例:
import static org.junit.Assert.*;
import org.junit.Test;
public class RechnenTest {
@Test
public void test() {
assertEquals("Zaehler = 1 Nenner = 1",
rechnen.Rechnen.bruchAddition(1, 3, 2, 3));
assertEquals("Zaehler = 1 Nenner = 1",
rechnen.Rechnen.bruchAddition(5, 8, 3, 8));
assertEquals("Zaehler = 1 Nenner = 1",
rechnen.Rechnen.bruchAddition(10, 16, 3, 8));
assertEquals("Zaehler = 1 Nenner = 3",
rechnen.Rechnen.bruchAddition(-1, 3, 2, 3));
assertEquals("Zaehler = -1 Nenner = 2",
rechnen.Rechnen.bruchAddition(0, 2, -1, 2));
assertEquals("Zaehler = -2 Nenner = 3",
rechnen.Rechnen.bruchAddition(-1, 3, 1, -3));
try {
rechnen.Rechnen.bruchAddition(1, 1, 1, 0);
fail();
} catch (IllegalArgumentException e) {
assertTrue(true);
}
try {
rechnen.Rechnen.bruchAddition(Integer.MAX_VALUE, 1, 1, 1);
fail();
} catch (IllegalArgumentException e) {
assertTrue(true);
}
assertEquals("Zaehler = 1 Nenner = " + Integer.MAX_VALUE,
rechnen.Rechnen.bruchAddition(0, Integer.MAX_VALUE, 1,
Integer.MAX_VALUE));
}
}