1. Wprowadzenie do pętli do-while
Wyobraź sobie: piszesz program, który zgaduje liczbę wybraną przez użytkownika. Trzeba co najmniej raz poprosić o liczbę i powtarzać prośbę, dopóki jej nie odgadniesz. Jeśli sprawdzisz warunek na początku, zwykła while może w ogóle nie wejść do pętli.
Tu pomaga do-while. W odróżnieniu od while, zawsze wykona ciało pętli co najmniej raz — nawet jeśli warunek od razu jest fałszywy. To jak dostać gumę do żucia przy kasie, niezależnie od zakupu.
Składnia do-while
To proste: kolejna para słów kluczowych w Javie.
do
{
// Ciało pętli: ten kod wykona się co najmniej raz
}
while (condition);
do-while
Zwróć uwagę na średnik ; na końcu po nawiasie warunku! W zwykłej while go nie ma, a tutaj jest — klasyczna pułapka dla początkujących.
Opis kroków pętli do-while
- Wejście do ciała pętli (zawsze co najmniej raz).
- Sprawdzenie warunku.
- Jeśli warunek jest prawdziwy — powtórz ciało.
- Jeśli warunek jest fałszywy — wyjdź z pętli.
2. Różnica względem zwykłej while
Przypomnijmy podstawowy scenariusz działania zwykłej pętli while:
while (condition)
{
// Ciało pętli
}
Ciało nie wykona się ani razu, jeśli warunek od początku jest fałszywy!
Teraz przykład z do-while:
do
{
// Ciało pętli
}
while (condition);
Ciało pętli wykona się co najmniej raz, nawet jeśli warunek od razu jest fałszywy!
Zilustrujmy różnicę kodem:
// Zwykła pętla while
int count = 0;
while (count > 0)
{
System.out.println("count = " + count);
count--;
}
// Nic nie zostanie wypisane
// do-while
int count2 = 0;
do
{
System.out.println("count2 = " + count2);
count2--;
}
while (count2 > 0);
// Wypisze "count2 = 0", chociaż warunek jest fałszywy!
Czasem wydaje się to „dziwne”, ale dokładnie takiego zachowania potrzebujemy przy wprowadzaniu danych przez użytkownika i ich walidacji.
3. Praktyczne scenariusze użycia do-while
Gdzie ta pętla występuje najczęściej?
Walidacja danych
Popularny scenariusz: prosimy użytkownika o wprowadzenie poprawnych danych (na przykład hasła nie krótszego niż 6 znaków) i powtarzamy prośbę, dopóki wszystko nie będzie poprawne.
String password;
do
{
System.out.print("Wprowadź nowe hasło (co najmniej 6 znaków): ");
password = console.nextLine();
}
while (password.length() < 6);
System.out.println("Hasło przyjęte!");
Ciało pętli wykona się co najmniej raz — nawet jeśli użytkownik od razu wprowadzi długie hasło.
Menu w aplikacjach konsolowych
Częsty wzorzec: pokazywać menu, czekać na polecenie i wychodzić tylko po specjalnym poleceniu.
String command;
do
{
System.out.println("Menu:");
System.out.println("1. Pokaż powitanie");
System.out.println("2. Wyjście");
System.out.print("Wybierz działanie: ");
command = console.nextLine();
if (command.equals("1"))
{
System.out.println("Witaj, świecie!");
}
else if (!command.equals("2"))
{
System.out.println("Nieznane polecenie.");
}
}
while (!command.equals("2"));
System.out.println("Do zobaczenia!");
4. Tabela: porównanie while i innych pętli
| Typ pętli | Sprawdzenie warunku | Ile razy może wykonać się ciało | Kiedy stosować |
|---|---|---|---|
|
Przed | 0 i więcej razy | Gdy z góry nie wiadomo, ile będzie powtórzeń |
|
Po | 1 i więcej razy | Gdy ważne jest wykonanie ciała co najmniej raz |
|
Przed | 0 i więcej razy | Gdy znana jest liczba iteracji |
GO TO FULL VERSION