1. Zespółbreak

Weźmy przykład z poprzedniej lekcji:

Kod Wyjaśnienie
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Program będzie odczytywał wiersze z klawiatury do momentu wpisania ciągu znaków "exit".

Program czyta wiersze z konsoli do momentu wpisania słowa exit. Jeśli wpiszesz to słowo, zmienna isExit zmieni się na true, a warunek pętli na , a pętla się zakończy.!isExitfalse

Java ma specjalny operator break, który ułatwia pisanie takiej logiki. Jeśli wykonasz polecenie breakwewnątrz pętli, zakończy się ono natychmiast: program rozpocznie wykonywanie poleceń, które następują po pętli. Polecenie jest bardzo zwięzłe:

break;

Oto jak możesz przepisać przykład, który właśnie przeanalizowałeś, używając break:

Kod Wyjaśnienie
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
Program będzie odczytywał wiersze z klawiatury do momentu wpisania ciągu znaków "exit".


2. Kontynuuj polecenie

Ale breaknie jest to jedyna instrukcja, która pozwala kontrolować zachowanie pętli. W Javie innym operatorem jest continue. Jeśli wykonasz polecenie continuewewnątrz pętli, bieżąca iteracja pętli zakończy się przedwcześnie.

Jednokrotne wykonanie ciała pętli nazywane jest iteracją pętli. Polecenie continueprzerywa bieżącą iterację pętli, ale nie samą pętlę, w przeciwieństwie do polecenia break. Polecenie jest również zwięzłe:

continue;

Ta instrukcja continuejest bardzo wygodna w użyciu w pętli, jeśli chcemy „pominąć” wykonanie ciała pętli w niektórych sytuacjach.

Problem: Chcemy napisać program, który wyświetla liczby od 1do 20, pomijając liczby podzielne przez 7. Oto jak może wyglądać ten kod:

Kod Wyjaśnienie
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
Program wyświetla liczby od 1do 20. Jeśli liczba jest podzielna przez 7(reszta z dzielenia przez 7to 0), wyświetlanie jest pomijane.

W rzeczywistości taki kod nie zadziała, ponieważ izamrozi się na zawsze na numerze 7. W końcu wywołanie continuedoprowadziło do tego, że pominięto dwie komendy - System.out.println(i)i i++. Dlatego po osiągnięciu wartości 7zmienna iprzestanie się zmieniać, a pętla będzie działać w nieskończoność.

Napisaliśmy ten kod celowo, ponieważ to bardzo częsty błąd. Jak to naprawić?

Istnieją dwie opcje:

Opcja 1: zmiana iprzed połączeniem continue, ale po połączeniui % 7

Opcja 2: zwiększaj izawsze na początku cyklu. Ale wtedy wartość początkowa ipowinna wynosić 0.

opcja 1 Opcja 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}