do…while循环中的第一行代码在第二次进入循环时被跳过-Java
这是我的密码do…while循环中的第一行代码在第二次进入循环时被跳过-Java,java,loops,Java,Loops,这是我的密码 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(
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(“完成后输入一个数字或ctrl+z:”)第二次进入循环时,在之后执行{
。这可以在输出的第二行中看到。请问我做错了什么
我搜索了一些案例,其中我的问题可能已经得到了回答,但只能找到与跳过代码相关的解决方案nextLine()
这是因为对input.hasNextDouble()
的第一次调用在继续之前等待输入一个数字
因此,循环的第二次迭代中的消息将不会出现,直到循环的第一次迭代结束时的input.hasNextDouble()
运行,这当然会获取第二个数字
在调用hasNextDouble
或hasNextInt
之前,您需要打印消息,因为对input.hasNextDouble()
的第一次调用在继续之前等待输入一个数字
因此,循环的第二次迭代中的消息将不会出现,直到循环的第一次迭代结束时的input.hasNextDouble()
运行,这当然会获取第二个数字
在调用hasNextDouble
或hasNextInt
之前,需要打印消息。原因是第一次执行do
块,然后在期间检查中的条件
关于hasNextDouble()
in:
如果此扫描仪输入中的下一个令牌可以
使用nextDouble()方法解释为双精度值
扫描仪不会超过任何输入
作为一种解决方案,您可以更改如下条件:
do {
System.out.print("Enter a number or ctrl + z when you are done: ");
data[count] = input.nextInt();
count++;
}
while (count < 10);
do{
System.out.print(“输入一个数字或完成后按ctrl+z:”);
data[count]=input.nextInt();
计数++;
}
而(计数<10);
此外:
如果您使用的是input.nextInt();
,最好检查使用。原因是第一次执行do
块,然后检查中的条件,同时执行
关于hasNextDouble()
in:
如果此扫描仪输入中的下一个令牌可以
使用nextDouble()方法解释为双精度值
扫描仪不会超过任何输入
作为一种解决方案,您可以更改如下条件:
do {
System.out.print("Enter a number or ctrl + z when you are done: ");
data[count] = input.nextInt();
count++;
}
while (count < 10);
do{
System.out.print(“输入一个数字或完成后按ctrl+z:”);
data[count]=input.nextInt();
计数++;
}
而(计数<10);
此外:
如果您使用的是input.nextInt();
,最好检查使用。啊,您的while循环正在等待查看输入是否有nextdouble()
在用户输入下一个双精度键或按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());
注意上面的count++我认为它修复了另一个bug。啊,您的while循环正在等待查看输入是否有nextdouble()
在用户输入下一个双精度键或按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());
请注意上面的count++我认为它修复了另一个bug。为什么在读取整数时要检查流中是否有另一个double?为什么在读取整数时要检查流中是否有另一个double?可能重复?因为我不认为你,所以我在这里留下了我的下一票回答了问题。OP问“我的问题是我不知道为什么代码会跳转…”和“…请问我做错了什么?”。我认为你没有处理过这两个问题。你的第一句话“原因是第一次执行do块,然后检查条件”我完全无法理解。我把我的反对票留在那里,因为我认为你没有回答这个问题。OP问“我的问题是我不知道为什么代码会跳转…”和“…请问我做错了什么?”。我认为你没有处理这两个问题。你的第一句话“原因是第一次执行do块,然后检查条件”对我来说是完全无法理解的。非常感谢,因为你的回答,我现在已经了解我的问题来自何处。我太棒了:)非常感谢,因为你的回答,我现在了解我的问题来自何处。我太棒了:)