Java-while循环表达式

Java-while循环表达式,java,Java,我想知道为什么一个循环有效,而另一个循环无效,即使它们非常相似 我要循环的dmCyl循环,直到输入正整数。这是一个不起作用的循环。但是,hgtCyl循环确实起作用,它循环直到用户输入int。似乎(dmCyl

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

我要循环的
dmCyl
循环,直到输入正整数。这是一个不起作用的循环。但是,
hgtCyl
循环确实起作用,它循环直到用户输入int。似乎
(dmCyl<0)
循环完全被忽略了。为什么呢

此外,无论我放置
hgtCyl=scnr.nextInt(),工作的循环都会这样做在while主体中
(在scnr.next()之后)
或其外部。它的位置有什么变化吗

谢谢

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

dmCyl = scnr.nextInt();

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

最初将
dmCyl
设置为零,然后告诉循环仅在小于零时运行。因为在开始循环时,它已经满足了条件,并且从未进入循环。将
dmCyl
改为等于-1。

您初始化
dmCyl=0
,因此您的语句
dmCyl<0
为false。。您应该尝试添加如下内容:
while(dmcyl使用do/while

do {
    System.out.print("Please enter an integer");
    dmCyl = scnr.nextInt();
} while (dmCyl < 0); 
do{
系统输出打印(“请输入整数”);
dmCyl=scnr.nextInt();
}dmCyl<0;

这里是
的官方描述的一部分,而
来自我标记(粗体)的相关文本:

通过首先计算表达式来执行while语句。如果结果是布尔类型,则需要进行拆箱转换(§5.1.8)

如果表达式的求值或随后的取消装箱转换(如果有)由于某种原因突然完成,while语句也会因为同样的原因突然完成

否则,通过基于结果值进行选择继续执行:

  • 如果该值为true,则执行包含的语句。然后有一个选项:

    • 如果语句的执行正常完成,则整个while语句将再次执行,首先重新计算表达式

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

如果表达式的(可能未装箱)值为false,则不采取进一步的操作,while语句正常完成。


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

通常0不小于0。因此,第一个循环立即退出。或者,当进入循环时,
dmCyl
的值是多少(并且第一次测试
dmCyl<0
(dmCyl<0)
0<0
,这总是错误的。顺便说一句,在
dmCyl<0
循环中,您永远不会更改
dmCyl
的值,因此,如果进入循环,它将永远不会退出。为什么放置“dmCyl=scnr.nextInt();”在while循环之前不修复它吗?dmCyl不是用户输入而不是0吗?
while (!scnr.hasNextInt()){
    System.out.print("Please enter an integer");
    scnr.next();
}

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