我知道这听起来可能是一个非常愚蠢的问题,但我不明白我的错误在哪里。
为什么在循环的第二次迭代中,它没有打印'Enter a number:'?
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发布于 2019-05-03 20:20:27
因为在控制台上存在int之前,hasNextInt都会阻塞,因此不会进入循环的下一次迭代。
发布于 2019-05-03 20:25:19
欢迎。请参阅注释中的答案。希望清楚:-)
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块的一部分,"Enter a number:\t“已经打印出来,第一个nextInt()调用已经接受了输入"1",然后是递增,然后是while条件的求值- console.hasNextInt(),它再次等待输入并接受"2”。这解释了为什么在用户输入"2“之前没有打印"Enter a number:\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");
} 发布于 2019-05-03 20:24:58
当达到数组的足够大小时,考虑退出循环。就像这样
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. https://stackoverflow.com/questions/55969661
复制相似问题