我想知道为什么一个循环有效,而另一个循环没有,即使它们非常相似。
我想循环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();
答案 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.12中while
的官方说明的部分内容,相关文字由我标记为(粗体):
首先评估Expression时执行while语句。如果结果是Boolean类型,则需要进行拆箱转换(第5.1.8节)。
如果由于某种原因,对Expression或随后的拆箱转换(如果有)的评估突然完成,则while语句会因同样的原因而突然完成。
否则,继续执行,根据结果值进行选择:
如果值为true,则执行包含的Statement。然后有一个选择:
如果Statement的执行正常完成,则再次执行整个while语句,首先重新计算Expression。
如果声明的执行突然完成,请参见§14.12.1。
如果Expression的(可能是未装箱的)值为false,则不会采取进一步操作,而且while语句正常完成。
这意味着,在第一次执行循环内容之前检查表达式。如果它导致false
,则不执行内容并终止循环。