3

行。所以我是Java的初学者。但是为什么这个循环永远不会结束,即使我输入 0 或 1。

do {
   //Ask user to enter 1 or 0           
   System.out.print("Enter 1 or 0: ");
   upOrDown = keyboard.nextInt();

} while(upOrDown != 0 || upOrDown != 1); 
//Here the loop should exit if user entered 1 or 0, but it does not.

所以,我在这里错过了什么,可能非常明显,我很抱歉:(

4

12 回答 12

8

你需要做一个&&.

您是在说“如果数字不是 0 或不是 1,则重试。” 然而,这总是正确的,因为它不能同时为 0 和 1。

所以,这就是你想要的:

do {
   //Ask user to enter 1 or 0           
   System.out.print("Enter 1 or 0: ");
   upOrDown = keyboard.nextInt();
} while(upOrDown != 0 && upOrDown != 1); 
于 2012-02-02T08:31:37.137 回答
5

因为每个数字都不是 1 或不是 0。不是吗?)) 2 is not 1, 1 is not 0 and 0 is not 1
如果你想结束循环,如果 upOrDown 是 0 或者是 1 你应该使用&&
while(upOrDown != 0 && upOrDown != 1);

于 2012-02-02T08:31:36.183 回答
4

您基本上是在说“这样做直到它不是 0 或不是 1”。这总是正确的,因为一个变量不能同时有两个值。

你应该这样说: “这样做直到我的值不是 0 AND 不是 1”所以:

while(upOrDown != 0 && upOrDown != 1)

会做你想做的。

于 2012-02-02T08:31:58.850 回答
4

与Java无关,只是基本逻辑。upOrDown != 0 || upOrDown != 1始终为真,因为不能同时为 0 和 1 - 它始终为 !=0 或 !=1 upOrDown你可能想要upOrDown != 0 && upOrDown != 1

于 2012-02-02T08:32:08.477 回答
4
upOrDown != 0 || upOrDown != 1

将评估true数字是否不同于0或不同于1

它会是什么。

总是。

于 2012-02-02T08:32:29.207 回答
4

您的情况有问题,将其更改为upOrDown == 0 || upOrDown == 1upOrDown != 0 && upOrDown != 1

于 2012-02-02T08:32:34.383 回答
4

以下:

upOrDown != 0 || upOrDown != 1

相当于:

!(upOrDown == 0 && upOrDown == 1)

upOrDown既会是1也永远不会是真的事实0,即总是假的,因此,它的否定永远是真的,因此你得到一个无限循环

这是布尔代数(和集合论)的一个非常著名的结果,称为德摩根定律 [ http://en.wikipedia.org/wiki/De_Morgan%27s_laws ]。你应该做的是:

!(upOrDown == 0 || upOrDown == 1)
于 2012-02-02T08:34:34.383 回答
3

while(upOrDown != 0 && upOrDown != 1);

upOrDown如果不是 0 AND不是 1 ,您想退出循环

于 2012-02-02T08:32:08.617 回答
3

你有一个或条件。如果其中一个条件为真,它将继续。因此,如果您输入 0,则条件 !=1 为真。明白了吗?

于 2012-02-02T08:32:39.740 回答
3
 while(upOrDown != 0 || upOrDown != 1); 

由于upOrDown不能同时为 0 和 1,因此此循环将永远不会终止。

于 2012-02-02T08:34:04.730 回答
3

做这个,

while(upOrDown != 0 && upOrDown != 1);

您是 Java 的初学者,请阅读此内容。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.23

于 2012-02-02T08:49:36.753 回答
2

你的条件总是正确的。这就是为什么循环永远不会结束。

您可能想更改为upOrDown != 0 && upOrDown != 1

了解有关 while 循环的更多信息

于 2012-02-02T08:35:15.307 回答