Java平方根计算器?

时间:2015-02-08 21:52:52

标签: java square-root

好的,我是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));
            }

        }

    }
}

3 个答案:

答案 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