Java 中的条件条件

conditional conditions in Java

我有:

boolean cond=false;
if(!gto)
  cond=(in-Math.pow(base, pot)<0);
else
  cond=(in-Math.pow(base, pot)>=0);
while(cond)//Pos1
...

这项工作没有以预期的方式进行,因为 pot 在 while 循环中发生了变化。 当然,我可以编写一个布尔值方法,但我想知道,是否有一种方法可以强制 Java 在到达 Pos1 时评估 cond

while((in-Math.pow(base,pot<0&&!gto)||(in-Math.pow(base, pot)>=0&&gto))){
//do sth
}

这是你想要的吗?

为了清洁和可维护性,使用一种方法,假设您有 Java 8 个可用,您也可以使用如下所示的 lambda 谓词:

Predicate<Boolean> checkCondition = (boolean gto) -> {
    double someCalculationResult = in - Math.pow(base, pot);
    if (!gto) {
        return someCalculationResult < 0;
    }
    return someCalculationResult >= 0;
}

while (checkCondition(gto)) {
    ... 
}

或者内联条件(参见@kleopi 的回答)如果这是一些写完就不用管的代码。

如果gto的值在循环中没有变化并且循环体不复杂,那么你可以为个别情况编写两个单独的循环:

if ( gto ) {
    while ( in - Math.pow(base, pot) >= 0 ) {
      // Do stuff
    }
} else {
    while ( in - Math.pow(base, pot) < 0 ) {
      // Do stuff
    }
}

如果可能,您还可以将循环体移动到一个单独的方法中,并从两个循环中调用它。