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块,然后检查条件”对我来说是完全无法理解的。非常感谢,因为你的回答,我现在已经了解我的问题来自何处。我太棒了:)非常感谢,因为你的回答,我现在了解我的问题来自何处。我太棒了:)