Java 布尔 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;
}
我显然读错了,因为代码有效并且直接取自一本书,但我评估它的方式是:
完成=错误,
同时(完成 = 真)
[代码]
其他完成=真
所以看起来这会创建一个无限循环(或者根本不会启动 while 循环),但事实并非如此。有人可以帮忙解释一下吗?
您将循环条件误读为while (done = true)
,这与实际含义相反(并且使用了错误的运算符)。您不会将布尔值与布尔值进行比较;用技术术语来说,这是一个愚蠢的行为。您也不要为条件表达式中的循环变量赋值,因为这会导致麻烦,并且不是您想要的。
让我们来看看它。
done
开始 false
。您需要在条件 while (!done)
中使用布尔表达式。布尔表达式的计算结果必须为 true
才能执行循环体。 !done
=> !false
第一次。 !false
的值是多少?是true
!所以表达式的计算结果为 true
并且循环体执行。
让我们给重要的行一些行号:
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)先执行,done
为假,所以!done
为真,于是while循环开始。
(2) 获取用户输入,假设它大于 0,则转到 (3)。
(3) 将 done
设置为真。
现在假设代码执行已经到达 while 循环的末尾。 (1) 再次执行。这次,done
为真,因此 !done
为假。如果while循环中的条件为假,while循环停止迭代并执行while循环正下方的代码。
So it would seem that this would create an infinite loop
如果您输入大于或等于 0 的数字,则不会。正如我刚才所说,大于 0 的数字将导致 while 循环停止。如果您一直输入负数,done
将一直为假,因此 !done
一直为真。结果,while 循环永远不会停止。
我是 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;
}
我显然读错了,因为代码有效并且直接取自一本书,但我评估它的方式是:
完成=错误,
同时(完成 = 真)
[代码]
其他完成=真
所以看起来这会创建一个无限循环(或者根本不会启动 while 循环),但事实并非如此。有人可以帮忙解释一下吗?
您将循环条件误读为while (done = true)
,这与实际含义相反(并且使用了错误的运算符)。您不会将布尔值与布尔值进行比较;用技术术语来说,这是一个愚蠢的行为。您也不要为条件表达式中的循环变量赋值,因为这会导致麻烦,并且不是您想要的。
让我们来看看它。
done
开始 false
。您需要在条件 while (!done)
中使用布尔表达式。布尔表达式的计算结果必须为 true
才能执行循环体。 !done
=> !false
第一次。 !false
的值是多少?是true
!所以表达式的计算结果为 true
并且循环体执行。
让我们给重要的行一些行号:
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)先执行,done
为假,所以!done
为真,于是while循环开始。
(2) 获取用户输入,假设它大于 0,则转到 (3)。
(3) 将 done
设置为真。
现在假设代码执行已经到达 while 循环的末尾。 (1) 再次执行。这次,done
为真,因此 !done
为假。如果while循环中的条件为假,while循环停止迭代并执行while循环正下方的代码。
So it would seem that this would create an infinite loop
如果您输入大于或等于 0 的数字,则不会。正如我刚才所说,大于 0 的数字将导致 while 循环停止。如果您一直输入负数,done
将一直为假,因此 !done
一直为真。结果,while 循环永远不会停止。