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
如您所见,这两个表达式在所有情况下都具有相同的布尔值。
所以我对以下内容有点困惑:
在测试布尔值时,我的第一印象是使用 ||运算符的条件。这没有用,循环会不断重复以获得正确的响应。但是如果我使用 && 运算符,那么它会按照我想要的方式评估条件。
我觉得这是倒退的,我看的不对。谁能解释一下?
为了更清楚地说明,我最初想做的是:
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
如您所见,这两个表达式在所有情况下都具有相同的布尔值。