Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查java中do循环中的条件_Java_Do While - Fatal编程技术网

检查java中do循环中的条件

检查java中do循环中的条件,java,do-while,Java,Do While,我创建了一个简单的do-while循环,我想检查一个条件(字符数为2,两个字符相等) 出于某种原因,如果我将循环与|运算符一起使用,它会工作;如果我将循环与&&运算符一起使用,它不会工作 我发现很难理解为什么这个条件与| |而不是与&一起工作 有什么想法吗 String check; do { int num = (int)(Math.random()*200)+10; System.out.println(nu

我创建了一个简单的
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
,我正在切换表达式的片段,以便首先检查
字符串的大小,然后测试前两个字符是否相等。

停止的条件是长度为2,并且两个字符都相等

这意味着:当
(check.length()==2&&check.charAt(0)==check.charAt(1))
注意,最好先检查长度,因为
和&
是一个短路运算符,否则如果check的长度小于2,您将得到一个异常

现在,由于do while循环的条件是何时继续循环,因此您希望否定它(告诉循环何时继续,而不是何时停止)。所以你想要:
!(check.length()==2&&check.charAt(0)==check.charAt(1))


你可以把它放在那里,或者你可以使用德摩根定律,把它转换成一个| |表达式:
!(A&B)=~!A | | |!B
因此,对于您的情况,这将是
!(check.length==2)| |!(check.charAt(0)=check.charAt(1))
这相当于
check.length!=2 | |检查字符(0)!=检查.chatAt(1)
,这是您编写的有效条件。由于所有转换都是iff(当且仅当),因此您可以看到与| |条件等价的转换。

如果您使用
条件(即
while(check.charAt(0)!=check.charAt(1)&check.length()!=2)
,如果任一条件失败,循环将退出。第一个和第二个条件都必须为true,循环才能继续。因此,如果您点击一个2位数字,即使前两个字符匹配,循环也将退出。类似地,如果得到前两位匹配的3位数字,则循环将退出。这是预期的逻辑吗?

检查的值是多少?
?你想要什么确切的输出,因为u r|||条件代码根据u打印3位数字也可以正常工作…你知道为什么它使用| |表达式吗?如果我们有while(!(check.length()=2&&check.charAt(0)不是更好吗==检查字符(1));这样,如果检查为空,我们就不会在数组索引越界中结束exception@shayyy7,也许你错过了一个否定,这就是为什么。试试答案中的建议。