2010-01-06 17 views
19

que tienen un do, mientras que se parece a:¿continúa trabajando en un tiempo?

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 ciclo en una instrucción while?

+30

¿Por qué no lo pruebas? Eso seguramente será más rápido que escribir una pregunta ... – meriton

+2

Parece bastante extraño. Deberías simplificar el código. ¿Que estás tratando de hacer? obtener el primer usuario no nulo? ¿O procesando todos los usuarios no nulos? ¿Cuándo sabes que no hay más usuarios? (el do/while sugiere que null indica el final de los usuarios ... pero el si ... continue sugiriendo que hay usuarios nulos en el medio ...: S) – helios

+0

meriton: Yo solía pensar lo mismo, pero a veces estas personas no No tengo compiladores en su máquina en este momento (puede o no ser el caso aquí, sin embargo ...) –

Respuesta

0

El continuar saltará a la declaración de evaluación de bucle dentro del while que parece redundante ya que su if y while están evaluando lo mismo. Creo que sería mejor usar un descanso o simplemente dejar que la condición mientras hace el trabajo (su condición de tiempo ya lo está verificando)

+2

el 'continue' dice que se evalúa la condición' while' sin pasar por el resto del cuerpo del ciclo. Ciertamente no repite claramente el ciclo (-1) – xtofl

+0

Sí, tiene razón. Cometí una confusión con while {} donde en este caso irá al principio del ciclo y lo evaluará nuevamente. – Andres

2

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

es probable que desee utilizar en lugar de breakcontinue 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.

0

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

Como han señalado otros, desde el ejemplo parece que puede estar esperando que continúe el comportamiento incorrecto.

3

¿Por qué está probando el usuario en dos lugares? La condición while terminará el ciclo cuando el usuario es nulo, que es lo que desea.

4

Esto realmente no sería la mejor manera de escribir el código. Si el usuario es nulo, obtendrá una NullPointerException cuando intente 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); 
} 
0

Veamos:

$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, puede ver y, el valor es 100 porque se ejecutó la instrucción continue y evitó que la variable se aumentara después.

Cuestiones relacionadas