Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/03/2009, 17:37
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: while; con punto y coma (no doWhile)

La sintaxis es:
Código Java:
Ver original
  1. while (condicion) sentencia
o
Código Java:
Ver original
  1. while (condicion) bloque

En el primer caso sentencia es una única sentencia. Y lo que ocurre es que:
Código Java:
Ver original
  1. ;
es una sentencia válida. Es una sentencia vacía, que no hace nada. Es decir, en Java yo puedo hacer:

Código Java:
Ver original
  1. tal();
  2. ;
  3. cual();

Entonces, en un bucle (también ocurre con bucles for, o con if), si hago:

Código Java:
Ver original
  1. while (condicion) sentencia;
  2. otrasentencia;

Sólo la primera sentencia se ejecuta en el bucle, no? Pero "sentencia;" puede ser, como he dicho una sentencia vacía ";". De modo que esto:

Código Java:
Ver original
  1. while (condicion) ;
  2. otrasentencia;
es perfectamente válido pero se comporta como has visto. Es completamente normal.


Otro asunto es que sea o no habitual o que deba o no usarse. En general el código así tiende a crear confusiones como la tuya, pero en ocasiones se puede encontrar código así como una forma de, por ejemplo, avanzar en una búsqueda hasta determinado punto pero sin hacer nada más. Es decir, imagina que tengo una lista de nodos y quiero ir avanzando hasta el primer nodo que esté marcado como válido. Pero no quiero hacer nada en los nodos que haya antes hasta que encuentre ese. En muchos casos verás a gente (sobretodo si ya llevan años) escribiendo cosas así:

Código Java:
Ver original
  1. while ( !list.next().isvalid() );