gpt4 book ai didi

java - 不能除以零分数

转载 作者:行者123 更新时间:2023-11-30 08:14:11 25 4
gpt4 key购买 nike

所以我有一个简单的学校申请。哪个做分数的减法、除法、乘法和加法。

它工作得很好,但现在有 1 个分数时我得到了一个错误。分数:28/16 - 42/24

Exception in thread "main" java.lang.ArithmeticException: / by zero
at sample.Breuk.reduce(Breuk.java:70)
at sample.Breuk.subtract(Breuk.java:44)
at sample.Main.main(Main.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

所以我去了出错的那一行,结果发现是在减去分数。

现在我计算分数 (28/16 - 42/24),结果 = 0。

所以我知道我的错误在哪里以及出了什么问题,但我不知道如何解决这个问题。有人能给我一些建议吗?

    public Breuk subtract(Breuk other){
int d = teller * other.teller;
int n1 = noemer * other.teller;
int n2 = other.noemer * teller;
Breuk b = new Breuk(n1-n2,d);
b.reduce();
return b;
}

private void reduce() {
int i = Math.min(Math.abs(noemer), Math.abs(teller));
if (i == 0) {
System.out.println("Error");
}
while ((noemer % i != 0) || (teller % i != 0)) //BUG IS HERE//
i--;
noemer = noemer / i;
teller = teller / i;
}
}

主要内容:

  Breuk a = new Breuk(28,16);
Breuk b = new Breuk(42,24);
Breuk g = a.subtract(b); // Breuk A - Breuk b
System.out.println(a + " - " + b + " = "+ g);

最佳答案

减法的结果是 Breuk(0, 384),即在 reduce 中,i0。您打印“错误”(在这种情况下这并不是真正的错误),但无论如何都要继续。

看起来,在 reduce 中,您正在尝试计算 greatest common divisori 开始,作为 noemerteller 中较小的一个,然后减少它直到它是两者的约数。但是如果两者之一是 0,这将失败,例如 Breuk(0, 384)。要使这种情况正确,您必须从两者中的较高开始,如 0 % 384 == 0,但 384 % 0 ==错误,即

    int i = Math.max(Math.abs(noemer), Math.abs(teller));

或者,您可以只使用 Euclid's Algorithm求最大公约数。

private void reduce() {
int gcd = gcd(noemer, teller);
noemer /= gcd;
teller /= gcd;
}

private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}

两者都会正确地将分数 0/384 减少到 0/1,例如,6/143/7

关于java - 不能除以零分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com