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。 因此它继续下去。