1. Cykle w naszym życiu

Bardzo często w naszym życiu musimy wielokrotnie wykonywać ten sam rodzaj czynności. Na przykład potrzebuję zeskanować wielostronicowy dokument. Następnie wykonujemy tę samą procedurę w kółko:

  • Umieść pierwszą stronę w skanerze
  • Naciśnij przycisk Skanuj
  • Umieść następną stronę

Trudno to zrobić ręcznie. Byłoby miło, gdyby ten proces można było jakoś zautomatyzować.

Lub inny przykład: chcę oznaczyć wszystkie nieprzeczytane e-maile w mojej skrzynce pocztowej jako spam. Kiedyś trzeba było je wybierać pojedynczo i oznaczać jako spam.

Ale programiści to leniwi ludzie, więc ta funkcja została zautomatyzowana przez długi czas: wystarczy wybrać dowolną listę liter i nacisnąć przycisk „oznacz jako spam”, a twój klient poczty przejrzy tę listę i przeniesie każdą literę do spamu teczka.

Co mogę powiedzieć? Jest to wygodne, gdy komputer lub program może wykonać setki i tysiące rutynowych operacji jednym kliknięciem. Teraz i ty się tego dowiesz.


2. Pętlawhile

Instrukcja if-else znacznie rozszerzyła nasze możliwości programistyczne: teraz możemy pisać programy, które wykonują różne działania w różnych sytuacjach. Ale jest jeszcze jedna rzecz, która sprawi, że nasze programy będą o rząd wielkości potężniejsze — są to pętle .

W Javie są 4 rodzaje pętli: while, for, for-eachi do-while. Teraz przeanalizujemy pierwszy z nich.

Instrukcja pętli whilejest bardzo prosta i składa się tylko z dwóch części: warunku i treści pętli . Ciało pętli jest wykonywane w kółko, dopóki warunek jest równy true. Ogólna postać pętli whileto:

while (condition)
   statement;
Nagrywanie w pętli whilez jedną instrukcją
while (condition)
{
   block of statements
}
Nagrywanie pętli whilez blokiem instrukcji

Wszystko jest bardzo proste. Polecenie lub blok poleceń jest wykonywane w kółko, aż warunek pętli będzie prawdziwy - równy true.

Działa to tak: najpierw sprawdzany jest warunek , a jeśli jest prawdziwy, wykonywana jest treść pętli ( polecenie lub blok komend ), następnie ponownie sprawdzany jest warunek i ponownie wykonywana jest treść pętli . I tak dalej, aż warunek stanie się fałszywy.

Jeśli warunek jest zawsze prawdziwy , program nigdy nie przestanie działać i zawsze będzie się zapętlać.

Jeśli warunek był fałszywy za pierwszym razem , ciało pętli nigdy nie zostanie wykonane.


3. Przykłady pętli

Oto kilka praktycznych przykładów wykorzystania pętli.

Kod Wyjaśnienie
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
Na ekranie pojawi się 5 linii:
5
4
3
2
1
Kod Wyjaśnienie
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
Na ekranie pojawi się 10 linii:
0
1
...
8
9
Kod Wyjaśnienie
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
Program odczytuje liczby z klawiatury tak długo, jak cyfry są wprowadzane.
Kod Wyjaśnienie
while (true)
   System.out.println("C");
Program będzie w nieskończoność drukował literę na ekranie C.
Kod Wyjaśnienie
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Program wprowadzi linie z klawiatury,

do momentu wprowadzenia ciągu znaków exit.

Funkcja equals()z poprzedniego przykładu służy do porównywania łańcuchów. Jeśli ciągi są równe, funkcja zwróci wynik — true, jeśli ciągi nie są równe, zwróci false.



4. Pętla w pętli

Podczas wprowadzenia do operatora warunkowego przekonałeś się, że można go używać do implementacji złożonej logiki poprzez łączenie wielu operatorów warunkowych. Innymi słowy, użyj ifwewnątrz if-a.

To samo możesz zrobić z cyklami. Aby napisać pętlę w pętli, musisz napisać drugą pętlę w treści pierwszej pętli. Będzie wyglądać mniej więcej tak:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
Pętla while(z blokiem poleceń ) wewnątrz innej pętliwhile

Przyjrzyjmy się trzem kwestiom.

Zadanie 1 . Załóżmy, że chcemy napisać program, który wyświetli to słowo 4 razy na ekranie Mom. Pętla jest dokładnie tym, czego potrzebujemy. A nasz kod wyglądałby mniej więcej tak:

Kod Wyjaśnienie
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
Na ekranie zostaną wyświetlone 4 linie:
Mom
Mom
Mom
Mom

Zadanie 2. Chcemy napisać program, który wyświetli 5 liter w jednym wierszu A. Aby to zrobić, ponownie potrzebujemy cyklu. Oto jak wyglądałby ten kod

Kod Wyjaśnienie
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
Zamiast tego println()piszemy print(), w przeciwnym razie każda litera A będzie w osobnym wierszu.

Na ekranie pojawi się:
AAAAA

Zadanie 3. Chcemy wyświetlić prostokąt liter Ao wielkości 4 wierszy i 5 kolumn. Ale do tego potrzebujemy już zagnieżdżonych pętli. Weźmy tylko pierwszy przykład, w którym wyprowadzamy 4 wiersze i zamieńmy kod do wyprowadzania jednego wiersza kodem z drugiego przykładu.

Kod Wyjaśnienie
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Zewnętrzna pętla jest pokazana na fioletowo i wykorzystuje zmienną n do zliczania liczby iteracji pętli.

Pętla wewnętrzna jest zaznaczona na zielono. Wykorzystuje zmienną do zliczania liczby iteracji pętli m.

Konieczne jest jawne przesunięcie kursora do następnej linii po zakończeniu pętli wewnętrznej. W przeciwnym razie wszystkie litery, które program wydrukuje, będą w tej samej linii.

Na ekranie pojawi się:
AAAAA
AAAAA
AAAAA
AAAAA

Pętle zewnętrzne i wewnętrzne muszą wykorzystywać różne zmienne do zliczania liczby wykonanych już iteracji. Musiałem też dodać komendę System.out.println()po wewnętrznej pętli, bo wypisuje litery Aw jednej linii, a po wypisaniu wszystkich liter ktoś musi przesunąć kursor do nowej linii.



5. Porównanie pętli: Java vs Pascal

Wielu z Was uczyło się Pascala w szkole, więc aby ułatwić Wam zrozumienie materiału, porównamy pętle whilew Pascalu i Javie. Jeśli nie znasz Pascala, po prostu pomiń ten materiał.

Pascala Jawa
i := 3;
While i >= 0 Do
   Begin
      WriteLn(i);
      i := i - 1;
   End;
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
i := 0;
While i < 3 Do
   Begin
      WriteLn(i);
      i := i + 1;
   End;
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
IsExit := False;
While Not isExit Do
   Begin
      ReadLn(s);
      isExit :=  (s = 'exit');
   End;
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
While True Do
   WriteLn('C');
while (true)
   System.out.println("C");
While True Do
   Begin
     ReadLn(s);
     If s = 'exit' Then
       Break;
   End;
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}