在 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 位数字,则循环将退出。这是预期的逻辑吗?