CodeGym /Kurslar /JAVA 25 SELF /Klassik switch: sintaksis, nümunələr

Klassik switch: sintaksis, nümunələr

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Giriş

Təsəvvür edin: siz bir kofe dükanı üçün proqram yazırsınız. İstifadəçi içki seçə bilər və siz bu seçimin reaksiyasını təmin etməlisiniz. Əlbəttə, çoxlu if-else if-else istifadə etmək olar, amma bu, o qədər də yaxşı görünmür:

if (choice == 1) 
{
    System.out.println("Siz espresso seçdiniz.");
} 
else if (choice == 2) 
{
    System.out.println("Siz kapuçino seçdiniz.");
} 
else if (choice == 3) 
{
    System.out.println("Siz latte seçdiniz.");
} 
else 
{
    System.out.println("Belə bir içki yoxdur.");
}

Razılaşın, bu, olduqca həcmli görünür. Bəs variantların sayı 10 və ya 20 olsa? Elə burada switch operatoru köməyə gəlir; o, dəyişənin dəyərinə görə çoxsaylı variantlar arasından seçimi zərif və yığcam şəkildə həyata keçirməyə imkan verir.

Klassik switch-in sintaksisi

Java-da switch-in sintaksisi belədir:


switch (vyrazhenie) 
{
    case znachenie1:
        // ifadə == znachenie1 olduqda görülən əməliyyatlar
        break;
    case znachenie2:
        // ifadə == znachenie2 olduqda görülən əməliyyatlar
        break;
    ...
    default:
        // heç bir case uyğun gəlmədikdə görülən əməliyyatlar
        break;
}
Java-da switch operatorunun sintaksisi

Açar elementlər:

  • switch (vyrazhenie) — nəticəsi hər bir case ilə müqayisə olunan ifadə.
  • case znachenie: — ifadənin müqayisə edildiyi variant.
  • break;switch blokunun icrasını dayandırır (əks halda — növbəti case-ə “fall-through”).
  • default: — heç bir case uyğun gəlmədikdə icra olunur.

2. switch-dən istifadə nümunələri

Nümunə 1: Janrın klassikası — içki seçimi

Gəlin, kofe dükanı üçün menyu quraq:

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("İçki seçin:");
        System.out.println("1 - Espresso");
        System.out.println("2 - Kapuçino");
        System.out.println("3 - Latte");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("Siz espresso seçdiniz.");
                break;
            case 2:
                System.out.println("Siz kapuçino seçdiniz.");
                break;
            case 3:
                System.out.println("Siz latte seçdiniz.");
                break;
            default:
                System.out.println("Belə bir içki yoxdur.");
                break;
        }
    }
}

Nə baş verir:

  • İstifadəçi içkinin nömrəsini daxil edir.
  • choice dəyişəninin dəyəri hər bir case ilə müqayisə olunur.
  • Uyğunluq varsa — müvafiq blok icra edilir, sonra break switch-in icrasını dayandırır.
  • Heç biri uyğun gəlmirsə — default icra olunur.

Nümunə 2: Sətirlər üzrə keçid

switch daxilində istifadə oluna bilən çox tip yoxdur, amma sətirlər var! Bu, komand menyuları üçün əlverişlidir:

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Əmri daxil edin (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("Proqramın işə salınması!");
                break;
            case "stop":
                System.out.println("Proqramın dayandırılması.");
                break;
            case "pause":
                System.out.println("Fasilə.");
                break;
            default:
                System.out.println("Naməlum əmr.");
                break;
        }
    }
}

Nəzərə alın: switch-də sətirlərin müqayisəsi registrə həssasdır! "Start""start" — fərqli sətirlərdir.

3. Klassik switch hansı tipləri dəstəkləyir?

Klassik switch-də yalnız müəyyən tiplərdən istifadə etmək olar:

  • Sadə tam ədədi tiplər: byte, short, char, int
  • Enum-lar: enum (onlar haqqında növbəti mühazirədə danışacağıq)
  • Sətirlər: String — registr nəzərə alınmaqla müqayisə olunur

İstifadə etmək olmaz: boolean, float, double, massivlər, siniflərin ixtiyari obyektləri (enumString istisna olmaqla).

char ilə nümunə

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("Əla!");
        break;
    case 'B':
        System.out.println("Yaxşı.");
        break;
    case 'C':
        System.out.println("Qənaətbəxş.");
        break;
    default:
        System.out.println("Yenidən cəhd edin.");
        break;
}

4. break-in məcburiliyi: unutsaq nə baş verər?

Yeni başlayanların ən çox etdiyi səhv — break;-i unutmaqdır. Gəlin baxaq, nə baş verəcək:

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("Bazar ertəsi");
        break;
    case 2:
        System.out.println("Çərşənbə axşamı");
    case 3:
        System.out.println("Çərşənbə");
        break;
    default:
        System.out.println("Naməlum gün");
        break;
}

Nəticə:

Çərşənbə axşamı
Çərşənbə

Niyə? Çünki case 2-dən sonra break yoxdur və icra növbəti case-ə “axır” (buna fall-through deyilir). Bəzən bu, faydalıdır, lakin çox vaxt — səhvdir.

5. case-lərin qruplaşdırılması: bir neçə variant eyni cür davrandıqda

Bir neçə dəyər üçün eyni davranış lazımdırsa, onları ardıcıl yaza bilərsiniz:

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("Qış");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("Yaz");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("Yay");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("Payız");
        break;
    default:
        System.out.println("Naməlum ay");
        break;
}

Burada: əgər month12, 1 və ya 2-dirsə, proqram "Qış" çıxaracaq.

6. Müqayisə: switchif-else

Ssenari if-else switch
Çox variant Uzun zəncir, oxunaqlılığı zəifdir Qısa, bütün variantlar dərhal görünür
Aralıqların müqayisəsi İstifadə etmək olar (if (x > 5 && x < 10)) Mümkün deyil, yalnız dəqiq dəyərlər
Dəstəklənən tiplər İstənilən Yalnız müəyyən olanlar (yuxarıya baxın)
break ilə tələ Yox Bəli, break-ə mütləq nəzarət etmək lazımdır

7. switch ilə işləyərkən tipik səhvlər

Səhv №1: break-i unutmaq
Səhvlərin ən yayılmış səbəbi: break unudulur — və kod gözlədiyiniz case əvəzinə başqasını icra edir.

Səhv №2: dəstəklənməyən tip
double, float və ya boolean istifadə etməyə cəhd edirsiniz — kompilyator “olmaz” deyəcək.

Səhv №3: müxtəlif registrli sətirlər
İstifadəçi "Start" daxil edib, siz isə "start" gözləyirsiniz — switch işləməyəcək. Sətirləri əvvəlcədən eyni registrə gətirmək daha yaxşıdır:

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

Səhv №4: case-də dəyişən, yoxsa sabit
case-də yalnız sabitlərə icazə verilir. Dəyişən istifadə etsəniz — kompilyasiya xətası olacaq.

Səhv №5: təkrarlanan case-lər
Eyni dəyərə malik iki case — kompilyator bunu bağışlamayacaq.

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