簡體   English   中英

Do-While循環和hasNextInt()

[英]Do-While loop and hasNextInt()

我知道這可能聽起來像一個非常愚蠢的問題,但我無法理解我的錯誤在哪里。

為什么在循環的第二次迭代中,它不會打印'輸入數字:'?

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner console = new Scanner(System.in);
        int[] v = new int[10];
        int index = 0;
        do {
            System.out.print("Enter a number:\t");
            v[index] = console.nextInt();
            index++;
        } while(console.hasNextInt());

        for (int i = 0; i < index; i++){
            System.out.print(v[i] + "\t");
        }
        System.out.println("\n" + index);
    }
}

這是輸出:

Enter a number: 1
2
Enter a number: 3
Enter a number: 4
Enter a number: 5
Enter a number: ^D
1       2       3       4       5
5

因為hasNextInt阻塞,直到控制台上有一個int ,因此不會進入循環的下一次迭代。

歡迎。 請參閱評論中的答案。 希望很清楚:-)

do {
        System.out.print("Enter a number:\t");  // Prints "Enter a number: "
        v[index] = console.nextInt(); // accepts input "1"
        index++; // increments
    } while(console.hasNextInt()); // waits for input at which point you enter "2"

好的,讓我們更清楚。

do while循環在評估while條件之前執行do塊。 然后,如果while條件的計算結果為true,它將再次執行do塊並重復,直到while條件的計算結果為false。

console.nextInt和console.hasNextInt都從控制台讀取輸入。 因此作為do塊的一部分,打印出“輸入數字:\\ t”,第一個nextInt()調用已接受輸入“1”,然后是增量,然后評估while condition - console.hasNextInt(),它再次等待輸入並接受“2”。 這解釋了為什么在用戶輸入“2”之前沒有打印“輸入數字:\\ t”

當然因為輸入了值2,所以while條件的計算結果為true,並且do塊再次執行並繼續。

也許你需要while循環。 相反,只有當while條件的計算結果為true時,才會執行此代碼塊

System.out.print("Enter a number:\t");
while(console.hasNextInt()){
        v[index] = console.nextInt(); 
        index++; // increments
        System.out.print("Enter a number:\t");  
    } 

考慮到達到足夠大小的數組時退出循環。 就像是

   do {
            System.out.print("Enter a number:\t");
            v[index] = console.nextInt();
            index++;
        } while(index<10); // if you want the user to enter 10 numbers. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM