Java - while循环表达式

时间:2017-02-14 19:33:47

标签: java

我想知道为什么一个循环有效,而另一个循环没有,即使它们非常相似。

我想循环dmCyl循环,直到输入正整数。这是不起作用的循环。但是,在用户输入int之前循环的hgtCyl循环确实有效。似乎完全忽略了(dmCyl < 0)循环。那是为什么?

此外,无论我将hgtCyl = scnr.nextInt();放在while (after scnr.next())中还是在其外部,都可以使用循环。它的位置有什么变化吗?

谢谢!

编辑: 将第一个while设置为do while循环可以解决问题 再次感谢!
解决方案:

dmCyl = scnr.nextInt();

    do{
        System.out.print("please insert positive int");
         dmCyl = scnr.nextInt();
    }while (dmCyl < 0); 

原始代码:

int dmCyl = 0;
int hgtCyl = 0;

Scanner scnr = new Scanner(System.in);

while (dmCyl < 0) {
    System.out.print("Please enter an integer");
    scnr.next();
}

dmCyl = scnr.nextInt();

有效的循环:

while (!scnr.hasNextInt()){
    System.out.print("Please enter an integer");
    scnr.next();
}

hgtCyl = scnr.nextInt();

4 个答案:

答案 0 :(得分:4)

使用do / while

do {
    System.out.print("Please enter an integer");
    dmCyl = scnr.nextInt();
} while (dmCyl < 0); 

答案 1 :(得分:1)

您最初将dmCyl设置为零,然后您告诉循环仅在小于零时进行。因为在它启动循环时它已经满足条件并且从不进入循环。将dmCyl设为等于-1。

答案 2 :(得分:1)

您初始化 INDENT ^K, less ^K. more ,因此您的陈述dmCyl = 0为false ..您应该尝试添加以下内容:dmCyl < 0

答案 3 :(得分:1)

以下是Java Language Specification 14.12while的官方说明的部分内容,相关文字由我标记为(粗体):

  

首先评估Expression时执行while语句。如果结果是Boolean类型,则需要进行拆箱转换(第5.1.8节)。

     

如果由于某种原因,对Expression或随后的拆箱转换(如果有)的评估突然完成,则while语句会因同样的原因而突然完成。

     

否则,继续执行,根据结果值进行选择:

     
      
  • 如果值为true,则执行包含的Statement。然后有一个选择:

         
        
    • 如果Statement的执行正常完成,则再次执行整个while语句,首先重新计算Expression。

    •   
    • 如果声明的执行突然完成,请参见§14.12.1。

    •   
  •   
     

如果Expression的(可能是未装箱的)值为false,则不会采取进一步操作,而且while语句正常完成。

这意味着,在第一次执行循环内容之前检查表达式。如果它导致false,则不执行内容并终止循环。