我写了一个程序,添加了两个分数,如果分母是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));
}
}
它的工作! 我将代码更改为'int ggt = ggt(Math.abs(neuZaehler),neuNenner);'它工作。但是我仍然在JUnit Test Case'RechnenTest'中得到'java.lang.AssertionError'错误。 如何解决? – Maged
@Maged我编辑了我的答案来回答新问题。 – ajb
不好意思打扰你,我只是编程中的一位先行者,我尝试过使用4种解决方案,但他们没有工作,也许我做错了什么。你有没有尝试过其中一种解决方案? – Maged