CodeGym /Kurslar /Java SELF AZ /Döngü for

Döngü for

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Dövr müqayisəsi: for vs while

while dövrünü hansısa komandaları və ya komandalar qrupunu bir neçə dəfə yerinə yetirmək lazım olan istənilən halda istifadə etmək olar. Amma bütün hallardan birini xüsusi qeyd etmək lazımdır.

Bu hal odur ki, proqramist (proqramın müəllifi) əvvəlcədən bilir ki, onun dövrü neçə dəfə yerinə yetirilməlidir. Adətən bu, xüsusi sayğac dəyişəni tətbiq etməklə həll olunur və dövrün hər iterasiyasında dəyişən 1 artırlır (və ya azalır).

Elə bil ki, hər şey lazım olduğu kimi işləyir, amma çox da rahat deyil. Dövrün qarşısında sayğac dəyişəninin başlanğıc qiymətini təyin edirik, sonra şərtdə yoxlayırıq ki, o artıq yekun qiymətinə çatıb ya yox. Amma onu adətən dövr bədəninin ən sonunda dəyişirik.

Bəs dövr bədəni böyükdürsə? Yaxud bir neçə iç-içə dövrümüz varsa? Ümumiyyətlə, belə hallarda sayğac dəyişəni barədə bütün məlumatı bir yerdə toplamaq istərdik. Beləliklə, Java-da for dövrü yarandı. Onun görünüşü də çox mürəkkəb deyil:

for (komanda1; şərt; komanda2)
{
   komandalar bloku
}

Əgər while dövründə dairəvi mötərizələrdə sadəcə şərt varsa, burada əlavə iki komanda da var, nöqtəli vergüllə ayrılırlar.

Hər şey əslində göründüyündən daha asandır: kompilyator for dövrünü aşağıdakı kimi adi while dövrünə çevirir:

komanda1;
while (şərt)
{
   komandalar bloku
   komanda2;
}

Və ya bunu nümunə ilə göstərsək daha yaxşı olar: aşağıdakı iki nümunə eynidir.

Variant 1 Variant 2
for (int i = 0; i < 20; i++)
{
 System.out.println(i);
}
int i = 0;
while (i < 20)
{
 System.out.println(i);
   i++;
}

Sadəcə kodun hamısını bir yerdə topladıq, sayğac dəyişəni — i üçün olan kodu.

komanda1 dövründə for yalnız bir dəfə dövrdən əvvəl icra olunur (bunu ikinci nümunədə görmək olur)

komanda2 isə dövrün bədəni neçə dəfə icra olunursa, o qədər icra olunur, amma hər dəfə bütün dövr bədəni icra olunandan sonra həyata keçir.


2. Döngü for harada istifadə olunur

Döngü for, bəlkə də Java-da ən çox istifadə olunan döngü növüdür. O hər yerdə tətbiq edilir, çünki proqramçılar üçün daha sadə və rahat olan while döngüsünün bir formasıdır. Demək olar ki, hər bir while döngüsünü for döngüsünə çevirmək olar.

Nümunələr:

While döngüsü For döngüsü
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;
}

Sonuncu nümunəyə diqqət yetirin. Orada döngünün sayğacı ilə iş əmrləri yoxdur. Sayğac yoxdursa — əmrlər də yoxdur.

Java, for döngüsündə "sayğacın başlanğıc təyin etmə əmri"ni və "sayğacın dəyişdirmə əmri"ni yazmamağa imkan verir. Hətta döngünün şərt ifadəsini də yazmaq lazım deyil.



3. for dövründən istifadə ilə bağlı incəliklər

for dövrü və breakcontinue operatorları ilə bağlı vacib bir məqam.

break operatoru for dövrü içində while dövründə olduğu kimi işləyir — dövrün dərhal bitməsinə səbəb olur. Amma continue, dövrün bədənindən keçməməyə səbəb olur, lakin komanda2 (dövr sayğacını dəyişən) icra olunmağa davam edir.

Gəlin bir də baxaq, for ilə while necə əlaqəlidir.

for (komanda1; şərt; komanda2)
{
   komandalar bloku
}
komanda1;
while (şərt)
{
   komandalar bloku
   komanda2;
}

Əgər for dövrünün komandalar blokunda continue operatorunu çağırsanız, komandalar blokunun qalan hissəsi atlanacaq, amma komanda2 (bu isə dövr sayğacını dəyişdirən for) mütləq icra olunacaq.

Gəlin 7-yə bölünən ədədləri keçmək misalımıza qayıdaq.

Bu kod sonsuz dövrə düşəcək Bu kod mükəmməl işləyəcək
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);
}

while dövrü ilə yazılmış kod işləməyəcək — i heç vaxt 7-dən böyük olmayacaq. Amma for dövrü ilə yazılmış kod mükəmməl işləyəcək.



4. Dövr for müqayisəsi: Java vs Pascal

Pascal-da da For dövrü var. Bu ümumilikdə, demək olar ki, bütün proqramlaşdırma dillərində mövcuddur. Ancaq Pascal-da bu çox daha anlaşıqlıdır. Nümunələr:

Pascal Java
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);
}

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION