2017-01-15 16 views
1

у меня есть:условные условия в 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 изменяется в то время как петли. Из coure я мог бы написать булевозначный метод, но мне интересно, если есть способ заставить Java оценить cond только при достижении Pos1?

+0

напишите, упомянутый способ. – luk2302

+0

Изменяется ли значение 'gto' в цикле? –

+0

Пожалуйста, покажите нам весь ваш код, иначе мы могли бы пропустить что-то ... – Overblade

ответ

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

это то, что вы хотите?

+0

да! очень умно! – Sascha

+1

Это ленивый способ кстати. Я не рекомендую это для больших проектов. – kleopi

+0

должен или может быть мой вопрос помечен как «answerd»? – Sascha

0

Для чистоты и ремонтопригодности, используйте метод, если у вас есть Java 8 доступных, вы можете также использовать лямбда-предикат, как показано ниже:

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

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

или инлайн состояние (см ответ на @kleopi), если это некоторые пишут и забывают об этом коде.

0

Если значение gto не изменяется в цикле и тело цикла не является сложным, то вы могли бы просто написать две отдельные петли для отдельных случаев:

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

Если возможно, вы могли бы также переместите тело цикла в отдельный метод и вызовите его из обоих циклов.