Ushbu maqolada biz umuman kompyuter dasturlarida va Java tilida yozilgan tarmoqlarda tarmoqlanish tushunchasini ko'rib chiqamiz. Keling, nazorat tuzilmalari haqida gapiraylik, masalan:
if-then
(yokiif
)if-then-else
(yokiif-else
)switch-case
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:- Operator
if-then
- Operator
if-then-else
- Uchlik operator
? :
if-else
Ushbu maqolada biz va operatorlarini ko'rib chiqamiz switch-case
.
agar - keyin
Operatorif-then
yoki oddiygina, if
ehtimol, eng keng tarqalgan operator. "Ha, agar 1 yozing" iborasi allaqachon mashhur bo'lgan. Operator if
quyidagi tuzilishga ega:
if (bool_condition) {
statement
}
Ushbu dizaynda:
bool_condition
to'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
)
Если (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 if
bajarish 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 != null
biz dasturdagi xatolardan qochishga muvaffaq bo'ldik. string
Va o'zgaruvchi ga teng bo'lgan hollarda hech narsa qilmang null
.
agar-keyin-boshqa
Agar odatiy holatdaif
dasturda tanlov mavjud bo'lsa: "biror narsa qilish yoki hech narsa qilmaslik", u holda if-else
dastur 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_statement
to'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
)
Если (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 < 10
rost bo'lsa (batareya quvvati 10 dan kam), dastur bitta matnni chop etadi. Aks holda, agar shart a < 10
bajarilmasa, 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
. if
Keling, 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 printStringSize
qurilishga if
blok 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
else
Vaziyatlarni 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
- bayonot 1
- bayonot 2
- bayonot N
statement
1 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
if
Ko'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 switch
argument 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, statementN
bajarilishi 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: argument
value
argument
value2
statement2
default
default_statement
argument
value
default
default_statement
default
default_statement
switch-case
break
break
break
switch-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 argument
u ga teng bo'lsa value1
, u bajariladi statement1
. Va agar argument valueX
ikkalasiga 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 DayOfWeek
haftaning joriy kunini bildiruvchi ni olamiz. Keyinchalik, o'zgaruvchimizning qiymati ikkalasining dayOfWeek
qiymatiga 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. SUNDAY
SATURDAY
dayOfWeek
FRIDAY
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
GO TO FULL VERSION