Java:用 || 做和 && 运算符

Java: Do While with || and && operators

所以我对以下内容有点困惑:

在测试布尔值时,我的第一印象是使用 ||运算符的条件。这没有用,循环会不断重复以获得正确的响应。但是如果我使用 && 运算符,那么它会按照我想要的方式评估条件。

我觉得这是倒退的,我看的不对。谁能解释一下?

为了更清楚地说明,我最初想做的是:

    String input;
Scanner keyboard = new Scanner(System.in);

do
{
    System.out.print("Enter one of the following names: John, Katie, Richard");
    input = keyboard.nextLine();
    input = input.toLowerCase();

} while ( !input.equalsIgnoreCase("John") && !input.equalsIgnoreCase("Katie") && !input.equalsIgnoreCase("Richard"));

我希望循环重复,直到输入给定名称之一。因此,如果我输入 katie,它应该继续,但如果我输入 bob,它应该重复。

因此,如果我输入 john,布尔值会首先检查它。 !(john = john) 即 FT = false。 因为我只想检查它是否等于 john,而不是 richard 或 katie 我想使用 ||操作员。为什么我还要检查它是否等于这些名称。

while ( !(mediumInput.compareToIgnoreCase("one") ==0
    && !(mediumInput.compareToIgnoreCase("two") == 0)
    && !(mediumInput.compareToIgnoreCase("three") == 0));

这里的双重否定太多了。你只是在混淆自己。这样看:

while (mediumInput.compareToIgnoreCase("one") != 0
    && mediumInput.compareToIgnoreCase("two") != 0
    && mediumInput.compareToIgnoreCase("three") != 0);

您可以立即看出使用 || 没有任何意义。当其中任何一个为假时,您不想循环:仅当所有这些都为假时。

这是基本的布尔逻辑。您的陈述相当于 !A && !B && !C - 反过来相当于 !(A || B || C)

最简单的推理方法是通过逻辑表:

A B C | !A !B !C | !A && !B && !C | A || B || C | !(A || B || C)
------+----------+----------------+-------------+---------------
F F F |  T  T  T |        T       |      F      |        T      
T F F |  F  T  T |        F       |      T      |        F      
F T F |  T  F  T |        F       |      T      |        F      
T T F |  F  F  T |        F       |      T      |        F      
F F T |  T  T  F |        F       |      T      |        F      
T F T |  F  T  F |        F       |      T      |        F      
F T T |  T  F  F |        F       |      T      |        F      
T T T |  F  F  F |        F       |      T      |        F      

如您所见,这两个表达式在所有情况下都具有相同的布尔值。