2014-02-21 64 views
2

即时学习java和目前即时通讯卡在一个练习中,我无法理解为什么代码的行为是这样的。我在纸上寻找我的步骤,但我期望与程序实际上不同的答案。如果任何人都可以请解释为什么它做什么,它简单的while循环练习

CODE:

System.out.print("Enter an integer: "); 
int numb = in.nextInt(); 

    while (in.hasNextInt()) 
    { 
     System.out.println(numb); 
     System.out.print("Enter an integer: "); 
     numb = in.nextInt();  
    } 

测试仪是刚刚进入的数字,所以输出应该是这样的:

Enter an integer: 5 
- 5 
- Enter an integer: 10 
- 10 
- Enter an integer: 8 
- 8 
- Enter an integer: k 
... 

但它看起来是这样的:

Enter an integer: 5 
- 10 
- 5 
- Enter an integer: -4 
- 10 
- Enter an integer: 8 
- -4 
- Enter an integer: -6 
- 8 
- Enter an integer: 11 
- -6 
- Enter an integer: -1 
+0

基本上,'hasNextInt'看起来_ahead_以查看_next_'nextInt'是否可能;它并没有看到后面的'nextInt'是否工作。 – ajb

回答

6

这是因为您过早地使用in.hasNextInt()(或者太迟了,取决于你如何看待它):Scanner不能告诉你它是否看到一个整数,直到最终用户输入一个值后

如果您提示输入一个数字,然后检查hasNextInt,你的代码不应该跳过第二个提示:

System.out.print("Enter an integer: "); 
while (in.hasNextInt()) { 
    int numb = in.nextInt();  
    System.out.println(numb); 
    System.out.print("Enter an integer: "); 
} 

这也将避免在情况异常时,第一个条目是不是一个数字。

+0

谢谢你花时间回答我,但不知怎的,我仍然不完全明白,也许我看错了。扫描“int扫描”的输入int numb = in.nextInt(); ?如果是这样,那么如何测量第一个环路条件,如果在那一点上,扫描仪尚未扫描用户输入,并且它不知道它是否为整型。 – user3338991

+0

@ user3338991你试过运行这段代码吗?你得到了什么结果? – dasblinkenlight

+0

我得到了正确的结果,谢谢你,但因为我正在尝试学习java,我试着去理解为什么,这个回避了我目前的状况。 例如,如果我输入的是字母而不是int,为什么此代码不打印它,scann和print是在循环内部,它们之间没有条件。 也许我不明白java的执行顺序?你可以请一步一步的代码?谢谢 – user3338991