Java做while循环使字符串测试行为不同
我对使用||的行为感到非常困惑 .equals函数的运算符。 有没有理由我不能在字符串或其他东西上使用它?
这工作:
do{ System.out.println("Play again? [Y/N]"); //input: Y play = in.nextLine(); play = play.toUpperCase(); } while(!"Y".equals(input) ); //breaks out of loop (as it should)
为什么这不起作用?!
do{ System.out.println("Play again? [Y/N]"); //input: Y play = in.nextLine(); play = play.toUpperCase(); } while( !"Y".equals(input) || !"N".equals(input) ); //infinite loop
我们把它说成文字。
“吃所有这些水果,只要它不是苹果,或者它不是橙子。”
- 草莓:不是苹果,继续。
- 香蕉:不是苹果,继续。
- 橙色:不是苹果,所以……继续。
- Apple:是苹果; 但实际上不是橙色,所以…继续…… 🙁
如果它是苹果,“不是橙子”将是真的; 如果它是橙色,“不是苹果”将是真的; 如果是奇异果,两者都是真的。 没有办法停止进食(除非你爆炸或昏迷)。
糟糕的逻辑导致人们死于果实。
你想要“吃掉所有这些水果,只要它不是苹果,也不是橙子”。
||
是指OR。
A || 如果A为真或B为真,则B为真。
在你的第二个while循环中: !"Y".equals(input)
为false,因为Y等于你的输入。 但是!"N".equals(input)
为真,因为N不等于您的输入。 Hense整个条件都是真的,它再次进入while循环。
任何Or条件都是这样的
如果first part为true,则不计算第二个条件如果first为false,则计算second,如果其中一个为true,则结果为true。
现在在你的情况下,因为输入是Y,第一个条件是假,但第二个是真的。 因此循环评估为true。
while循环将继续,直到您将条件设为false。 因此它继续下去。