我有:
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
吗?
答案 0 :(得分:1)
while((in-Math.pow(base,pot<0&&!gto)||(in-Math.pow(base, pot)>=0&>o))){
//do sth
}
这就是你想要的吗?
答案 1 :(得分:0)
为了清洁和可维护性,使用一种方法,假设您有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的回答)如果这是写一些并忘记它的代码。
答案 2 :(得分:0)
如果gto
的值在循环中没有变化且循环体不复杂,那么你可以为个别情况编写两个独立的循环:
if ( gto ) {
while ( in - Math.pow(base, pot) >= 0 ) {
// Do stuff
}
} else {
while ( in - Math.pow(base, pot) < 0 ) {
// Do stuff
}
}
如果可能的话,你也可以将循环体移动到一个单独的方法中并从两个循环中调用它。