Java程序永远不会完成

-2 java infinite-loop

我只是在高中的初级Java课程,所以我只是在学习Java.这是我的计划

public static void CubeRoot(double number, double guess)
{
    double r = number;
    double a = guess;
    double b = 0;
    double goal = Math.pow(number,.333333333333);
    while (Math.round(b * 10000) / 10000 != Math.round(goal * 10000) / 10000)
    {
        b = ((1/3)*((r/(a*a))+(2*a)));
        b = a;
    }
    System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)

我试图使用Newton-Raphson方法得到10.6的立方根的近似值.问题是该程序运行但从未打印出任何东西.

res*_*man 7

它永远循环,因为您为其分配了一个值b,然后用它覆盖它a.这意味着无论何时循环开始,b都将具有与a初始值相同的值.

从查看Newton-Raphson算法,我认为你真正想要的是

b = ((1.0/3.0)*((r/(a*a))+(2*a)));
a = b;
Run Code Online (Sandbox Code Playgroud)

这将设置为a等于b您刚刚计算的新值,以便可以在下一次迭代中使用.你也应该用1.0/3.0而不是1/3.整数除法截断结果,所以1/3等于0,而不是0.33你想要的.

  • 我还建议用(1.0/3.0)替换(1/3)以避免整数除法. (2认同)