Funciona de hecho, pero el comportamiento depende de las condiciones que esté probando. P.ej. este código:
int i = 2;
int j = 4;
do while(j > 0) {
i--; j--;
System.out.println("i:" + i + " j:" + j);
} while(i > 0);
salidas:
i:1 j:3
i:0 j:2
i:-1 j:1
i:-2 j:0
Así funciona así:
while(j>0) {
}
Considerando que, mediante el intercambio de los nombres de las variables:
do while(i > 0) {
//.. same as above
} while(j > 0);
La salida es:
i:1 j:3
i:0 j:2
Parece que comporta igual que en el primer caso (es decir, el primero mientras se considera), pero aquí, ¡la aplicación no está terminando!
Resumen:
En el momento en testA
es no está satisfechotestB
más y es también no está satisfecho, el código funciona como un rizo while(testA){}
.
Pero: Si, en el momento en testA
es ya no se cumple, testB
sigue siendo satisfecha, el bucle es no ejecutadas más y el guión es que no termina. Esto solo aplica si la condición del bucle "exterior" necesita ser cambiada dentro del bucle.
Actualización: Y después de leer otra respuesta, me doy cuenta de que esto es exactamente el comportamiento de la anidada do-while
- bucle while
.
De todos modos, lección aprendida: No use este tipo de sintaxis porque puede confundirlo;)
El comportamiento que debe esperar es que un compañero de trabajo lo golpee con un palo. – voyager
@voyager Afortunadamente no tengo compañeros de trabajo a los que deba prestarle atención; ¡gracias por el consejo! – Pindatjuh