在 java 的 do 循环中检查条件
check for a condition in a do loop in java
我创建了一个简单的 do while
循环,我想在其中检查一个条件(字符数为 2 并且两个字符都相等)。
出于某种原因,如果我将循环与 ||
运算符一起使用,它会起作用;如果我将循环与 &&
运算符一起使用,它就不起作用。
我发现很难理解为什么条件适用于 ||而不是 &&.
有什么想法吗?
String check;
do {
int num = (int)(Math.random()*200)+10;
System.out.println(num);
check = String.valueOf(num);
} while (check.charAt(0) != check.charAt(1) || check.length() != 2 );
可能你错过了在某处应用否定。
如果您想将基于 ||
的表达式转换为基于 &&
的表达式,则必须执行以下操作:
while (!(check.length() == 2 && check.charAt(0) == check.charAt(1)));
请注意,为了避免 ArrayIndexOutOfBoundsException
,我正在切换表达式的各个部分,以便我们首先检查 String
的大小,然后我们测试第一个两个字符表示相等。
您的停止条件是长度为 2 并且两个字符都相等。
这意味着:当 (check.length() == 2 && check.charAt(0) == check.charAt(1))
时停止 请注意,最好先检查长度,因为 &&
是短路运算符,否则如果检查的长度小于 2,您将得到一个例外。
现在,由于 do-while 循环的条件是何时继续循环,您想要否定它(告诉循环何时继续,而不是何时停止)。所以你想要:!(check.length() == 2 && check.charAt(0) == check.charAt(1))
.
您可以保留它,或者您可以使用 De-Morgan 定律并将其转换为 || 表达式:!(A && B) =~ !A || !B
所以对于您的条件,!(check.length == 2) || !(check.charAt(0) == check.charAt(1))
是等效的对于 check.length != 2 || check.charAt(0) != check.chatAt(1)
,这是您编写的有效条件。由于所有转换都是 iff(当且仅当),您可以看到等同于您的 ||条件。
如果您使用 AND
条件(即 while (check.charAt(0) != check.charAt(1) && check.length() != 2 )
),则循环将在任一条件失败时退出。第一个 AND 第二个条件都必须为真,循环才能继续。因此,如果您输入一个 2 位数字,即使前两个字符匹配,循环也会退出。类似地,如果您得到前两位数字匹配的 3 位数字,则循环将退出。这是预期的逻辑吗?
我创建了一个简单的 do while
循环,我想在其中检查一个条件(字符数为 2 并且两个字符都相等)。
出于某种原因,如果我将循环与 ||
运算符一起使用,它会起作用;如果我将循环与 &&
运算符一起使用,它就不起作用。
我发现很难理解为什么条件适用于 ||而不是 &&.
有什么想法吗?
String check;
do {
int num = (int)(Math.random()*200)+10;
System.out.println(num);
check = String.valueOf(num);
} while (check.charAt(0) != check.charAt(1) || check.length() != 2 );
可能你错过了在某处应用否定。
如果您想将基于 ||
的表达式转换为基于 &&
的表达式,则必须执行以下操作:
while (!(check.length() == 2 && check.charAt(0) == check.charAt(1)));
请注意,为了避免 ArrayIndexOutOfBoundsException
,我正在切换表达式的各个部分,以便我们首先检查 String
的大小,然后我们测试第一个两个字符表示相等。
您的停止条件是长度为 2 并且两个字符都相等。
这意味着:当 (check.length() == 2 && check.charAt(0) == check.charAt(1))
时停止 请注意,最好先检查长度,因为 &&
是短路运算符,否则如果检查的长度小于 2,您将得到一个例外。
现在,由于 do-while 循环的条件是何时继续循环,您想要否定它(告诉循环何时继续,而不是何时停止)。所以你想要:!(check.length() == 2 && check.charAt(0) == check.charAt(1))
.
您可以保留它,或者您可以使用 De-Morgan 定律并将其转换为 || 表达式:!(A && B) =~ !A || !B
所以对于您的条件,!(check.length == 2) || !(check.charAt(0) == check.charAt(1))
是等效的对于 check.length != 2 || check.charAt(0) != check.chatAt(1)
,这是您编写的有效条件。由于所有转换都是 iff(当且仅当),您可以看到等同于您的 ||条件。
如果您使用 AND
条件(即 while (check.charAt(0) != check.charAt(1) && check.length() != 2 )
),则循环将在任一条件失败时退出。第一个 AND 第二个条件都必须为真,循环才能继续。因此,如果您输入一个 2 位数字,即使前两个字符匹配,循环也会退出。类似地,如果您得到前两位数字匹配的 3 位数字,则循环将退出。这是预期的逻辑吗?