Java'dagi sikllar

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Sikllar hayotimizda

Ko'pincha hayotimizda bir xil harakatlarni qayta-qayta bajarishimiz kerak bo'ladi. Masalan, men ko'p sahifali hujjatni skanerlashim kerak. Keyin biz bir xil harakatlarni yana va yana bajaramiz:

  • Birinchi sahifani skanerdan yuqoriga qo'yish
  • Skanerlash tugmasini bosish
  • Keyingi sahifani qo'yish

Bu narsani qo'lda qilish qiyin bo'ladi. Agar shu jarayon qandaydir automatizatsiya qilinsa yaxshi bo'lardi.

Yana bir misol: men pochta qutisidagi o'qilmagan xatlarni spam sifatida belgilamoqchiman. Boshida ularni birma-bir ajratib, spam sifatida belgilanishi kerak edi.

Lekin dasturchilar dangasalik qilishadi, shuning uchun bu funksiya allaqachon avto-matizatsiya qilingan: siz faqat xatlarni ro'yxatini ajratib olib, "spam sifatida belgilash" tugmasini bosasiz va pochta mijozi bu ro'yxatdan o'tib, har bir xatni spam papkasiga ko'chiradi.

Nima deyish mumkin? Kompyuter yoki dastur bir klikda yuzlab va minglab rutinalar bajarishi qulay. Hozir siz ham bunga o'rganasiz.


2. while sikli

If-else operatori bizning dasturlash imkoniyatlarimizni sezilarli darajada kengaytirdi: endi har xil vaziyatlarda har xil harakatlarni bajaradigan dasturlar yozishimiz mumkin. Lekin yana bir narsa bor, u bizning dasturlarimizni yanada kuchli qiladi — bu sikllar.

Java'da 4 turdagi sikllar bor: while, for, for-each va do-while. Hozir birinchisini ko'rib chiqamiz.

while sikli juda oddiy va faqat ikki qismdan iborat: shart va sikl tanasi. Sikl tanasi shart true bo'lganda qayta-qayta bajariladi. Umumiy while sikli ko'rinishi quyidagicha:

while (shart)
   komanda;
while siklining bir komandali yozilishi
while (shart)
{
   komandalar bloki
}
while siklining komandalar bloki bilan yozilishi

Hammasi juda oddiy. Komanda yoki komandalar bloki shart haqiqiy — true holatlaridayoq qayta-qayta bajariladi.

Bu quyidagicha ishlaydi: avval shart tekshiriladi va agar u haqiqiy bo'lsa, sikl tanasi (komanda yoki komandalar bloki) bajariladi, keyin yana shart tekshiriladi va yana sikl tanasi bajariladi. Va bu holat shart yolg'on bo'lmaganida davom etadi.

Agar shart doimo haqiqiy bo'lsa, demak dastur hech qachon to'xtamaydi va doimo siklni bajara beradi.

Agar eng birinchi marta shart yolg'on bo'lsa, sikl tanasi hech qachon bajarilmaydi.


3. Siklar misollari

Mana sikllardan foydalanishning bir qancha amaliy misollari.

Kod Izoh
int  n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
Ekraanga 5 qator chiqariladi:
5
4
3
2
1
Kod Izoh
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
Ekraanga 10 qator chiqariladi:
0
1
...
8
9
Kod Izoh
Scanner console = new Scanner(System.in);
while(console.hasNextInt()) {
   int x = console.nextInt();
} 
Dastur klavishdan raqamlar o'qiydi, to'g'ri raqamlar kiritilguncha.
Kod Izoh
while (true)
   System.out.println("C");
Dastur cheksiz ekranga C harifini chiqaradi.
Kod Izoh
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Dastur klavishdan qatorlarni kiritadi,

to exit qatori kiritilmaguncha.

Oldingi misolda equals() funksiyasi qatorlarni solishtirish uchun ishlatiladi. Agar qatorlar teng bo'lsa, funksiya true natijani qaytaradi, agar qatorlar teng bo'lmasa false qaytariladi.



4. Sikl ichida sikl

Shartli operatorni o'rganishda ko'rganingizdek, agar bir nechta shartli operatorlarni birlashtirsangiz, murakkab logika amalga oshirilishi mumkin. Boshqa so'zlar bilan aytganda, if ichida if-ni ishlatish mumkin.

Sikllar bilan ham xuddi shunday qilish mumkin. Sikl ichida sikl yozish uchun birinchi siklning tanasi ichiga ikkinchi siklni yozish kerak. Bu quyidagicha ko'rinadi:

while (tashqi siklning sharti)
{
   while (ichki siklning sharti)
   {
     komandalar bloki
   }
}
Boshqa while sikli ichida while ( komandalar bloki bilan )

Uchta vazifani ko'rib chiqamiz.

Vazifa 1. Aytaylik, ekranga 4 marta Moma so'zini chiqarishni istaymiz. Sikl aynan bizga kerak. Va taxminan bizning kodimiz quyidagicha ko'rinardi:

Kod Izoh
int  n = 0;
while (n < 4)
{
   System.out.println("Moma");
   n++;
}
Ekranga 4 qator chiqariladi:
Moma
Moma
Moma
Moma

Vazifa 2. Ekranga bir qator ichida 5 ta A harfi chiqarish kerak. Yana bizga sikl kerak. Kod quyidagicha ko'rinadi

Kod Izoh
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
println o'rniga print yozamiz, aks holda har bir A alohida qatorga ko'chiriladi.

Ekranga chiqariladi:
AAAAA

Vazifa 3. Ekranga 4 qator va 5 ustundan iborat A harfidan to'g'ri burchakli shaklni chiqarish kerak. Buning uchun bizga yana ichi ichiga sikllar kerak. Birinchi misolni olib, 4 qator chiqaramiz va ikkinchi misoldagi bir qator chiqarish kodini o'rniga qo'yamiz.

Kod Izoh
int n = 0;


      
while ( n < 4) { int m = 0;
while ( m < 5) { System.out.print("А"); m++; }
System.out.println(); n++; }
 
Tashqi sikl violet rang bilan belgilangan, u sikl burilishlarining sonini hisoblash uchun n o'zgaruvchisidan foydalanadi.

Ichki sikl yashil rang bilan belgilangan. U sikl burilishlarining sonini hisoblash uchun m o'zgaruvchisidan foydalanadi.

Ichki sikl ish tugaganidan keyin kursorni keyingi qatorda ko'chirish kerak. Aks holda, dastur chiqaradigan barcha harflar bir qatorga qadirlanadi.

Ekranda ko'rinadi:
AAAAA
AAAAA
AAAAA
AAAAA

Tashqi va ichki sikllar burilishlar sonini hisoblash uchun har xil o'zgaruvchilardan foydalanishi kerak. Shu bilan birga, System.out.println() komandasini ichki sikl ishidan keyin qo'shish kerak bo'ldi, chunki u A harflarini bir qatorga chiqaradi va barcha harflarni chiqarib bo'lgandan keyin kursorni yangi qatorga o'tkazishi kerak.



5. Sikllarni solishtirish: Java vs Pascal

Ko'pchiligingiz maktabda Pascal o'rganibsiz, shu sababli materialni osonroq tushunishingiz uchun, Pascal va Java tillarida while sikllarini solishtirishni keltiramiz. Agar Pascalni bilmasaiz, bu materialni o'tkazib yuboring.

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

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION