Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 循环中的条件条件_Java_Conditional Statements - Fatal编程技术网

Java 循环中的条件条件

Java 循环中的条件条件,java,conditional-statements,Java,Conditional Statements,是否可以根据另一个条件对循环使用不同的条件 比如说 boolean isDfa = true; 如果isDfa为true,我希望while循环的条件为: while(!s.hasAllTransitions()) while(!input.equals("next")) 否则,如果isDfa为false,我希望while循环的条件为: while(!s.hasAllTransitions()) while(!input.equals("next")) 使用两个单独的循环是实现这一点的唯

是否可以根据另一个条件对循环使用不同的条件

比如说

boolean isDfa = true;
如果
isDfa
true
,我希望while循环的条件为:

while(!s.hasAllTransitions())
while(!input.equals("next"))
否则,如果
isDfa
false
,我希望while循环的条件为:

while(!s.hasAllTransitions())
while(!input.equals("next"))

使用两个单独的循环是实现这一点的唯一方法吗?

您可以结合以下条件:

while((isDfa && !s.hasAllTransitions()) || (!isDfa && !input.equals("next"))) {

}

你可以这样做:

boolean testBoolean = false;
while(!testBoolean)
{
   if(isDfa)
   {
       testBoolean = s.hasAllTransitions();
   }
   else
   {
       testBoolean = input.equals("next");
   }
}

您可以使用以下条件:

while((isDfa && !s.hasAllTransitions()) || (!isDfa && !input.equals("next"))) {

}

另一种方法是:

if (isDfa) {
    while(!s.hasAllTransitions()) {

    }
}
else {
    while(!input.equals("next")) {

    }
}

您可以使用三元运算符动态切换while条件

while(isDfa? !s.hasAllTransitions() : !input.equals("next")) {
  //do stuff
}

这意味着:如果isDfa为true,而s.hasAllTransitions为false,则继续。但是,如果isDfa为false且输入不等于next,则继续。

您可以使用三元运算符:

while ((isDfa) ? !s.hasAllTransitions() : !input.equals("next")) {
    ...
}
但是有时候,与其把所有的事情都塞进一个复杂的环境中,不如把事情分解。考虑这样做:

while (true) {
    if (isDfa) {
        if (s.hasAllTransitions()) {
            break;
        }
    } else {
        if (input.equals("next")) {
            break;
        }
    }
    ...
} 


而((isDfa&&!s.hasAllTransitions())| |!input.equals(“next”))应该it@clcto是的,我自己也注意到了:)谢谢!我想我把这件事复杂化了!此循环将执行0次。即使您将
testBoolean
的初始值更改为
false
,这仍然不是问题的答案,因为现在您已经创建了一个至少执行一次的循环,而OP的循环没有该属性。您仍然没有解决我指出的第二个问题。请记住,原始问题中的循环可能有一些语句。@ajb如果不执行循环,他可以在循环之前将testBoolean更改为true,或者他可以使用do while循环,这是没有问题的。他从来没有说过循环至少不会执行一次,嗯?循环一开始,他就给出了一个可能为真或假的条件。这意味着循环体可能永远不会执行。这意味着任何导致循环体在所有情况下至少执行一次的解决方案都是不正确的,而不事先测试条件。在循环开始之前进行测试以设置
testBoolean
,但会涉及重复的代码。@ajb-Huh???如果条件在第一次迭代时始终为真,我不知道他和你都在用他的代码做什么。这个答案有一个拼写错误,但更大的问题是,它涉及到复制循环体。@ajb-这可以通过创建一个方法并从while循环调用该方法来避免。为什么要使用嵌套的if's here,它的可读性不如if else,并根据正确的内容设置布尔值。@brso05是的,可以使用
布尔值
,如果你在后面加上
if(布尔)break。哪一个更具可读性在旁观者的眼中。不需要在while条件下使用break-use-boolean。如果在循环中每次都必须执行确定
布尔值的代码,并且需要在循环开始时执行,如果没有一些代码重复,很难将
布尔值
放入
while
条件。在这种情况下,使用
中断
是最简单的。