Question

J'ai tout do qui ressemble à:

User user = userDao.Get(1);

do
{
 // processing


 // get the next user
 //
 user = UserDao.GetNext(user.Id);

 if(user == null)
       continue;   // will this work?????????????
}
while ( user != null)

Si elle fonctionne, sa va aller en haut de l'instruction do, et l'utilisateur est nul si les choses vont briser?

Peut-être que je devrais retravailler la boucle à une instruction while?

Était-ce utile?

La solution

continue fait sauter à l'évaluation au botton que le programme puisse évaluer si elle doit continuer avec une autre itération ou de sortie. Dans ce cas, il sortira.

Ceci est la spécification: http: // java .sun.com / docs / livres / JLS / third_edition / html / statements.html # 6045

Ces questions linguistiques vous pouvez le rechercher dans la spécification du langage Java: http: // java. sun.com/docs/books/jls/

Autres conseils

Ce ne serait pas vraiment la meilleure façon d'écrire ce code. Si l'utilisateur est null, vous obtiendrez un NullPointerException lorsque vous essayez et obtenez user.id la prochaine fois. Une meilleure façon de le faire serait:

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}

Pourquoi l'utilisateur test, vous en deux endroits? La condition while mettra fin à la boucle lorsque l'utilisateur est nulle, ce qui est ce que vous voulez.

Oui, continue travaillera dans une boucle do..while.

Vous voulez probablement utiliser break au lieu de continue pour arrêter le traitement des utilisateurs, ou tout simplement supprimer le bit if null continue complètement depuis la boucle while se cassera dès que l'utilisateur est nul de toute façon.

Réponse courte Oui, continuer (et la pause) fonctionne correctement en do while.

Comme d'autres l'ont souligné que, de l'exemple, il semblerait que vous être le mauvais comportement attendez de continuer.

Voyons voir:

$cat DoWhileContinue.java 
class DoWhileContinue {

    public static void main( String [] args ) {
        int i = 0;
        int y = 0;
        do {
            i++;
            if( i > 100 ) {
                continue;
            }
            y++;

        } while( i < 500  );
        System.out.printf("i=%d, y=%d %n", i, y );
    }
}
$javac DoWhileContinue.java 
$java DoWhileContinue
i=500, y=100 

Oui, il le fait. Dans cet exemple, vous pouvez voir la valeur y est 100 car l'instruction continue a été exécuté et a empêché la variable d'être augmenté par la suite.

continuer sautera à la déclaration d'évaluation en boucle à l'intérieur du tout ce qui semble redondant comme si et en évaluent actuellement la même chose. Je pense qu'il serait préférable d'utiliser une pause ou simplement laisser la condition while faire le travail (votre condition while vérifie déjà pour vous)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top