Java不支持0或1

Java不支持0或1,java,do-while,Java,Do While,嗯。所以我完全是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 o

嗯。所以我完全是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.

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

因为每个数字不是1或者不是0。不是吗?)2不是1,1不是0,0不是1
如果要在upOrDown为0或1时结束循环,则应使用
&&


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

您需要执行
&&

您的意思是“如果数字不是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); 

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

你应该这样说: “执行此操作直到我的值不是0而不是1”因此:

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

将执行您想要的操作。

与Java无关,只是基本逻辑<代码>向上向下!=0 | |向上!=1
始终为真,因为
upOrDown
不能同时为0和1-它始终为0或1=0或=1.您可能想要
upOrDown!=0&&upOrDown!=1

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

如果
upOrDown
不是0且不是1,则要退出循环

upOrDown != 0 || upOrDown != 1
如果数字不同于
0
或不同于
1
,则将计算为
true

就是这样


始终。

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

您有一个or条件。如果其中一个条件为真,它将继续。 因此,如果您键入0,则比条件=1是真的。 明白我的意思吗

 while(upOrDown != 0 || upOrDown != 1); 
由于
upOrDown
不能同时为0和1,因此此循环将永远不会终止。

以下内容:

upOrDown != 0 || upOrDown != 1
相当于:

!(upOrDown == 0 && upOrDown == 1)
upOrDown
将同时为
1
0
的事实永远不会为真,即始终为假,因此其否定将始终为真,因此您将得到一个无限循环

这是布尔代数(和集合论)的一个非常著名的结果,叫做DeMorgan定律[]。你应该做的是:

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

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

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

这样做

while(upOrDown != 0 && upOrDown != 1);
您是Java的初学者,请阅读本文


哇,我现在觉得自己很愚蠢。我知道这个。。。我只是很累。逻辑性脑功能衰竭^^没关系;-)有时候,当我累了或者睡不着觉的时候,我也会结结巴巴地做这样的事情。投票赞成提到摩尔定律。学习基础知识很好。