2017-06-22 88 views
0

這裏是我的代碼在做第一行代碼... while循環跳過而進入第二次循環時 - 的Java

import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     int[] data = new int[10]; 
     int count = 0; 

     do { 
      System.out.print("Enter a number or ctrl + z when you are done: "); 
      data[count] = input.nextInt(); 
     } 
     while (input.hasNextDouble()); 
    } 
} 

輸出

Enter a number or ctrl + z when you are done: 2 
4 
Enter a number or ctrl + z when you are done: 6 
Enter a number or ctrl + z when you are done: 8 

我的問題是,我不知道爲什麼代碼在第二次進入循環時跳過System.out.print("Enter a number or ctrl + z when you are done: ");do {。這可以在輸出的第二行看到。請問我做錯了什麼?

...我已經尋找情況下,我的問題可能已經回答了,但只能夠找到與代碼解決方案跳過nextLine()

+3

爲什麼在閱讀整數時檢查流中是否存在另一個雙精度值? – tkausl

+0

[while hasNextInt()While while actually reading?](https://stackoverflow.com/questions/35633931/while-loop-with-hasnextint-actually-reading) –

回答

1

啊while循環正在等待,看看輸入hasNextDouble()

怎麼能知道,直到你的用戶已經進入了下一個雙或按Ctrl-Z?

你必須做一些事情醜像

System.out.print("Enter a number or ctrl + z when you are done: "); 
do { 
    data[count++] = input.nextInt(); 
    System.out.print("Enter a number or ctrl + z when you are done: "); 
} 
while (input.hasNextDouble()); 

注意計數++上面還有我覺得它修復另一個bug。

+0

非常感謝,因爲你的回答我現在已經明白我的問題來自哪裏。真是太棒了:) –

0

這是因爲,以input.hasNextDouble()等待第一個電話的號碼,然後再繼續輸入。

所以將不會出現在所述迭代循環的消息,直到input.hasNextDouble()第一迭代循環的的結束運行 - 這當然取第二個數字。

您需要之前打印的郵件你打電話或者hasNextDoublehasNextInt

2

原因是第一次do塊被執行,然後檢查條件while

關於hasNextDouble()orcale doc

返回true,如果在此掃描器輸入信息的下一個標記可以 解釋爲使用nextDouble()方法的雙重價值。 掃描儀不會超過任何輸入。如果您正在使用input.nextInt();,更好地利用hasNextInt()檢查

作爲一個解決方案,您可以更改條件如下圖所示:

do { 
    System.out.print("Enter a number or ctrl + z when you are done: "); 
    data[count] = input.nextInt(); 
    count++; 
} 
while (count < 10); 

也。

+0

我已經離開了我的downvote,因爲我不要以爲你回答了這個問題。OP問:「我的問題是我不知道爲什麼代碼跳躍......」和「......請問我做錯了什麼?」。我認爲你沒有處理過這些問題。你的第一句話「原因是第一次執行塊,然後檢查條件」對我來說完全是難以理解的。 –

+0

再次感謝。我現在清楚地說明了原因。 – Blasanka

+1

謝謝你的回答Blasanka –

相關問題