2011-09-19 7 views
6

Piszę program do implementacji algorytmu znalezionego w literaturze. W tym algorytmie potrzebuję pętli while;Jak zmusić program do uruchomienia pierwszej iteracji pętli while?

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

Aby sprawdzić, czy warunek while jest spełniony, utworzyłem obiekt (tego samego typu co rozwiązanie) zwany copy. Ta kopia jest kopią rozwiązania, zanim rozwiązanie zostanie zaktualizowane. Więc jeśli nastąpiła zmiana w rozwiązaniu, warunek w pętli while jest spełniony.

Mam jednak pewne problemy ze znalezieniem najlepszego rozwiązania dla warunków obu obiektów podczas wykonywania pętli while, ponieważ zaczynam od pustego rozwiązania (zestaw wyników), a kopia jest również pusta w tym czasie (oba wywoływane z konstruktorem klasy). Oznacza to, że gdy wykonywana jest pętla while, oba obiekty są równe, a zatem wszystkie instrukcje w pętli while nie są wykonywane.

Moje rozwiązanie na razie polega na utworzeniu fałszywej zmiennej, która jest ustawiona na wartość true przed pętlą while i jest ustawiona na wartość false. Wątpię, czy to jest najlepsze rozwiązanie, więc zastanawiam się, czy istnieje standardowe rozwiązanie tego problemu (jakiś sposób zmuszenia programu do uruchomienia pierwszej iteracji pętli while)?

Kod jak jest teraz:

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 
} 

Odpowiedz

12

Zastosowanie do {} while (condition);.

+0

Och, stare dobre 'do' -'while'. Tak rzadko używane, tak niewielu o tym wie ... –

+0

Dzięki! Dokładnie to, czego naprawdę potrzebowałem. I jak wspomniał Joachim, nie wiedziałem nawet, że ta konstrukcja istnieje w Javie. – Maza89

+0

@ Maza89 - każdy dobry podręcznik opisze to. –

1

Można to zrobić za pomocą do-while stwierdzeniem:

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 testuje kondycję i, jeśli to prawda, uruchamia określony kod.

Jedna konstrukcja jest nieco inna: Do... While. Wykonuje on pewien kod i na końcu bloku sprawdza, czy spełniony jest jakiś warunek. Na przykład:

do { 
    this; 
    that; 
    that another; 
} while (this == true); 
Powiązane problemy