提问人:anapollosun 提问时间:2/7/2017 最后编辑:anapollosun 更新时间:2/7/2017 访问量:3690
Java Boolean while 循环 - 计算否定
Java Boolean while loop - Evaluating a negation
问:
我是 Java 的初学者,虽然我认为我对布尔逻辑的理解相当好,但我被这个 while 循环绊倒了:
boolean done = false;
while(!done) {
String answer = JOptionPane.showInputDialog(null, "message");
if (answer == null) finish();
try {
sales = Double.parseDouble(answer);
if (sales<= 0) throw new NumberFormatException();
else done = true;
}
我显然读错了,因为代码是有效的,并且是直接取自一本书,但我评估它的方式是:
done = 假,
而 (done = true)
[代码]
否则完成 = true
因此,这似乎会创建一个无限循环(或者根本不启动 while 循环),但事实并非如此。有人可以帮忙解释一下吗?
答:
您错误地将循环条件误读为 ,这与实际含义相反(并且使用了错误的运算符)。您不会将布尔值与布尔值进行比较;从技术上讲,这是一个愚蠢的行为。您也不要在条件表达式中为循环变量赋值,因为这会导致麻烦,并且不是您想要的。while (done = true)
让我们来看看它。
done
开始。在条件 中需要一个布尔表达式。布尔表达式的计算结果必须为 to 才能执行循环体。 => 第一次。的值是多少?它!因此,表达式的计算结果为 to 并执行循环体。false
while (!done)
true
!done
!false
!false
true
true
评论
done
可以更改值。这是一个变量。因此,评估到在评估时对任何值的否定。所以当是真的,那么是假的。停止循环是 的重点。这在 Java 教程中进行了解释。!done
done
done
!done
while(false)
while
让我们为有效行提供一些行号:
while(!done) // (1)
{
String answer = JOptionPane.showInputDialog(null, "message");
if (answer == null) finish();
try
{
sales = Double.parseDouble(answer); // (2)
if (sales<= 0) throw new NumberFormatException();
else done = true; // (3)
}
(1) 首先执行,是 false,所以是 true,所以 while 循环开始。done
!done
(2) 获取用户输入,假设它大于 0,则转到 (3)。
(3) 设置为 true。done
现在,假设代码执行已到达 while 循环的末尾。(1)再次执行。这一次,是真的,所以是假的。如果 while 循环中的条件为 false,则 while 循环将停止迭代,并执行 while 循环正下方的代码。done
!done
因此,这似乎会创建一个无限循环
如果您输入大于或等于 0 的数字,则不会出现这种情况。正如我刚才所说,大于 0 的数字将导致 while 循环停止。如果你一直输入负数,就会一直为假,所以一直为真。因此,while 循环永远不会停止。done
!done
评论
while(!done)
相当于while(done == false)
catch
finally
try
while
while
try