Java asoslari 2-qism

08.06.2026 | Muallif: Jaxongir a.k.a | Kategoriya: Java tili | 18 daqiqa o'qish

3. Control Flow

Control flow - dastur kodining qaysi yo‘nalishda bajarilishini boshqarish. Ya’ni Java kodni tepadan pastga qarab bajaradi, lekin if, switch, for, while, break, continue, return orqali biz bu oqimni boshqaramiz.

Roadmapdagi Beginner bo‘limida bu qism quyidagilarni o‘z ichiga oladi: if / else / else if, switch, for, while, do-while, break, continue, return, enhanced for-each loop.


3.1. Control flow nima uchun kerak?

Oddiy kod shunday ishlaydi:

System.out.println("1");
System.out.println("2");
System.out.println("3");

Natija:

1
2
3

Java kodni yuqoridan pastga bajaradi.

Lekin real dasturda har doim ham hamma kod bajarilmaydi. Masalan:

Agar foydalanuvchi 18 yoshdan katta bo‘lsa → ruxsat ber
Aks holda → ruxsat bermagin

Buni Java’da if bilan qilamiz.


3.2. if

if - shart true bo‘lsa, ichidagi kod bajariladi.

int age = 20;

if (age >= 18) {
    System.out.println("Kirish mumkin");
}

Bu yerda:

age >= 18

shart hisoblanadi.

Agar shart true bo‘lsa:

Kirish mumkin

chiqadi.

Agar age = 15 bo‘lsa, hech narsa chiqmaydi.


3.3. if / else

else - agar if sharti bajarilmasa, boshqa kodni bajaradi.

int age = 15;

if (age >= 18) {
    System.out.println("Kirish mumkin");
} else {
    System.out.println("Kirish mumkin emas");
}

Natija:

Kirish mumkin emas

Mantiq:

Agar age >= 18 bo‘lsa → Kirish mumkin
Aks holda → Kirish mumkin emas

3.4. else if

Agar bir nechta shart tekshirilsa, else if ishlatiladi.

int score = 85;

if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");
} else if (score >= 70) {
    System.out.println("C");
} else {
    System.out.println("Failed");
}

Natija:

B

Bu yerda Java shartlarni yuqoridan pastga tekshiradi:

score >= 90 → false
score >= 80 → true

Shu joyda kod bajariladi va qolgan else iflar tekshirilmaydi.


3.5. if tartibi muhim

Mana bu kod noto‘g‘ri mantiqqa ega:

int score = 95;

if (score >= 70) {
    System.out.println("C");
} else if (score >= 80) {
    System.out.println("B");
} else if (score >= 90) {
    System.out.println("A");
}

Natija:

C

Nega?

Chunki score >= 70 birinchi true bo‘ldi. Java keyingi shartlarga o‘tmaydi.

To‘g‘ri tartib:

int score = 95;

if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");
} else if (score >= 70) {
    System.out.println("C");
}

Natija:

A

3.6. Nested if

if ichida yana if yozish mumkin.

int age = 20;
boolean hasTicket = true;

if (age >= 18) {
    if (hasTicket) {
        System.out.println("Kirish mumkin");
    } else {
        System.out.println("Chipta yo‘q");
    }
} else {
    System.out.println("Yosh yetmaydi");
}

Lekin nested if ko‘payib ketsa, kod o‘qilishi qiyinlashadi.

Ko‘pincha buni && bilan soddalashtirish mumkin:

int age = 20;
boolean hasTicket = true;

if (age >= 18 && hasTicket) {
    System.out.println("Kirish mumkin");
} else {
    System.out.println("Kirish mumkin emas");
}

3.7. switch

switch bir qiymatni ko‘p variant bilan solishtirish uchun ishlatiladi.

Masalan, hafta kunlari:

int day = 3;

switch (day) {
    case 1:
        System.out.println("Dushanba");
        break;
    case 2:
        System.out.println("Seshanba");
        break;
    case 3:
        System.out.println("Chorshanba");
        break;
    default:
        System.out.println("Noma’lum kun");
}

Natija:

Chorshanba

3.8. break nima qiladi?

break - switch yoki loop’dan chiqib ketadi.

Agar switch ichida break yozilmasa, keyingi caselar ham bajarilib ketishi mumkin.

int day = 2;

switch (day) {
    case 1:
        System.out.println("Dushanba");
    case 2:
        System.out.println("Seshanba");
    case 3:
        System.out.println("Chorshanba");
    default:
        System.out.println("Noma’lum");
}

Natija:

Seshanba
Chorshanba
Noma’lum

Bu holat fall-through deyiladi.

To‘g‘ri variant:

int day = 2;

switch (day) {
    case 1:
        System.out.println("Dushanba");
        break;
    case 2:
        System.out.println("Seshanba");
        break;
    case 3:
        System.out.println("Chorshanba");
        break;
    default:
        System.out.println("Noma’lum");
}

Natija:

Seshanba

3.9. Modern switch

Yangi Java versiyalarida switchni ixchamroq yozish mumkin.

int day = 3;

switch (day) {
    case 1 -> System.out.println("Dushanba");
    case 2 -> System.out.println("Seshanba");
    case 3 -> System.out.println("Chorshanba");
    default -> System.out.println("Noma’lum kun");
}

Bu usulda odatda break kerak emas.

Yana qiymat qaytaradigan variant:

int day = 3;

String dayName = switch (day) {
    case 1 -> "Dushanba";
    case 2 -> "Seshanba";
    case 3 -> "Chorshanba";
    default -> "Noma’lum kun";
};

System.out.println(dayName);

Natija:

Chorshanba

3.10. for loop

for - kodni bir necha marta qayta bajarish uchun ishlatiladi.

for (int i = 1; i <= 5; i++) {
    System.out.println(i);
}

Natija:

1
2
3
4
5

for uch qismdan iborat:

for (initialization; condition; update) {
    // code
}

Misolda:

for (int i = 1; i <= 5; i++)

Tushuntirish:

int i = 1   → boshlang‘ich qiymat
i <= 5      → shart
i++         → har aylanishdan keyin 1 taga oshadi

3.11. for qanday ishlaydi?

Kod:

for (int i = 1; i <= 3; i++) {
    System.out.println("i = " + i);
}

Bajarilish tartibi:

1. i = 1
2. i <= 3 tekshiriladi → true
3. print
4. i++ → i = 2
5. i <= 3 tekshiriladi → true
6. print
7. i++ → i = 3
8. i <= 3 tekshiriladi → true
9. print
10. i++ → i = 4
11. i <= 3 tekshiriladi → false
12. loop tugaydi

Natija:

i = 1
i = 2
i = 3

3.12. while

while - shart true bo‘lib turgan paytda kodni qayta-qayta bajaradi.

int i = 1;

while (i <= 5) {
    System.out.println(i);
    i++;
}

Natija:

1
2
3
4
5

for va while farqi:

for   → necha marta aylanish taxminan ma’lum bo‘lsa
while → shart qachon false bo‘lishi oldindan aniq bo‘lmasa

Masalan, user to‘g‘ri parol kiritmaguncha davom etish - whilega mos.


3.13. Infinite loop

Agar shart doim true bo‘lsa, loop hech qachon tugamaydi.

int i = 1;

while (i <= 5) {
    System.out.println(i);
}

Bu kodda i++ yo‘q. Shuning uchun i doim 1 bo‘lib qoladi.

Natija:

1
1
1
1
...

Bu infinite loop deyiladi.

To‘g‘ri variant:

int i = 1;

while (i <= 5) {
    System.out.println(i);
    i++;
}

3.14. do-while

do-while kamida bir marta bajariladi. Chunki shart oxirida tekshiriladi.

int i = 1;

do {
    System.out.println(i);
    i++;
} while (i <= 5);

Natija:

1
2
3
4
5

Farqni ko‘ramiz:

int i = 10;

while (i <= 5) {
    System.out.println("while ishladi");
}

Bu umuman ishlamaydi.

Lekin:

int i = 10;

do {
    System.out.println("do-while ishladi");
} while (i <= 5);

Natija:

do-while ishladi

Chunki do bloki avval bajariladi, keyin shart tekshiriladi.


3.15. break

break loop’ni to‘xtatadi.

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;
    }

    System.out.println(i);
}

Natija:

1
2
3
4

i == 5 bo‘lganda loop tugaydi.


3.16. continue

continue - hozirgi aylanishni tashlab, keyingi aylanishga o‘tadi.

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }

    System.out.println(i);
}

Natija:

1
2
4
5

i == 3 bo‘lganda System.out.println(i) bajarilmadi. Lekin loop davom etdi.

Farq:

break    → loopni butunlay to‘xtatadi
continue → faqat bitta aylanishni tashlab ketadi

3.17. return

return - metoddan chiqib ketadi.

public static void checkAge(int age) {
    if (age < 18) {
        System.out.println("Yosh yetmaydi");
        return;
    }

    System.out.println("Kirish mumkin");
}

Agar age < 18 bo‘lsa:

Yosh yetmaydi

chiqadi va metod tugaydi. Pastdagi kod bajarilmaydi.

return ko‘pincha kodni soddalashtirish uchun ishlatiladi.

Yomonroq o‘qiladigan variant:

public static void checkAge(int age) {
    if (age >= 18) {
        System.out.println("Kirish mumkin");
    } else {
        System.out.println("Yosh yetmaydi");
    }
}

Yaxshiroq variant:

public static void checkAge(int age) {
    if (age < 18) {
        System.out.println("Yosh yetmaydi");
        return;
    }

    System.out.println("Kirish mumkin");
}

Bu usul early return deyiladi.


3.18. Enhanced for-each loop

Array yoki collection ichidagi elementlarni aylanib chiqish uchun ishlatiladi.

Oddiy for:

String[] names = {"Ali", "Vali", "Sami"};

for (int i = 0; i < names.length; i++) {
    System.out.println(names[i]);
}

for-each:

String[] names = {"Ali", "Vali", "Sami"};

for (String name : names) {
    System.out.println(name);
}

Natija:

Ali
Vali
Sami

Bu ancha o‘qilishi oson.


3.19. for va for-each farqi

Holat

Qaysi biri yaxshi

Index kerak bo‘lsa

for

Faqat elementlarni o‘qish kerak bo‘lsa

for-each

Elementni index orqali o‘zgartirish kerak bo‘lsa

for

Collection bo‘ylab oddiy yurish kerak bo‘lsa

for-each

Misol: index kerak bo‘lsa:

String[] names = {"Ali", "Vali", "Sami"};

for (int i = 0; i < names.length; i++) {
    System.out.println(i + ": " + names[i]);
}

Natija:

0: Ali
1: Vali
2: Sami

3.20. Amaliy misol: baho chiqarish

public class Main {
    public static void main(String[] args) {
        int score = 76;

        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 80) {
            System.out.println("B");
        } else if (score >= 70) {
            System.out.println("C");
        } else if (score >= 60) {
            System.out.println("D");
        } else {
            System.out.println("Failed");
        }
    }
}

Natija:

C

3.21. Amaliy misol: juft sonlarni chiqarish

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) {
                continue;
            }

            System.out.println(i);
        }
    }
}

Natija:

2
4
6
8
10

Bu yerda:

i % 2 != 0

son toq ekanini bildiradi. Agar son toq bo‘lsa, continue ishlaydi va print qilinmaydi.


3.22. Amaliy misol: kerakli userni topish

public class Main {
    public static void main(String[] args) {
        String[] users = {"Ali", "Vali", "Sami", "Hasan"};
        String target = "Sami";

        for (String user : users) {
            if (user.equals(target)) {
                System.out.println("User topildi: " + user);
                break;
            }
        }
    }
}

Natija:

User topildi: Sami

Bu yerda break kerak. Chunki user topilgandan keyin loopni davom ettirish shart emas.


3.23. String solishtirishda muhim qoida

Java’da Stringni == bilan solishtirish odatda noto‘g‘ri.

Noto‘g‘ri:

String name = "Ali";

if (name == "Ali") {
    System.out.println("Topildi");
}

Ba’zan ishlagandek ko‘rinadi, lekin bu ishonchli usul emas.

To‘g‘ri:

String name = "Ali";

if (name.equals("Ali")) {
    System.out.println("Topildi");
}

Yana xavfsizroq variant:

String name = "Ali";

if ("Ali".equals(name)) {
    System.out.println("Topildi");
}

Nega bu xavfsizroq?

Agar name null bo‘lsa, mana bu kod xato beradi:

name.equals("Ali")

Lekin bu xato bermaydi:

"Ali".equals(name)

3.24. Beginner xatolar

Xato 1: else if tartibini noto‘g‘ri yozish

Noto‘g‘ri:

if (score >= 60) {
    System.out.println("D");
} else if (score >= 90) {
    System.out.println("A");
}

To‘g‘ri:

if (score >= 90) {
    System.out.println("A");
} else if (score >= 60) {
    System.out.println("D");
}

Xato 2: switchda break unutish

Noto‘g‘ri:

switch (status) {
    case "NEW":
        System.out.println("Yangi");
    case "DONE":
        System.out.println("Tugagan");
}

To‘g‘ri:

switch (status) {
    case "NEW":
        System.out.println("Yangi");
        break;
    case "DONE":
        System.out.println("Tugagan");
        break;
}

Yoki modern usul:

switch (status) {
    case "NEW" -> System.out.println("Yangi");
    case "DONE" -> System.out.println("Tugagan");
}

Xato 3: Infinite loop

Noto‘g‘ri:

int i = 1;

while (i <= 10) {
    System.out.println(i);
}

To‘g‘ri:

int i = 1;

while (i <= 10) {
    System.out.println(i);
    i++;
}

Xato 4: break va continueni adashtirish

break    → loop tugaydi
continue → keyingi aylanishga o‘tadi

Misol:

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        break;
    }

    System.out.println(i);
}

Natija:

1
2
for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }

    System.out.println(i);
}

Natija:

1
2
4
5

3.25. Kichik real misol: login tekshirish

public class Main {
    public static void main(String[] args) {
        String username = "admin";
        String password = "12345";
        boolean isBlocked = false;

        if (isBlocked) {
            System.out.println("Account bloklangan");
            return;
        }

        if ("admin".equals(username) && "12345".equals(password)) {
            System.out.println("Login muvaffaqiyatli");
        } else {
            System.out.println("Login yoki parol noto‘g‘ri");
        }
    }
}

Natija:

Login muvaffaqiyatli

Bu yerda ishlatilgan narsalar:

if
return
String equals
logical &&
boolean

3.26. Qisqa xulosa

Control flow Java’da kod oqimini boshqaradi:

if / else       → shart bo‘yicha qaror qilish
else if         → bir nechta shartni tekshirish
switch          → bitta qiymatni ko‘p variant bilan solishtirish
for             → aniq miqdorda aylanish
while           → shart true bo‘lsa aylanish
do-while        → kamida bir marta bajariladigan loop
break           → loop yoki switch’dan chiqish
continue        → bitta aylanishni tashlab ketish
return          → metoddan chiqish
for-each        → array/collection elementlari bo‘ylab yurish

Eng muhim fikr:

Control flow - dasturga "qachon nima qilish kerak?" degan mantiqni beradi.