web-dev-qa-db-fra.com

Assigner une variable dans Java while-loop conditionnel?

J'ai une méthode qui fait beaucoup de vérification et de calcul et renvoie une classe personnalisée, returnMessage. returnMessage a 2 booléens et une chaîne. Ce que je veux faire, c'est exécuter cette méthode dans une boucle while de ma classe principale et avoir accès à l'objet returnMessage après la fin de la boucle while pour la dernière fois.

En php, ce serait un cas de

while ( $returned = myObject->myMethod()->finished )
{

}

if( $returned -> finished == FALSE)
{
...
}

Cependant, essayer d'affecter comme ceci me donne une erreur attendue booléenne dans Java (il peut y avoir des erreurs php dans ce qui précède, il est tard: D)

17
LiamRyan

Nous devons voir plus de votre code, mais en devinant un peu, je pense que quelque chose comme ça fonctionnerait:

ReturnMessage returned;
while (!(returned = myObject.myMethod()).finished) {

}
if (!returned.finished) {

}
38
Óscar López

Une boucle while vérifie un conditionnel. Voici un autre exemple qui peut être utile:

public class test {
    public static void main(String[] args) {
        String line;
        while((line = readFromFile())!=null){
//do something with var 'line'
            System.out.println(line);
            break;
        }
    }

    static String readFromFile(){
       return "test string";
    }
}
5
SparkZeus

Bien que acceptable en PHP, je suppose (je ne code pas en PHP), il est considéré comme une très mauvaise forme de faire une affectation dans un conditionnel en Java. (C'est parce qu'il est sujet aux erreurs et très difficile à repérer, la différence étant entre = et == au milieu de beaucoup de code. C'était un choix délibéré basé sur des années d'expérience avec C et C++.)

En l'état, je ne peux pas vraiment suivre votre code. Vous dites "returnMessage a 2 booléens et une chaîne" mais le test, si je comprends bien en PHP, est myObject->myMethod()->finished != null et returned obtient la valeur de finished, mais ensuite vous allez tester $returned -> finished qui est le même que myObject->myMethod()->finished->finished. Désolé si j'ai mal compris PHP.

La recommandation générale dans Java serait plus dans le sens de:

ReturnMessage returned = myObject.myMethod().getFinished();
while (returned != null) { 

    ...

    returned = myObject.myMethod().getFinished(); // or did you mean myObject.myMethod();   
}

if (!returned.finished) { // or, better: if (!returned.isFinished())
    ...
}

Si j'ai mal compris le PHP, faites-le moi savoir et je corrigerai le code Java correspondant).

3
Old Pro

c'est possible comme ça

while( (returned=myObject.myMethod()).isFinished()){

}

ou pour être plus précis (returned=myObject.myMethod()) affecte l'objet retourné à returned et vous pouvez l'utiliser comme un var normal

1
ratchet freak