Java做while循环使字符串测试的行为不同

时间:2016-10-06 04:56:37

标签: java do-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

3 个答案:

答案 0 :(得分:17)

让我们把它说出来。

“只要它不是苹果就吃掉所有这些水果,或者它不是橙子。”

  • 草莓:不是苹果,继续。
  • 香蕉:不是苹果,继续。
  • 橙色:不是苹果,所以......继续。
  • Apple:是苹果;但实际上不是橙色,所以...继续...... :(

如果它是苹果,“不是橙子”将是真的;如果它是橙色,“不是苹果”将是真的;如果是奇异鸟,两者都是真的。没有办法停止进食(除非你爆炸或昏迷)。

错误的逻辑导致人们死于水果。

你想要“吃掉所有这些水果,只要它不是苹果,也不是橙子”。

答案 1 :(得分:1)

||表示OR。

A ||如果A为真或B为真,则B为真。

在你的第二个while循环中:!"Y".equals(input)为false,因为Y等于你的输入。但是!"N".equals(input)为真,因为N不等于您的输入。 Hense整个条件都是真的,它再次进入while循环。

答案 2 :(得分:0)

Any Or条件就像这样

如果第一部分为真,则不评估第二部分 如果first为假,则评估第二个 如果其中一个为真,则结果为真。

现在在您的情况下,由于输入为Y,因此第一个条件为false,但第二个条件为真。因此循环评估为true。

while循环将继续,直到您将条件设为false。因此它继续。