ne continue de travailler dans un do temps?
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?
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)