Do-While循环和hasNextInt()

时间:2019-05-03 12:17:53

标签: java

我知道这听起来像是一个非常愚蠢的问题,但是我不明白我的错误在哪里。

为什么在循环的第二次迭代中,它不显示“输入数字:”?

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

3 个答案:

答案 0 :(得分:3)

由于hasNextInt会阻塞,直到控制台上出现int,因此才不会进入循环的下一个迭代。

答案 1 :(得分:1)

欢迎。查看评论中的答案。希望很清楚:-)

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条件的值为真,它将再次执行do块并重复执行,直到while条件的值为False。 。

console.nextInt和console.hasNextInt都从控制台读取输入。因此,作为do块的一部分,已打印出“输入数字:\ t”,第一个nextInt()调用已接受输入“ 1”,然后是递增,接着是while的求值condition-console.hasNextInt(),它再次等待输入并接受“ 2”。这解释了为什么在用户输入“ 2”之前未打印“输入数字:\ t”

当然,因为已经输入了值2,所以while条件评估为true,然后再次执行do块并继续执行。

也许您需要while循环。相比之下,仅当且仅当while条件的值为真时才执行代码块

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

答案 2 :(得分:0)

当您达到数组的足够大小时,请退出循环。像

   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.