逻辑OR在while循环中无法正常工作

时间:2018-04-18 08:07:21

标签: java while-loop conditional logical-operators

问题是,即使是真的,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"))

}

2 个答案:

答案 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]