问题是,即使是真的,while循环中的第一个条件根本不会被执行。如果我从while循环中删除逻辑OR并只写第一个条件(git reset --hard
git pull origin
git merge
),它可以正常工作。但是如果Logical OR有两个条件,它就不起作用。
我尝试使用selection.compareToIgnoreCase("O") >0
,我也试图否定逻辑使用
equals()
。第二个条件正常,但第一个条件根本不起作用。
while(!selection.equals("O") || !selection.equals("E"))
}
答案 0 :(得分:2)
您的字符串比较不正确。比较以返回-1/0/1为less / equal / greater。
更明确的方法是使用toUppercase().equals(...
。
while (!selection.toUpperCase().equals("O") && !selection.toUpperCase().equals("E")){
答案 1 :(得分:1)
那是不适用于两种情况,需要!... && ! ...
OR ||
会产生永远为真的效果,至少有一种情况是假的。或者!(... || ...)
。
while (!selection.equalsIgnoreCase("O") && !selection.equalsIgnoreCase("E")) {
让我们简化:
!(n == 1) || !(n == 2) // WRONG
n != 1 || n != 2 // WRONG
将永远为真,因为n == 1为false或n == 2为false:最多一个选项可以为真,伪造其他选项。所以至少在一边是假的,是的,所以整个表达都是真的。
!(n == 1) && !(n == 2) // GOOD
n != 1 && n != 2 // GOOD
精神错误是语言OR主要意味着独占或。
可能是等价的:
!(n == 1 || n == 2) <=> n != 1 && n != 2 [De Morgan's law]