Pregunta

Tengo un do, mientras que se parece a:

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 funciona, va a ir a la parte superior de la instrucción do, y el usuario es nulo por lo que las cosas van a romper?

Tal vez debería volver a trabajar el lazo a una sentencia while?

¿Fue útil?

Solución

El continúan hace saltar a la evaluación en el boton para que el programa pueda evaluar si tiene que continuar con otra iteración o salida. En este caso se cerrará.

Esta es la especificación: http: // java .sun.com / docs / libros / JLS / third_edition / html / statements.html # 6045

Estas preguntas en lenguaje puede buscarla en la especificación del lenguaje Java: http: // java. sun.com/docs/books/jls/

Otros consejos

Esto realmente no sería la mejor manera de escribir el código. Si el usuario es nulo, obtendrá una NullPointerException cuando intenta y obtener user.id la próxima vez. Una mejor manera de hacer esto sería:

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

¿Por qué las pruebas de usuario en dos lugares? La condición, mientras que finalizará el bucle cuando el usuario es nulo, que es lo que desea.

Sí, continue trabajará en un bucle do..while.

Es posible que desee utilizar en lugar de break continue a detener el procesamiento de los usuarios, o simplemente eliminar el bit if null continue por completo desde el bucle while se romperá tan pronto como el usuario es nulo de todos modos.

Respuesta corta sí, continuar (y romper) funciona correctamente en bucle do.

Como otros han señalado, sin embargo, a partir del ejemplo que parece que puede estar esperando el mal comportamiento de continuar.

Vamos a ver:

$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 

Sí lo hace. En esta muestra se puede ver el valor y es 100 porque la declaración continue fue ejecutado y evitó que la variable que se incremente después.

El continúan saltará a la declaración de evaluación dentro del bucle, mientras que parece redundante, ya que su caso y mientras están evaluando la misma cosa. Creo que sería mejor usar un descanso o simplemente dejar que la condición, mientras que hacer el trabajo (su condición, mientras que ya se está comprobando en su caso)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top