1. A hurkok összehasonlítása: forvswhile

A whileciklus bárhol használható, ha egy utasítást vagy utasításcsoportot többször kell végrehajtani. De az összes lehetséges forgatókönyv közül érdemes kiemelni egyet.

Arról a helyzetről beszélünk, amikor a programozó (a program készítője) előre tudja, hogy a ciklust hányszor kell végrehajtani. Ezt általában úgy kezelik, hogy deklarálnak egy speciális számlálóváltozót, majd 1a ciklus minden iterációjával növelik (vagy csökkentik) a változót.

Úgy tűnik, minden úgy működik, ahogy kell, de nem túl kényelmes. A ciklus előtt beállítjuk a számlálóváltozó kezdeti értékét. Ezután az állapotban ellenőrizzük, hogy elérte-e már a végső értéket. De általában a huroktest legvégén változtatjuk az értéket.

És mi van, ha a hurok teste nagy? Vagy ha több egymásba ágyazott hurkunk van? Általában ezekben az esetekben kívánatos, hogy a számlálóváltozókra vonatkozó összes információt egy helyen gyűjtsük össze. És ezért van a forciklus a Java-ban. Nem is tűnik túl bonyolultnak:

for (statement 1; condition; statement 2)
{
   block of statements
}

A whileciklusnak csak egy feltétele van zárójelben, de a forciklus két, pontosvesszővel elválasztott utasítást ad hozzá.

A valóság egyszerűbb, mint amilyennek hangzik: a fordító egy forciklust normál whilehurokká alakít, így:

statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Vagy ami még jobb, mutassuk meg ezt egy példával. Az alábbi két kódrészlet azonos.

1.opció 2. lehetőség
for (int i = 0; i < 20; i++)
{
   System.out.println(i);
}
int i = 0;
while (i < 20)
{
   System.out.println(i);
   i++;
}

Csak egy helyre gyűjtöttük az összes kódot, amely a számlálóváltozóhoz tartozik i.

Egy forciklusban az 1. utasítás csak egyszer kerül végrehajtásra, mielőtt maga a ciklus elkezdődik. Ez jól látható a második kódrészletben

a 2. utasítás ugyanannyiszor kerül végrehajtásra, mint a ciklus törzse, és minden alkalommal, miután a ciklus teljes törzse végrehajtásra került


2. A forhurok használatának helye

A forciklus valószínűleg a Java leggyakrabban használt ciklustípusa. Mindenhol használják, a programozóknak csak áttekinthetőbb és kényelmesebb, mint a whilehurok. Gyakorlatilag minden whilehurok hurokká alakítható for.

Példák:

míg hurok hurokhoz
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

Ügyeljen az utolsó példára. Hiányoznak a hurokszámlálóval való munkavégzésre vonatkozó utasítások. Nincs számláló és nincs nyilatkozat.

Egy forciklusban a Java lehetővé teszi a "számláló inicializálására vonatkozó utasítás" és a "számláló frissítésére vonatkozó utasítás" elhagyását. Még a ciklusfeltételt meghatározó kifejezés is elhagyható.



for3. A hurok használatának árnyalatai

forEgy fontos pont a ciklusok és breakaz utasítások használatával kapcsolatban continue.

A ciklusban breaklévő utasítás forugyanúgy működik, mint a ciklusban while– azonnal befejezi a ciklust. Az continueutasítás átugorja a ciklus törzsét, de nem statement 2(ami megváltoztatja a ciklusszámlálót).

Vessünk még egy pillantást a hurkok forés whilea hurkok kapcsolatára.

for (statement 1; condition; statement 2)
{
   block of statements
}
statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Ha egy utasítást continueforciklusban hajtanak végre , akkor az utasításblokk többi része kimarad, de a 2. utasítás (amely a forciklus számlálóváltozójával működik) továbbra is végrehajtódik.

Térjünk vissza példánkhoz a 7-tel osztható számok kihagyásával.

Ez a kód örökre hurkolni fog Ez a kód jól fog működni
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

A whileciklust használó kód nem fog működni – i soha nem lesz nagyobb 7-nél. De a forciklust tartalmazó kód jól fog működni.



4. Összehasonlítás a ciklusokhoz: Java vs Pascal

Mellesleg Pascalnak is van Forciklusa. Általánosságban elmondható, hogy lényegében minden programozási nyelvnek van egy. De Pascalban ez szuper egyértelmű. Példák:

Pascal Jáva
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}