2011-09-19 11 views
6

Estoy escribiendo un programa para implementar un algoritmo que encontré en la literatura. En este algoritmo, necesito un ciclo while;Cómo forzar al programa a ejecutar siempre la primera iteración de un ciclo while?

while(solution has changed){ 
    updateSolution(); 
} 

Para comprobar si se cumple la condición while, he creado un objeto (del mismo tipo que la solución) llamado copy. Esta copia es una copia de la solución antes de que se actualice la solución. Entonces, si ha habido un cambio en la solución, se cumple la condición en el ciclo while.

Sin embargo, tengo algunos problemas para encontrar la mejor solución para las condiciones de ambos objetos cuando se ejecuta el ciclo while, ya que comienzo con una solución vacía (resultset) y la copia también está vacía en ese momento (ambas llamadas con el constructor de la clase). Esto significa que cuando se ejecuta el ciclo while, ambos objetos son iguales y, por lo tanto, no se ejecutan todas las instrucciones en el ciclo while.

Mi solución por el momento es crear una variable ficticia que se establece en verdadero antes del ciclo while y se establece en falso en él. Dudo que esta sea la mejor solución, así que me pregunto si existe una solución estándar para este problema (¿alguna manera de forzar al programa a ejecutar siempre la primera iteración del ciclo while)?

Código como lo es ahora:

SolutionSet solution = new SolutionSet(); 
SolutionSet copy = new SolutionSet(); 
boolean dummy = true; 

while((!solution.equals(copy)) || dummy){ 
    dummy = false; 
    copy = solution.copy(); 
    solution.update() // here some tests are done and one object may be added to solution 
} 

Respuesta

12

Uso do {} while (condition);.

+0

Oh, el buen viejo 'do'-'while'. Muy raramente usado, tan pocos lo saben ... –

+0

¡Gracias! Exactamente lo que necesitaba de hecho. Y como mencionó Joachim, ni siquiera sabía que esta construcción existía en Java. – Maza89

+0

@ Maza89 - cualquier buen libro de texto lo describirá. –

1

se puede hacer eso con una declaración do-while:

SolutionSet solution = new SolutionSet(); 
SolutionSet copy = new SolutionSet(); 

do { 
    copy = solution.copy(); 
    solution.update() // here some tests are done and one object may be added to solution 
} while (!solution.equals(copy)); 
1

While prueba la condición y, si es verdadera, se ejecuta el código especificado.

Hay una construcción que es un poco diferente: Do... While. Ejecuta algún código y, al final del bloque, verifica si se cumple alguna condición. Por ejemplo

do { 
    this; 
    that; 
    that another; 
} while (this == true); 
Cuestiones relacionadas