2015-10-27 40 views
-3

程序從掃描儀讀取值,直到給出值0,從而完成該過程。只有在給出的所有數字都是整數的情況下,程序纔會編譯總和。在所有其他情況下(不是所有的值都是整數),程序不會給出任何結果。 所以我注意到我的程序給出了整數的總和,即使有其他非整數值給出,有時當它們都是整數,因爲它不顯示真正的總和只是其中一個數字或什麼。有誰能告訴我爲什麼我的程序無法正常工作嗎?

import java.util.Scanner; 
public class Testing3{ 
    public static void main(String[] args) { 
     int sum1 = 0; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter number"); 
     String number = input.nextLine(); 
     int value =Integer.parseInt(number); 
     while(true) { 
      if (value!=0) { 
       number = input.nextLine(); 
       if (Math.round(value)==value)//condition to integer{ 
        sum1 = sum1 + value; 
      } else { 
       System.out.println(sum1); 
       break; 
      } 
     } 
    } 
} 
+4

如果你想讀*整數*?,你爲什麼要使用'nextDouble()'。爲什麼不'nextInt()'?.另外,我認爲你應該使用'nextLine()'來讀取輸入,並嘗試將該值解析爲一個int,捕獲異常並決定要做什麼。 (或匹配模式,然後解析) – TheLostMind

+2

然後,如果您需要讀取任何內容,但只顯示所有值爲整數的和,您可能需要將它們讀作字符串('nextLine()'?)並檢查如果他們是整數或不是。 – Kayaman

+0

因爲用戶應該有權在掃描器中寫入任何數字..如果我只是把int和用戶把小數點進程結束,我需要的過程只有當用戶把一個0時結束。 –

回答

0

首先,使用while(true)for(;;)在無限循環

二使用nextInt()做,因爲你有沒有用雙打來讀取整數,而不是雙打。或者,可以使用readLine讀取字符串,並使用Integer.parseInt檢查其有效性。

第三,你有一個語法錯誤(所以它不應該編譯)。你有一個無與倫比的大括號附近。

最後,請刪除if (number != 0),因爲這會導致您的程序在循環中不斷重複,而無需執行任何操作。改變循環內部爲:

number = input.nextInt(); 
if (number != 0){ 
    sum1 = sum1 + number; //or use sum1 += number 
} else { 
    System.out.println(sum1); 
    break; 
} 
0

我認爲你的問題是在你測試一個整數的地方。我不認爲x mod 1 == 0在這裏是正確的。當我被要求檢查一個數字是否是一個整數時,我會做什麼,我整理數字並檢查它是否等於原始數字。

比方說,我們有一個double變量稱爲x和該計算結果爲true如果x是一個整數:

Math.round(x) == x 

我不知道是否有更好的方式來做到這一點,但是這是我會怎樣做到這一點,我喜歡它。

相關問題