我对使用||的行为感到非常困惑.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
答案 0 :(得分:17)
让我们把它说出来。
“只要它不是苹果就吃掉所有这些水果,或者它不是橙子。”
如果它是苹果,“不是橙子”将是真的;如果它是橙色,“不是苹果”将是真的;如果是奇异鸟,两者都是真的。没有办法停止进食(除非你爆炸或昏迷)。
错误的逻辑导致人们死于水果。
你想要“吃掉所有这些水果,只要它不是苹果,也不是橙子”。
答案 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。因此它继续。