2017-06-22 87 views
0

这里是我的代码在做第一行代码... while循环跳过而进入第二次循环时 - 的Java

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("Enter a number or ctrl + z when you are done: ");do {。这可以在输出的第二行看到。请问我做错了什么?

...我已经寻找情况下,我的问题可能已经回答了,但只能够找到与代码解决方案跳过nextLine()

+3

为什么在阅读整数时检查流中是否存在另一个双精度值? – tkausl

+0

[while hasNextInt()While while actually reading?](https://stackoverflow.com/questions/35633931/while-loop-with-hasnextint-actually-reading) –

回答

1

啊while循环正在等待,看看输入hasNextDouble()

怎么能知道,直到你的用户已经进入了下一个双或按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()); 

注意计数++上面还有我觉得它修复另一个bug。

+0

非常感谢,因为你的回答我现在已经明白我的问题来自哪里。真是太棒了:) –

0

这是因为,以input.hasNextDouble()等待第一个电话的号码,然后再继续输入。

所以将不会出现在所述迭代循环的消息,直到input.hasNextDouble()第一迭代循环的的结束运行 - 这当然取第二个数字。

您需要之前打印的邮件你打电话或者hasNextDoublehasNextInt

2

原因是第一次do块被执行,然后检查条件while

关于hasNextDouble()orcale doc

返回true,如果在此扫描器输入信息的下一个标记可以 解释为使用nextDouble()方法的双重价值。 扫描仪不会超过任何输入。如果您正在使用input.nextInt();,更好地利用hasNextInt()检查

作为一个解决方案,您可以更改条件如下图所示:

do { 
    System.out.print("Enter a number or ctrl + z when you are done: "); 
    data[count] = input.nextInt(); 
    count++; 
} 
while (count < 10); 

也。

+0

我已经离开了我的downvote,因为我不要以为你回答了这个问题。OP问:“我的问题是我不知道为什么代码跳跃......”和“......请问我做错了什么?”。我认为你没有处理过这些问题。你的第一句话“原因是第一次执行块,然后检查条件”对我来说完全是难以理解的。 –

+0

再次感谢。我现在清楚地说明了原因。 – Blasanka

+1

谢谢你的回答Blasanka –

相关问题