Java 为什么((ans!=&&x27;N&&x27;)(ans!=&&x27;Y&&x27;)总是正确的?
我试图提示用户再次旋转,而我的“while”表达式总是返回为false。。。有人有什么想法吗Java 为什么((ans!=&&x27;N&&x27;)(ans!=&&x27;Y&&x27;)总是正确的?,java,while-loop,boolean,Java,While Loop,Boolean,我试图提示用户再次旋转,而我的“while”表达式总是返回为false。。。有人有什么想法吗 reSpin = false; if (reSpin == false){ System.out.println("Would you like to spin again? Y/N"); char ans = in.next().charAt(0); if (ans == 'Y'){ reSpin =true; }else if (ans == 'N'){
reSpin = false;
if (reSpin == false){
System.out.println("Would you like to spin again? Y/N");
char ans = in.next().charAt(0);
if (ans == 'Y'){
reSpin =true;
}else if (ans == 'N'){
System.out.println("Thank you for playing!");
}else {
while ((ans != 'N') || (ans != 'Y')) {
System.out.println("Invalid answer, please only enter Y/N");
System.out.println("Would you like to spin again? Y/N");
ans = in.next().charAt(0);
}
}
}
您可能希望使用:
while ((ans != 'N') && (ans != 'Y')) {
检查以查看
ans
不是N也不是Y。如果在那里使用|
(或),那么它将检查ans
不是N,也不是Y(这对于ans
的任何值都是真的)。|
如果任一侧的表达式之一为真,则返回真
如果ans
是Y
,则ans!='N'
为真,因此整个表达式(ans!=“N”)| |(ans!=“Y”)
为真。如果ans
是N
,则ans!='Y'
为true,因此整个表达式为true
你需要
(ans!=“N”)和&(ans!=“Y”)
,这表示“ans
不是'N'
,ans
也不是'Y'ans
不能同时是'N'和'Y',因此它总是不等于'N'或不等于'Y'。您可能希望将其更改为:
while ((ans != 'N') && (ans != 'Y'))
这确保了它既不等于“N”,也不等于“Y”。相当简单:根据您的比较,ans
必须同时为Y
和N
。是Y
=N
?如果ans
是Y
,则它不等于N
。那么N
==Y
呢?如果ans
为N
则不是Y
。因此,没有一个字母可以同时满足这两个条件。此外,如果您应用,那么您的表达式可以写成((ans=='N')&&&(ans=='Y'))
,这可能更清楚。感谢@ElliottFrisch提到DeMorgan!这是我今天看到的第二个可以用这些简单规则解决的问题!我知道。幸运的是,我们在这里使用计算机:要么是,要么不是。