gpt4 book ai didi

Java无限方法运行

转载 作者:行者123 更新时间:2023-12-01 20:09:19 25 4
gpt4 key购买 nike

我创建了一个类来对有理数进行算术运算,问题是当我运行程序时,它一直在运行,并且在多次尝试后从未停止或显示结果,我发现问题出在 reduce 方法上它只是卡住了并且从未完成。有任何想法吗 ?

private void normalize() {
if ( (this.num > 0 && this.den < 0) || (this.num < 0 && this.den < 0)){
this.num = -this.num;
this.den = -this.den;
}
}

private void reduce(int n , int d) {
int r , L = 0;
while ( (n!=0) && (d!=0) ) {
if (this.den > this.num)
r = den % num ;
else
r = num % den ;
while (r != 0 ){
for ( int i= r ; i>0 ; i-- ){
if (den % i == 0 && num % i == 0 )
L = i ;
}
num = num / L ;
den = den / L ;
}
}
}

public Rational (int num , int den) {
this.num = num ;
this.den = den ;
normalize();
reduce (this.num , this.den) ;
}

最佳答案

我想我明白了你困惑的根源。您将 num 和 den 传递给 reduce(int n, int d),但 n 和 d 被分配与 num 和 den 相同的,而不是相同的引用。因此,即使 num 和 den 的值在 while 循环中发生变化,这些变化也不会反射(reflect)在 n 和 d 的值中。

另请注意,您正在对整数进行除法并将结果分配给整数,这在数学上可能是不可取的。

另一件事:即使在解决了 n 和 d 的问题之后,您仍然有一个永远不会退出的内部 while 循环,因为 r 的值永远不会改变。您需要在循环中更新r的值,使其最终变为0。

关于Java无限方法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46919574/

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