2014-12-28 176 views
1

我試圖做一個簡單的輸入和do-while程序,其中我要求代碼保持重複,如果用戶沒有輸入3.14但由於某種原因它沒有運行正常。它在我輸入時沒有顯示任何錯誤。我無法讓我的代碼運行

Scanner num = new Scanner(System.in); 
double pi = num.nextDouble(); 
do { 
    System.out.println("What is pi?"); 
    pi = num.nextDouble(); 
} 
while(pi != 3.14); 
System.out.println("Yup pi = 3.14"); 
+0

你不需要'double pi = num.nextDouble();'這是因爲你使用do而 –

+0

爲了將來的參考:double算術本質上是不精確的。請參閱http://stackoverflow.com/questions/177506/why-do-i-see-a-double-variable-initialized-to-some-value-like-21-4-as-21-3999996 –

+0

請不要' t編輯你的帖子說*感謝您的幫助*。相反,在寬限期(15分鐘)之後,選擇最能幫助您解決問題的帖子,並通過點擊信譽下方的檢查標記爲答案。 –

回答

1

您在循環前要求輸入而不通知用戶,然後取出第一臺掃描儀。 像這樣

Scanner num = new Scanner(System.in); 
double pi = 0.0; 
do { 
    System.out.println("What is pi?"); 
    pi = num.nextDouble(); 
} 
while(pi != 3.14); 

System.out.println("Yup pi = 3.14"); 
+0

這工作表示感謝,但我也想出了它作爲雙pi;會有類似的效果,除非默認值爲0.0 – peakednoob

+0

在使用前聲明變量時初始化變量總是好的。 –

1

你在網上閱讀2分兩次pi,一個曾經和第5行你只需要聲明在第2行pi和你的代碼就可以了(見下文)。因爲do-while循環的主體一旦運行,只需要一行就可以運行。如果你只使用了一個基本的while循環,你將需要兩行。

Scanner num = new Scanner(System.in); 
double pi; 
do { 
    System.out.println("What is pi?"); 
    pi = num.nextDouble(); 
} while(pi != 3.14); 

System.out.println("Yup pi = 3.14"); 
0

這可能與比較漂浮物的確是不好的事實有關。相反,使用這樣的事情:

if(Math.abs(pi - (double) 3.14) < epsilon) 

epsilon是一個數字,其調節精度(喜歡的東西0.001應該足夠在這種情況下)。在這裏看到更多的細節:What's wrong with using == to compare floats in Java?

+0

或使用'Double.compare()' – fge

+0

您不需要顯式強制轉換。 '3.14'已經是'double'了。 –