2014-02-21 94 views
2

即時學習java和目前即時通訊卡在一個練習中,我無法理解爲什麼代碼的行爲是這樣的。我在紙上尋找我的步驟,但我期望與程序實際上不同的答案。如果任何人都可以請解釋爲什麼它做什麼,它簡單的while循環練習

CODE:

System.out.print("Enter an integer: "); 
int numb = in.nextInt(); 

    while (in.hasNextInt()) 
    { 
     System.out.println(numb); 
     System.out.print("Enter an integer: "); 
     numb = in.nextInt();  
    } 

測試儀是剛剛進入的數字,所以輸出應該是這樣的:

Enter an integer: 5 
- 5 
- Enter an integer: 10 
- 10 
- Enter an integer: 8 
- 8 
- Enter an integer: k 
... 

但它看起來是這樣的:

Enter an integer: 5 
- 10 
- 5 
- Enter an integer: -4 
- 10 
- Enter an integer: 8 
- -4 
- Enter an integer: -6 
- 8 
- Enter an integer: 11 
- -6 
- Enter an integer: -1 
+0

基本上,'hasNextInt'看起來_ahead_以查看_next_'nextInt'是否可能;它並沒有看到後面的'nextInt'是否工作。 – ajb

回答

6

這是因爲您過早地使用in.hasNextInt()(或者太遲了,取決於你如何看待它):Scanner不能告訴你它是否看到一個整數,直到最終用戶輸入一個值後

如果您提示輸入一個數字,然後檢查hasNextInt,你的代碼不應該跳過第二個提示:

System.out.print("Enter an integer: "); 
while (in.hasNextInt()) { 
    int numb = in.nextInt();  
    System.out.println(numb); 
    System.out.print("Enter an integer: "); 
} 

這也將避免在情況異常時,第一個條目是不是一個數字。

+0

謝謝你花時間回答我,但不知怎的,我仍然不完全明白,也許我看錯了。掃描「int掃描」的輸入int numb = in.nextInt(); ?如果是這樣,那麼如何測量第一個環路條件,如果在那一點上,掃描儀尚未掃描用戶輸入,並且它不知道它是否爲整型。 – user3338991

+0

@ user3338991你試過運行這段代碼嗎?你得到了什麼結果? – dasblinkenlight

+0

我得到了正確的結果,謝謝你,但因爲我正在嘗試學習java,我試着去理解爲什麼,這個迴避了我目前的狀況。 例如,如果我輸入的是字母而不是int,爲什麼此代碼不打印它,scann和print是在循環內部,它們之間沒有條件。 也許我不明白java的執行順序?你可以請一步一步的代碼?謝謝 – user3338991