这里是一个任务:这是一个有效的while循环吗?
“比方说,给你一个号码,和你想找到它的 平方根一个这样做的方式是从一个非常粗略的估计大约 了答案, X0,然后使用以下公式 X1 =(X0 + A/X0)/ 2
例如改善的猜测,如果我们想找到9的平方根,并且我们先从X0 = 6, 那么x1 =(6 + 9/6)/ 2 = 15/4 = 3.75,这更接近 我们可以重复这个程序,用x1来计算x2,依此类推,在这个 的情况下,x2 = 3.075和x3 = 3.00091。所以这是收敛的g很快就在 的正确答案(这是3)。
编写一个名为squareRoot
的方法,该方法以双精度参数和 为参数,使用此技术返回参数平方根的近似值。您不得使用Math.sqrt
。
作为初步猜测,您应该使用/ 2。你的方法应该迭代,直到 它得到两个连续的估计相差小于0.0001;在其他 字样,直到绝对值小于0.0001。您可以使用 Math.abs
来计算绝对值。”
这是演习旨在实践while循环。正如你看到我做的任务,我认为它的工作原理?但我不知道我怎么来解决呢?换句话说,我应该在这里提高?是否有任何其他方式以不同的方式进入循环?如何命名变量更合适?最后,是我的方法好还是坏吗?
public class squareRoot {
public static void main(String args[]){
System.out.println(squareRoot(192.0));
}
public static double squareRoot(double a){
double gs = a/2; //guess
double ig = (gs + (a/gs))/2; //improving guess
double ig1 = (ig + (a/ig))/2; //one more improving guess, ig1
while (Math.abs((ig-ig1)) > 0.0001){ //with ig and ig1, I am entering the loop
ig = (ig1 + (a/ig1))/2;
ig1 = (ig + (a/ig))/2; //ig1 has to be less then ig
}
return ig1;
}
}
您可以命名任何你想要的变量。如果您不确定代码的功能,请编写一些测试用例 –
如果您需要撰写评论以说明缩写的含义,则可能不应使用缩写。调用变量'guess'。长名称比不清楚的短名称更好。 – Carcigenicate
你会看到'ig =(gs +(a/gs))/ 2'和'ig1 =(ig +(a/ig))/ 2'在循环的内部和外部是如何复制的?这意味着你可能应该使用'do ... while'循环。不过你需要重写一下。 – Carcigenicate