2015-02-08 156 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;但我不會那麼做你想要的。