好的,我是java的初学者,通过网站和书籍自学。我尝试了一个简单的平方根计算器,其中包含for
循环和while
循环(我已经包含了我在下面尝试过的内容)。可悲的是,当我输入一个数字时,我的所有代码都会终止。任何帮助将不胜感激!
import java.util.Scanner;
public class The2RootProdject {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
double rootIt = input.nextDouble();
double dummy = 0.0000000;
while (dummy != dummy * dummy) {
dummy += 0.0000001;
if (rootIt == dummy * dummy) {
System.out.println("the squar root of " + rootIt + " is "
+ (dummy * dummy));
}
}
}
}
答案 0 :(得分:6)
你有几个问题:
1)逻辑错误:0 == 0 * 0
< =这意味着while (dummy != dummy * dummy) {..}
永远不会是不真实的,你甚至不会进入循环
2)浮点数是不精确,因此您的算法(依赖于" ==")可能无法正常工作
在这里查看浮点不精确的更多细节:
http://www.lahey.com/float.htm
对于 ANY 语言也是如此 - 您的平方根算法必须考虑到这一点。
答案 1 :(得分:0)
我认为while条件应该是=
while(rootIt != dummy * dummy) {}
如果您将dummy
初始化为1,那么您当前的情况才会成立;但我不会那就是你想要的。
答案 2 :(得分:0)
尝试使用这种使用牛顿迭代的算法:
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
double number, t, squareRoot;
Scanner input = new Scanner(System.in);
number = input.nextDouble();
squareRoot = number / 2;
do
{
t = squareRoot;
squareRoot = (t + (number / t)) / 2;
}
while ((t - squareRoot) != 0);
System.out.println(squareRoot);
}
}
牛顿迭代是一种通过递推方程计算数字平方根的算法: X(n + 1)=(X(n)+数/ X(n))/ 2