2015-02-08 155 views
-3

好的,我是一名java初学者,通过网站和书籍自学。我尝试了一个简单的平方根计算器,使用for循环和一个while循环(我已经包含了我在下面尝试的)。可悲的是,当我输入一个数字时,我的所有代码都会终止。任何帮助,将不胜感激!Java平方根计算器?

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

while(0!= 0 * 0)将不会执行,对吗? – Trilarion 2015-02-08 21:56:24

+1

一个数字将几乎永远不会与自己的时间本身相等,除非我失去了一些东西。这将导致循环立即退出。 – Carcigenicate 2015-02-08 21:56:41

+4

好吧,'0'等于'0 * 0',所以while循环从不输入。 – Keppil 2015-02-08 21:56:51

回答

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)+ number/X(n))/ 2

+0

感谢您的帮助!顺便说一句,我是新来的java,那么'做'做什么? – Minersof49ers 2015-03-11 16:37:19

5

你有几个问题在这里:

1)逻辑错误:0 == 0 * 0

< =这意味着while (dummy != dummy * dummy) {..}绝不会是不真实的,而且你甚至永远都进入循环

2)浮点数是不精确,让你的算法(它依赖于“==”)可能无法工作,反正

看看这里浮点不精确的详细信息:

http://www.lahey.com/float.htm

这对于任何语言是真的 - 你的算法平方根必须考虑到这一点。

0

我觉得虽然条件应该是=

while(rootIt != dummy * dummy) {} 

您当前的条件将永远只能是真实的,如果你初始化dummy为1;但我不会那么做你想要的。