Java do while不是0或1

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.

所以,我在这里错过了什么,可能非常明显,我很抱歉 :(
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); 

5

因为每个数字都不是1或0。是这样吗? )) 2不是1,1不是0,0不是1。
如果你想在upOrDown等于0或1时结束循环,你应该使用&&
while(upOrDown != 0 && upOrDown != 1);


哇,我现在感觉很愚蠢。我知道这个……只是太累了。逻辑大脑失灵。^^ - lejahmie
1
没关系;-)有时候我也会在疲惫或失眠的情况下陷入这样的事情。 - shift66

4

你基本上是在说"一直执行此操作,直到它不是0或1为止。"这将始终是true,因为变量不能同时具有两个值。

你应该这样说:"一直执行此操作,直到我的值不是0 AND不是1为止",因此:

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

我会按照您的要求进行操作。


4
upOrDown != 0 || upOrDown != 1

如果数字不等于0且不等于1,将评估为true

这将始终是如此。


4
以下内容:
upOrDown != 0 || upOrDown != 1

等价于:

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

upOrDown 同时为 10 的情况永远不会发生,即始终为假,因此其否定将始终为真,从而导致无限循环。

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

!(upOrDown == 0 || upOrDown == 1)

因提到摩尔定律而获得点赞。学习基础知识是很好的。 - migu

4

与Java无关,只是基本逻辑。upOrDown != 0 || upOrDown != 1总是成立的,因为upOrDown不能同时为0和1 - 它总是!=0或!=1。您可能想要upOrDown != 0 && upOrDown != 1


4

您的条件有误,请将其更改为upOrDown == 0 || upOrDown == 1upOrDown != 0 && upOrDown != 1


3
 while(upOrDown != 0 || upOrDown != 1); 

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

3

3

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

如果upOrDown不是0 并且不是1,您希望退出循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接