JavaRush /Java blogi /Random-UZ /Java-da tarmoqlanish

Java-da tarmoqlanish

Guruhda nashr etilgan
Ushbu maqolada biz umuman kompyuter dasturlarida va Java tilida yozilgan tarmoqlarda tarmoqlanish tushunchasini ko'rib chiqamiz. Keling, nazorat tuzilmalari haqida gapiraylik, masalan:
  • if-then(yoki if)
  • if-then-else(yoki if-else)
  • switch-case
Java-da tarmoqlanish - 1

Tarmoqlanish

Keling, asosiy tushunchalardan boshlaylik. Har qanday dastur - bu kompyuter tomonidan bajariladigan buyruqlar to'plami. Ko'pincha buyruqlar ketma-ket, birin-ketin bajariladi. Dastur buyruqlarining ketma-ket oqimini o'zgartirish kerak bo'lganda, bir oz kamroq (lekin juda tez-tez) vaziyatlar yuzaga keladi. Ba'zan, ma'lum shartlarga qarab, boshqa buyruqlar o'rniga bitta blokni bajarish kerak bo'lishi mumkin. Va bu shartlar o'zgarganda, teskarisini qiling. Misol uchun, 18 yoshgacha bo'lgan shaxslarga kirishi taqiqlangan bir qator saytlar mavjud. Odatda, bunday resursga birinchi marta tashrif buyurganida, foydalanuvchi yosh chegarasi haqida ogohlantiriladigan va uning tug'ilgan sanasini kiritish so'raladigan shakl bilan kutib olinadi. Keyin, foydalanuvchi kiritgan ma'lumotlarga qarab, unga resursga kirishga ruxsat beriladi yoki yo'q. Ushbu funksionallik, odatda, dallanma deb ataladigan narsa bilan ta'minlanadi. Keling, yana bir o'xshashlik keltiraylik. Keling, o'zimizni ettita yo'lning chorrahasida tasavvur qilaylik. Biz tanlov oldida turibmiz: chapga yoki o'ngga buriling yoki to'g'ri boring. Bizning tanlovimiz ma'lum shartlarga asoslanadi. Bizda ham bir vaqtning o'zida bir nechta yo'llarni bosib o'tish imkoniyati yo'q. Bular. ba'zi shartlarga qarab, biz bitta yo'lni tanlashimiz kerak bo'ladi. Xuddi shu printsip dallanish uchun ham qo'llaniladi. Endi shoxlanishga ta'rif berishga harakat qilaylik. Tarmoqlanish - bu algoritmik konstruktsiya bo'lib, unda qandaydir shartning haqiqatiga qarab, bir nechta harakatlar ketma-ketligidan biri amalga oshiriladi. Tarmoqlanish (ehtimol) mutlaqo barcha dasturlash tillarida amalga oshiriladi. Java dasturlash tilida bir nechta boshqaruv tuzilmalari mavjud bo'lib, ular sizning dasturingizda tarmoqlanishni amalga oshirishga imkon beradi. Dasturlash tilida 3 ta shunday konstruktsiyalar mavjud:
  • Operatorif-then
  • Operatorif-then-else
  • Uchlik operator? :
if-elseUshbu maqolada biz va operatorlarini ko'rib chiqamiz switch-case.

agar - keyin

Operator if-thenyoki oddiygina, ifehtimol, eng keng tarqalgan operator. "Ha, agar 1 yozing" iborasi allaqachon mashhur bo'lgan. Operator ifquyidagi tuzilishga ega:
if (bool_condition) {
	statement
}
Ushbu dizaynda:
  • bool_conditionto'g'ri yoki noto'g'ri deb baholanadigan mantiqiy ifodadir. Bu ifoda shart deyiladi.
  • statement— shart rost boʻlsa, bajarilishi kerak boʻlgan buyruq (bir nechta boʻlishi mumkin) ( bool_statement==true)
Ushbu qurilishni quyidagicha o'qish mumkin:

Если (bool_condition), то {statement}
Mana bir nechta misollar:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
Ushbu dasturda foydalanuvchidan smartfondagi batareya zaryadining foizini kiritish so'raladi. Zaryadning 10 foizdan kamrog‘i qolsa, dastur foydalanuvchini smartfonni quvvatlantirish zarurati haqida ogohlantiradi. Bu eng oddiy dizaynning namunasidir if. Shuni ta'kidlash kerakki, agar "a" o'zgaruvchisi 10 dan katta yoki teng bo'lsa, hech narsa bo'lmaydi. Dastur quyidagi kodni bajarishda davom etadi if. Shuni ham yodda tutingki, bu holda konstruksiya ifbajarish uchun faqat bitta harakatlar ketma-ketligiga ega: matnni chop eting yoki hech narsa qilmang. Bu bitta "filial" bilan dallanishning o'zgarishi. Bu ba'zan kerak bo'ladi. Misol uchun, biz o'zimizni noto'g'ri qadriyatlardan himoya qilmoqchi bo'lganimizda. Misol uchun, agar satr bo'lsa, biz satrdagi harflar sonini topa olmaymiz null. Quyidagi misollar:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
Asosiy usulni bajarish natijasida konsolga quyidagilar chiqariladi:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Buni tekshirish tufayli string != nullbiz dasturdagi xatolardan qochishga muvaffaq bo'ldik. stringVa o'zgaruvchi ga teng bo'lgan hollarda hech narsa qilmang null.

agar-keyin-boshqa

Agar odatiy holatda ifdasturda tanlov mavjud bo'lsa: "biror narsa qilish yoki hech narsa qilmaslik", u holda if-elsedastur tanlashda u "bir narsani yoki boshqasini qilish" ga to'g'ri keladi. "Hech narsa qilmang" opsiyasi yo'qoladi. Ushbu turdagi dallanish bilan bajarishning ikki yoki undan ortiq variantlari (yoki filiallar soni) mavjud. Keling, ikkita variant mavjud bo'lgan vaziyatni ko'rib chiqaylik. Keyin boshqaruv tuzilmasi quyidagi shaklga ega bo'ladi:
if (bool_condition) {
	statement1
} else {
	statement2
}
Bu yerga:
  • bool_statementto'g'ri yoki noto'g'ri deb baholanadigan mantiqiy ifodadir. Bu ifoda shart deyiladi.
  • statement1— shart rost boʻlsa, bajarilishi kerak boʻlgan buyruq (bir nechta boʻlishi mumkin) ( bool_statement==true)
  • statement2— shart noto'g'ri bo'lsa, bajarilishi kerak bo'lgan buyruq (bir nechta bo'lishi mumkin) ( bool_statement==false)
Ushbu qurilishni quyidagicha o'qish mumkin:

Если (bool_condition), то {statement1}
Иначе {statement2}
Mana bir misol:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
Xuddi shu misol smartfondagi batareya darajasi haqida. Faqat oxirgi marta dastur faqat smartfonni zaryad qilish zarurligi haqida ogohlantirgan bo'lsa, bu safar bizda qo'shimcha bildirishnoma bor. Keling, buni ko'rib chiqaylik if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Agar a < 10rost bo'lsa (batareya quvvati 10 dan kam), dastur bitta matnni chop etadi. Aks holda, agar shart a < 10bajarilmasa, dastur butunlay boshqa matn chiqaradi. Keling, ikkinchi misolimizni ham yakunlaylik, unda biz bir qatordagi harflar sonini ko'rsatamiz. Oxirgi marta o'tkazilgan satr ga teng bo'lsa, dastur hech narsa chiqarmadi null. ifKeling, buni oddiy holatga aylantirish orqali tuzatamiz if-else:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
Usulda biz printStringSizequrilishga ifblok qo'shdik else. Endi, agar biz dasturni ishga tushirsak, u konsolga 2 satr emas, balki 4 qatorni chiqaradi, garchi kirish (usul main) oxirgi marta bir xil bo'lib qoladi. Dastur chiqaradigan matn:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
elseVaziyatlarni bajarish buyruqlari emas, balki boshqa buyruqlar bajarilsa, qabul qilinadi if. Keyin qurilish quyidagi shaklni oladi:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Ushbu dizayn bir nechta shartlarga ega:
  • bool_shart1
  • bool_shart2
  • bool_conditionN
Bunday shartlar soni cheklanmagan. Har bir shart o'z buyruqlariga ega:
  • bayonot 1
  • bayonot 2
  • bayonot N
Har birida statement1 yoki undan ortiq kod satri bo'lishi mumkin. Shartlar birma-bir tekshiriladi. Birinchi haqiqiy shart aniqlangandan so'ng, haqiqiy holatga "bog'langan" bir qator buyruqlar bajariladi. Ushbu buyruqlarni bajargandan so'ng, dastur blokdan chiqadi if, hatto oldinda ko'proq tekshiruvlar bo'lsa ham. Agar yuqorida tavsiflangan shartlarning hech biri to'g'ri bo'lmasa, "bayon N+1" ifodasi bajariladi. Ushbu qurilishni quyidagicha o'qish mumkin:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Bu holda oxirgi qator ixtiyoriy. Siz oxirgi yolg'iz holda qila olasiz else. Va keyin dizayn quyidagi shaklni oladi:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
Va u shunday o'qiladi:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Shunga ko'ra, agar shartlarning hech biri to'g'ri bo'lmasa, unda bitta buyruq bajarilmaydi. Keling, misollarga o'tamiz. Keling, smartfondagi zaryad darajasi bilan bog'liq vaziyatga qaytaylik. Keling, egasiga qurilmasining zaryad darajasi haqida batafsil ma'lumot beradigan dastur yozaylik:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
Misol uchun, bu holda, agar foydalanuvchi 15 ga kirsa, dastur ekranda ko'rsatiladi: "Zaryadlash qurilmasi qaerda ekanligini eslash vaqti keldi." 15 kamroq va 30 va 50 va 75 va 100 bo'lishiga qaramay, ekrandagi chiqish faqat 1 bo'ladi. Keling, haftaning qaysi kuni ekanligini konsolga chop etadigan yana bir dastur yozamiz:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
Bu, albatta, qulay, lekin monoton matnning ko'pligi ko'zingizni biroz qamashtiradi. Ko'p sonli variantlarga ega bo'lgan holatlarda, quyida muhokama qilinadigan operatordan foydalanish yaxshiroqdir.

almashtirish qutisi

ifKo'p filiallari bilan qalin uchun muqobil operator hisoblanadi switch-case. Bu operator “Demak, bizda bu o'zgaruvchi bor. Qarang, agar uning qiymati `x` ga teng bo'lsa, u holda biz buni qilamiz, agar uning qiymati `y` bo'lsa, boshqacha qilamiz, agar u yuqoridagilarning birortasiga teng bo'lmasa, biz buni qilamiz. bu shunday... ” Ushbu operator quyidagi tuzilishga ega.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Keling, ushbu tuzilmani batafsil ko'rib chiqaylik. argument qiymatini biz faraziy turli variantlar bilan solishtiradigan o'zgaruvchidir. O'zgaruvchi bo'lishi kerak final. Shuni ham aytish kerakki, operator switchargument sifatida hech qanday ma'lumot turini qo'llab-quvvatlamaydi. Amaldagi turlar quyida keltirilgan:
  • bayt va bayt
  • qisqa va qisqa
  • int va Integer
  • belgi va belgi
  • enum
  • String
case value1 (value2, valueN)- bu qiymatlar, o'zgaruvchining qiymatini solishtiradigan o'ziga xos konstantalar argument. Bundan tashqari, har bir holat bajarilishi kerak bo'lgan buyruqlar to'plamini belgilaydi. statement1, statement2, biriga teng bo'lib chiqsa, statementNbajarilishi kerak bo'lgan buyruqlardir . Misol uchun, agar u ga teng bo'lsa , u holda dastur bajaradi . va "standart qiymatlar". Taqdim etilganlardan birortasiga teng bo'lmasa , u holda filial tetiklenir va buyruq bajariladi . va operatorning ixtiyoriy atributlaridir . — har bir ish blokining oxirida bayonot borligini sezishingiz mumkin . Bu operator ham ixtiyoriy va turli holatlar kodini farqlash uchun xizmat qiladi. Ba'zan turli holatlarda bir xil harakatlarni bajarish kerak bo'ladi: keyin bu holatlar birlashtirilishi mumkin. Bunday holda, kalit so'z o'tkazib yuboriladi va operatorning tuzilishi quyidagicha ko'rinadi: argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
Shunisi e'tiborga loyiqki, "case valueX:" va "case valueY:" o'rtasida operator yo'q break. Bu erda, agar argumentu ga teng bo'lsa value1, u bajariladi statement1. Va agar argument valueXikkalasiga teng bo'lsa valueY, statementXY. Keling, tushunish qiyin bo'lgan nazariyani tushunish oson amaliyotga aylantiraylik. Keling, misolni operator yordamida haftaning kunlari bilan qayta yozamiz switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
Endi operator yordamida bugun ish kuni yoki dam olish kuni ekanligini ko'rsatadigan dastur yozamiz switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
Keling, biroz tushuntiraman. Ushbu dasturda biz enum DayOfWeekhaftaning joriy kunini bildiruvchi ni olamiz. Keyinchalik, o'zgaruvchimizning qiymati ikkalasining dayOfWeekqiymatiga teng yoki yo'qligini tekshiramiz . Agar shunday bo'lsa, dasturda "Bugun dam olish kuni" ko'rsatiladi. Agar yo'q bo'lsa, o'zgaruvchining qiymati ning qiymatiga teng yoki yo'qligini tekshiramiz . Agar shunday bo'lsa, dasturda "Ertaga dam olish kuni" ko'rsatiladi. Agar bu holda yo'q bo'lsa, unda bizda bir nechta variant bor, qolgan har qanday kun ish kunidir, shuning uchun sukut bo'yicha, agar bugun juma EMAS, shanba EMAS va yakshanba EMAS, dasturda "Bugun ish kuni" ko'rsatiladi. SUNDAYSATURDAYdayOfWeekFRIDAY

Xulosa

Shunday qilib, ushbu maqolada biz kompyuter dasturida tarmoqlanish nima ekanligini ko'rib chiqdik. Shuningdek, biz Java-da tarmoqlanishni amalga oshirish uchun qanday boshqaruv tuzilmalari ishlatilishini aniqladik. Biz dizaynlarni muhokama qildik, masalan:
  • if-then
  • if-then-else
  • switch-case
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION