1. Hurok az életünkben

Életünk nagyon gyakran megkívánja, hogy ugyanazokat a cselekedeteket sokszor végezzük el. Tegyük fel például, hogy be kell szkennelnem egy sok oldalból álló dokumentumot. Ismételjük meg újra és újra ugyanazt az eljárást:

  • Helyezze az első oldalt a szkennerre
  • Nyomja meg a beolvasás gombot
  • Helyezze a következő oldalt a szkennerre

Ezt nehéz manuálisan megtenni. Jó lenne, ha ez a folyamat valahogy automatizálható lenne.

Vagy vegyünk egy másik példát: tegyük fel, hogy a beérkező levelemben lévő összes olvasatlan e-mailt spamként szeretném megjelölni. Réges-régen minden egyes e-mailt egyenként ki kellett választanom, és spamként kellett megjelölnöm.

De a programozók lusták, ezért már régen automatizálták ezt a folyamatot: most egyszerűen kiválasztja a betűk listáját, és rákattint a "megjelölés spamként" gombra, majd az e-mail kliens végigfut a listán, és minden e-mailt a spam mappába helyez.

Mit mondhatunk itt? Rendkívül kényelmes, ha egy számítógép vagy program több száz vagy több ezer monoton műveletet tud végrehajtani egyetlen kattintással. És most megtanulod, hogyan kell ezt csinálni.


2. whilehurok

Az if-else utasítás jelentősen kibővítette programozási lehetőségeinket, lehetővé téve olyan programok írását, amelyek különböző helyzetekben különböző műveleteket hajtanak végre. De van még egy dolog, ami egy nagyságrenddel erősebbé teszi programjainkat – a hurkok .

A Java 4 féle hurokkal rendelkezik: while, for, for-eachés do-while. Most ezek közül a legelsőbe fogunk beleásni.

A whilehurok nagyon egyszerű. Csak két részből áll: egy feltételből és egy huroktörzsből . A ciklustörzs újra és újra végrehajtásra kerül mindaddig, amíg a feltétel teljesül true. Általában a whilehurok így néz ki:

while (condition)
   statement;
Jelölés egy ciklushoz whileegyetlen utasítással
while (condition)
{
   block of statements
}
Jelölés egy whileutasításblokkot tartalmazó ciklushoz

Ez nagyon egyszerű. Az utasítás vagy utasításblokk újra és újra végrehajtásra kerül, amíg a ciklusfeltétel egyenlő true.

Ez így működik: először az állapotot ellenőrizzük. Ha igaz, akkor a ciklustörzs végrehajtásra kerül (az utasítás vagy utasításblokk ). Ezután a feltétel újra ellenőrzésre kerül, és a ciklustörzs ismét végrehajtásra kerül. És így tovább, amíg a feltétel hamis lesz.

Ha a feltétel mindig igaz , akkor a program soha nem fog leállni. Végleg beragad a hurokba.

Ha a feltétel hamis az első ellenőrzéskor , akkor a ciklus törzse még egyszer sem kerül végrehajtásra.


3. Példák hurkokra

Íme néhány gyakorlati példa a hurkok működésében.

Kód Magyarázat
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
5 sor jelenik meg a képernyőn:
5
4
3
2
1
Kód Magyarázat
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
10 sor jelenik meg a képernyőn:
0
1
...
8
9
Kód Magyarázat
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
A program beolvassa a számokat a billentyűzetről, amíg számokat ír be.
Kód Magyarázat
while (true)
   System.out.println("C");
A program vég nélkül kinyomtatja a levelet Ca képernyőn.
Kód Magyarázat
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
A program beolvassa a sorokat a billentyűzetről

amíg exitbe nem lép.

Az előző példában a equals()metódus a karakterláncok összehasonlítására szolgál. Ha a karakterláncok egyenlőek, a függvény a következőt adja vissza true. Ha a karakterláncok nem egyenlőek, akkor visszatér a false.



4. Hurok a hurkon belül

Ahogy megismerte a feltételes utasításokat, észrevette, hogy több feltételes utasítás kombinálásával összetett logikát is megvalósíthat. ifMás szóval, egy utasításon belüli utasítás használatával if.

Ugyanezt megteheti hurkokkal is. Ha egy hurkon belüli ciklust szeretne írni, akkor a második ciklust az első ciklus törzsébe kell írnia. Valahogy így fog kinézni:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
whileciklus ( utasítások blokkjávalwhile ) egy másik cikluson belül

Nézzünk három feladatot.

1. feladat . Tegyük fel, hogy olyan programot akarunk írni, ami Mom4-szer megjeleníti a szót a képernyőn. A hurok pontosan az, amire szükségünk van. És a kódunk valahogy így fog kinézni:

Kód Magyarázat
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
4 sor jelenik meg a képernyőn:
Mom
Mom
Mom
Mom

2. feladat . Olyan programot szeretnénk írni, amely Aegyetlen sorban 5 betűt jelenít meg. Ehhez ismét szükségünk van egy hurokra. Így fog kinézni a kód:

Kód Magyarázat
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
A helyett a -t println()fogjuk használni print(). Ellenkező esetben minden betű A külön sorba kerülne.

A képernyő kimenete a következő lesz:
AAAAA

3. feladat . Egy s betűből álló téglalapot szeretnénk megjeleníteni A. A téglalapnak 4 sorból 5 oszlopból kell állnia. Ennek megvalósításához szükségünk van egy beágyazott hurokra. Egyszerűen vesszük az első példánkat (azt, ahol 4 sort adunk ki), és lecseréljük az egyik sor kimeneti kódját a második példa kódjára.

Kód Magyarázat
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
A külső hurok lila. A változó segítségével nmegszámolja a ciklus iterációinak számát.

A belső hurok zöld. A változót használja ma ciklusiterációk számának megszámlálására. A belső ciklus befejezése után a kurzort kifejezetten a következő sorra

kell mozgatnunk. Ellenkező esetben a program által kinyomtatott összes betű egy sorba kerül. A képernyő kimenete a következő lesz:


AAAAA
AAAAA
AAAAA
AAAAA

A külső és a belső ciklusnak különböző változókat kell használnia a ciklusiterációk számának megszámlálásához. A parancsot a belső ciklus után is hozzá kellett adnunk System.out.println(), mivel ez a ciklus az As betűt jeleníti meg ugyanabban a sorban. Ha a sorban lévő betűk megjelennek, valakinek új sorra kell mozgatnia a kurzort.



5. Java és Pascal hurkok összehasonlítása

Sokan tanultátok Pascalt a középiskolában. Hogy könnyebben megértse az itteni anyagot, vessen egy pillantást a whilePascal és Java nyelven írt ciklusok összehasonlítására. Ha nem ismered a Pascalt, akkor hagyd ki ezt a részt.

Pascal Jáva
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;
}