2017-01-15 2 views
1

j'ai:conditions conditionnelles en Java

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

Ce travail pas de la manière souhaitée, car pot est modifiée dans la boucle while. De coure je pourrais écrire une méthode booléenne-évaluée, mais je me demande, s'il y a un moyen de forcer Java à évaluer cond juste en atteignant Pos1?

+0

écrire la méthode mentionnée. – luk2302

+0

Est-ce que la valeur de 'gto' change aussi dans la boucle? –

+0

S'il vous plaît nous montrer votre code entier, sinon nous pourrions manquer quelque chose ... – Overblade

Répondre

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

c'est ce que tu veux?

+0

oui! très intelligent! – Sascha

+1

C'est un moyen paresseux btw. Je ne recommande pas cela pour les grands projets – kleopi

+0

devrait ou pourrait ma question marquée comme "answerd"? – Sascha

0

Pour la propreté et la maintenabilité, utilisez une méthode, en supposant que vous avez Java 8 est disponible, vous pouvez également utiliser un prédicat lambda comme indiqué ci-dessous:

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

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

ou en ligne la condition (voir réponse par @kleopi) si C'est un peu écrire et oublier le code.

0

Si la valeur de gto ne change pas dans la boucle et alors corps de la boucle est pas complexe, vous pouvez simplement écrire deux boucles distinctes pour les cas individuels:

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

Si possible, vous pourriez aussi déplacez le corps de la boucle dans une méthode séparée et appelez-le à partir des deux boucles.