2012-09-24 59 views
2

嘿大家所以我一直在試圖寫我的CS類應該是一個非常簡單的計數程序,但由於某種原因,它繼續吐出「請輸入一個數字(0停止):「提示,似乎完全忽略了while循環。如果while循環內的條件得到滿足,爲什麼即使輸入0,while循環也不會停止?過去我已經完成了C#,但我並不十分熟悉Java的注意事項,所以如果有什麼奇怪的東西讓Java不喜歡讓我知道。有關該程序的更詳細說明,應該讀取用戶的負數和正數,分別輸出負數和正數的總和,然後取平均值。 (顯然下面就是有問題的代碼段。)雖然循環繼續儘管遇到條件

Scanner scanner = new Scanner(System.in); 
    double average; 
    double numPositive=0.0; 
    double numNegative=0.0; 
    double input = 0.0; 
    do 
    { 
     System.out.print("Please enter a number (0 to stop): "); 
      input = scanner.nextDouble(); 
     if (input < 0.0) 
     { 
      numNegative += scanner.nextDouble(); 

     } 
     else if (input > 0.0) 
     { 
      numPositive += scanner.nextDouble(); 

     } 

    } while (Math.abs(input) > 1.0e-6); // make the tolerance whatever you want. 
+4

一個建議:如果您在某個時候認爲「程序不遵循邏輯或者我在執行邏輯時犯了一些錯誤」,後面的答案通常是正確的。 SJuan76非常好的建議, – SJuan76

+0

。 – duffymo

回答

7

初始分配後,您永遠不會改變input;循環將一直持續下去。我想你忘了再次致電scanner.nextDouble()

+1

DavisB的回答比較好;如果他添加了另一個'scanner.nextDouble',那麼只有奇數輸入將用作循環的控制,甚至輸入將被處理,這將是相當奇怪/複雜的。 – SJuan76

5

在最初檢索它之後,您沒有收到input

scanner.nextDouble()您的scanner.nextDouble()分配給numNegativenumPositive - 兩者均未被while循環檢查。

while (input != 0.0) 
    { 
     System.out.print("Please enter a number (0 to stop): "); 
     input = scanner.nextDouble(); 

     if (input < 0.0) 
     { 
      numNegative += input; 

     } 
     else if (input > 0.0) 
     { 
      numPositive += input; 

     } 

    } 
+1

讓它成爲一件事。 – duffymo

+0

@duffymo去吧。您有我的明確許可來編輯我的帖子。 –

+0

我不需要許可;這是逃避我的動機。 – duffymo

1

您不在循環中的任何位置爲input賦值。所以,初始值保持不變,循環不會退出。