CodeGym /Kurslar /Java SELF AZ /Döngülər Java-da

Döngülər Java-da

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

1. Dövrələr həyatımızda

Həyatımızda çox zaman eyni tipli əməliyyatları dəfələrlə yerinə yetirmək lazım olur. Məsələn, mən çox səhifəli bir sənədi skan etmək istəyirəm. Onda eyni əməliyyat ardıcıllığını təkrar-təkrar yerinə yetiririk:

  • Birinci səhifəni skanerlə qoymaq
  • Skan et düyməsini basmaq
  • Növbəti səhifəni qoymaq

Bunu əl ilə etmək çətindir. Yaxşı olardı ki, bu prosesi bir şəkildə avtomatlaşdırmaq mümkün olsun.

Başqa bir misal: mən e-poçt qutusundakı bütün oxunmamış mesajları spam olaraq qeyd etmək istəyirəm. Bunu vaxtilə bir-bir seçib spam olaraq qeyd etmək lazım idi.

Amma proqramlaşdırıcılar tənbəl insanlardır, buna görə də bu funksiyanı çoxdan avtomatlaşdırıblar: sadəcə istənilən siyahını seçirsiniz və "spam olaraq qeyd et" düyməsini basırsınız, və sizin e-poçt müştəriniz həmin siyahıdan keçərək hər bir məktubu spam qovluğuna köçürür.

Burada nə deyək? Kompüter və ya proqram yüzlərlə və minlərlə rutin əməliyyatı bir kliklə edəndə çox rahatdır. İndi siz də bunu öyrənəcəksiniz.


2. while Döngüsü

if-else operatoru proqramlaşdırma imkanlarımızı ciddi şəkildə genişləndirdi: artıq müxtəlif vəziyyətlərdə fərqli əməliyyatları yerinə yetirən proqramlar yaza bilirik. Amma proqramlarımızı daha da güclü edəcək başqa bir şey var — bu döngülərdir.

Java-da 4 növ döngü var: while, for, for-eachdo-while. İndi onlardan ən birincisini nəzərdən keçirəcəyik.

while döngü operatoru çox sadədir və cəmi iki hissədən ibarətdir: şərtdöngü korpusu. Döngü korpusu şərt true olduğu müddətdə təkrar-təkrar icra olunur. while döngüsünün ümumi görünüşü belədir:

while (şərt)
   əmr;
while döngüsünün bir əmrlə yazılışı
while (şərt)
{
   əmrlər bloku
}
while döngüsünün əmrlər bloku ilə yazılışı

Hər şey çox sadədir. Əmr və ya əmrlər bloku şərt true olduğu müddətdə təkrar-təkrar icra olunur.

Bu belə işləyir: əvvəlcə şərt yoxlanılır, əgər o doğrudursa, döngü korpusu (əmr və ya əmrlər bloku) icra olunur, sonra yenidən şərt yoxlanılır və yenə döngü korpusu icra olunur. Bu, şərt yalançı olana qədər davam edir.

Əgər şərt həmişə doğru olacaqsa, proqram heç vaxt dayanmayacaq və döngünü həmişə icra edəcək.

Amma ilk dəfə şərt yalançı olursa, döngü korpusu heç vaxt icra olunmayacaq.


3. Dövr nümunələri

Burada dövrlərin istifadəsinə dair bir neçə praktiki misal var.

Kod İzah
int  n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
Ekranda 5 sətir göstəriləcək:
5
4
3
2
1
Kod İzah
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
Ekranda 10 sətir göstəriləcək:
0
1
...
8
9
Kod İzah
Scanner console = new Scanner(System.in);
while(console.hasNextInt()) {
   int x = console.nextInt();
} 
Proqram klaviaturadan yalnız rəqəmləri oxuyacaq, rəqəm daxil etdikcə bu proses davam edəcək.
Kod İzah
while (true)
   System.out.println("C");
Proqram ekranda C hərfini sonsuz olaraq yazacaq.
Kod İzah
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Proqram klaviaturadan yazıları oxuyacaq,

nə qədər ki, exit yazısı daxil edilməyib.

Yuxarıdakı nümunədə equals() funksiyası yazıları müqayisə etmək üçün istifadə olunur. Əgər yazılar eynidirsə, funksiya nəticə olaraq true qaytarır, əks halda false.



4. Döngü içərisində döngü

İf operatoru ilə tanışlıq zamanı görmüşdünüz ki, bir neçə if operatorunun birləşdirilməsi ilə mürəkkəb məntiq yaradmaq olar. Başqa sözlə, bir if-in içində başqa if işlətmək olar.

Döngülərlə də eyni şeyi etmək olar. Döngü içərisində başqa bir döngü yazmaq üçün, birinci döngünün gövdəsində ikinci döngünü yazmaq lazımdır. Bu təxminən belə görünəcək:

while (xarici döngünün şərti)
{
   while (daxili döngünün şərti)
   {
     komanda bloku
   }
}
while döngüsü (komanda bloku ilə) başqa bir while döngüsünün içində

Gəlin, üç məsələni araşdıraq.

Məsələ 1. Tutaq ki, ekrana 4 dəfə Ana sözünü yazdıran proqram yazmaq istəyirik. Bunun üçün döngü tam uyğundur. Kod təxminən belə görünəcək:

Kod İzah
int  n = 0;
while (n < 4)
{
   System.out.println("Ana");
   n++;
}
Ekranda 4 sətr belə görünəcək:
Ana
Ana
Ana
Ana

Məsələ 2. Eyni sətrdə 5 dəfə A hərfini çap edən proqram yazmaq istəyirik. Bunun üçün yenə də döngüdən istifadə edəcəyik. Kod belə olacaq:

Kod İzah
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
println yerinə print yazırıq, çünki yoxsa hər bir A hərfi ayrı sətirdə olacaq.

Ekranda belə görünəcək:
AAAAA

Məsələ 3. Ekrana 4 sətrdən və 5 sütundan ibarət olan A hərflərindən ibarət düzbucaqlı çap etmək istəyirik. Bunun üçün artıq bir-birinin içində olan döngülərdən istifadə edəcəyik. Birinci nümunədən istifadə edib, kodu dəyişdiririk:

Kod İzah
int n = 0;


      
while ( n < 4) { int m = 0;
while ( m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Xarici döngü bənövşəyi rəngdə göstərilmişdir və döngü sayını hesablamaq üçün n dəyişənindən istifadə edir.

Daxili döngü yaşıl rəngdə göstərilmişdir və döngü sayını hesablamaq üçün m dəyişənindən istifadə edir.

Daxili döngü bitdikdən sonra kursoru yeni sətrə keçirmək üçün ayrıca komanda əlavə edilməlidir. Yoxsa proqramın çap etdiyi bütün hərflər bir sətrdə olacaq.

Ekranda belə görünəcək:
AAAAA
AAAAA
AAAAA
AAAAA

Xarici və daxili döngülər üçün fərqli dəyişənlərdən istifadə etmək lazımdır. Həmçinin daxili döngüdən sonra System.out.println() əlavə etmək lazım idi, çünki o, A hərflərini bir sətrdə çap edir və bütün hərflər çap olunduqdan sonra kursoru yeni sətrə keçirmək lazım olur.



5. Döngülərin müqayisəsi: Java vs Pascal

Çoxunuz məktəbdə Pascal öyrənmisiniz, buna görə də materialı daha aydın başa düşməyiniz üçün Pascal dilindəki while döngüsünü Java-dakı ilə müqayisə edəcəyik. Əgər Pascal dilini bilmirsinizsə, bu materialı sadəcə keçə bilərsiniz.

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

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