我知道这听起来像是一个非常愚蠢的问题,但是我不明白我的错误在哪里。
为什么在循环的第二次迭代中,它不显示“输入数字:”?
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
答案 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.