Dalam artikel ini kita akan melihat konsep percabangan dalam program komputer secara umum dan yang ditulis dalam Java. Mari kita bercakap tentang struktur kawalan seperti:
if-then
(atauif
)if-then-else
(atauif-else
)switch-case
Bercabang
Mari kita mulakan dengan konsep asas. Sebarang program ialah satu set arahan yang dilaksanakan oleh komputer. Selalunya, arahan dilaksanakan secara berurutan, satu demi satu. Situasi yang agak kurang kerap (tetapi masih agak kerap) timbul apabila anda perlu menukar aliran berurutan arahan program. Kadangkala, bergantung pada syarat tertentu, mungkin perlu untuk melaksanakan satu blok arahan dan bukannya satu lagi. Dan apabila keadaan ini berubah, lakukan sebaliknya. Sebagai contoh, terdapat beberapa tapak yang dilarang untuk dikunjungi oleh mereka yang berumur di bawah 18 tahun. Biasanya, apabila melawat sumber sedemikian untuk kali pertama, pengguna disambut dengan beberapa bentuk di mana pengguna diberi amaran tentang had umur dan diminta untuk memasukkan tarikh lahirnya. Kemudian, bergantung pada data yang dimasukkan pengguna, dia akan dibenarkan untuk memasuki sumber atau tidak. Fungsi ini disediakan oleh apa yang biasa dipanggil cawangan. Mari kita berikan satu lagi analogi. Cuba bayangkan diri kita berada di persimpangan tujuh jalan. Kita berhadapan dengan pilihan: belok kiri atau kanan, atau jalan lurus. Pilihan kami adalah berdasarkan syarat-syarat tertentu. Kami juga tidak berpeluang untuk melalui beberapa jalan pada masa yang sama. Itu. bergantung pada beberapa syarat, kita perlu memilih satu jalan. Prinsip yang sama berlaku untuk cawangan. Sekarang mari kita cuba berikan definisi percabangan. Cawangan ialah pembinaan algoritma di mana, bergantung pada kebenaran beberapa keadaan, salah satu daripada beberapa urutan tindakan dilakukan. Cawangan dilaksanakan (kemungkinan besar) dalam semua bahasa pengaturcaraan. Bahasa pengaturcaraan Java mempunyai beberapa pembinaan kawalan yang membolehkan anda melaksanakan percabangan dalam program anda. Terdapat 3 pembinaan sedemikian dalam bahasa pengaturcaraan:- Operator
if-then
- Operator
if-then-else
- Operator ternary
? :
if-else
dan operator switch-case
.
jika-maka
Operatorif-then
, atau if
mungkin pengendali yang paling biasa. Ungkapan "ya, tulis 1 jika" telah menjadi popular. Operator if
mempunyai struktur berikut:
if (bool_condition) {
statement
}
Dalam reka bentuk ini:
bool_condition
ialah ungkapan boolean yang menilai kepada benar atau salah. Ungkapan ini dipanggil syarat.statement
— perintah (mungkin terdapat lebih daripada satu) yang mesti dilaksanakan jika keadaan adalah benar (bool_statement==true
)
Если (bool_condition), то {statement}
Berikut adalah beberapa contoh:
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 процентов, подключите ваш смартфон к зарядному устройству");
}
}
Dalam program ini, pengguna diminta memasukkan peratusan cas bateri pada telefon pintarnya. Jika kurang daripada 10 peratus caj kekal, program ini akan memberi amaran kepada pengguna tentang keperluan untuk mengecas telefon pintar. Ini adalah contoh reka bentuk yang paling mudah if
. Perlu diingat bahawa jika pembolehubah `a` lebih besar daripada atau sama dengan 10, maka tiada apa yang akan berlaku. Program ini akan terus melaksanakan kod yang mengikuti if
. Juga ambil perhatian bahawa dalam kes ini, binaan if
hanya mempunyai satu urutan tindakan untuk dilaksanakan: mencetak teks, atau tidak melakukan apa-apa. Ini adalah variasi percabangan dengan satu "cawangan". Ini kadang-kadang perlu. Sebagai contoh, apabila kita ingin melindungi diri kita daripada nilai yang salah. Sebagai contoh, kita tidak dapat mengetahui bilangan huruf dalam rentetan jika rentetan itu ialah null
. Contoh di bawah:
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());
}
}
Hasil daripada melaksanakan kaedah utama, berikut akan dikeluarkan kepada konsol:
Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Terima kasih untuk menyemak itu string != null
, kami dapat mengelakkan ralat dalam program. Dan tidak melakukan apa-apa dalam kes di mana pembolehubah string
adalah sama dengan null
.
jika-maka-lain
Jika, dalam keadaan biasa,if
program mempunyai pilihan: "untuk melakukan sesuatu atau tidak melakukan apa-apa," maka apabila if-else
memilih program, ia datang kepada "melakukan sama ada satu perkara atau yang lain." Pilihan "buat apa-apa" hilang. Terdapat dua atau lebih varian pelaksanaan (atau bilangan cawangan) dengan jenis percabangan ini. Mari kita pertimbangkan kes itu apabila terdapat dua pilihan. Kemudian struktur kawalan mempunyai bentuk berikut:
if (bool_condition) {
statement1
} else {
statement2
}
di sini:
bool_statement
ialah ungkapan boolean yang menilai kepada benar atau salah. Ungkapan ini dipanggil syarat.statement1
— perintah (mungkin terdapat lebih daripada satu) yang mesti dilaksanakan jika keadaan adalah benar (bool_statement==true
)statement2
— perintah (mungkin terdapat lebih daripada satu) yang mesti dilaksanakan jika syarat itu palsu (bool_statement==false
)
Если (bool_condition), то {statement1}
Иначе {statement2}
Berikut ialah contoh:
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");
}
}
Contoh yang sama tentang tahap bateri pada telefon pintar. Hanya jika kali terakhir program hanya memberi amaran tentang keperluan untuk mengecas telefon pintar, kali ini kami mempunyai pemberitahuan tambahan. Mari lihat yang ini if
:
if (a < 10) {
System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Jika a < 10
benar (paras bateri kurang daripada 10), program akan mencetak satu teks. Jika tidak, jika syarat a < 10
tidak dipenuhi, program akan mengeluarkan teks yang berbeza sama sekali. Mari kita juga memuktamadkan contoh kedua kita, di mana kita memaparkan bilangan huruf dalam satu baris. Kali terakhir program tidak mengeluarkan apa-apa jika rentetan yang diluluskan adalah sama dengan null
. Mari kita betulkan ini dengan menukar yang biasa if
menjadi 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!");
}
}
Dalam kaedah itu , kami menambah blok printStringSize
pada pembinaan . Sekarang, jika kita menjalankan program, ia akan mengeluarkan ke konsol bukan 2 baris, tetapi 4, walaupun input (kaedah ) tetap sama seperti kali terakhir. Teks yang akan dikeluarkan oleh program: if
else
main
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Situasi boleh diterima apabila else
ia diikuti bukan oleh arahan pelaksanaan, tetapi oleh yang lain if
. Kemudian pembinaan mengambil bentuk berikut:
If (bool_condition1) {
statement1
} else if (bool_condition2) {
statement2
} else if (bool_conditionN) {
statementN
} else {
statementN+1
}
Reka bentuk ini mempunyai beberapa syarat:
- bool_condition1
- bool_condition2
- bool_conditionN
- pernyataan1
- pernyataan2
- pernyataanN
statement
boleh mengandungi 1 atau lebih baris kod. Syaratnya disemak satu persatu. Sebaik sahaja keadaan benar pertama ditentukan, satu siri arahan "terikat" kepada keadaan sebenar akan dilaksanakan. Selepas melaksanakan arahan ini, program akan keluar dari blok if
, walaupun terdapat lebih banyak semakan di hadapan. Ungkapan "pernyataanN+1" akan dilaksanakan jika tiada syarat yang ditakrifkan di atas adalah benar. Pembinaan ini boleh dibaca seperti ini:
Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Baris terakhir dalam kes ini adalah pilihan. Anda boleh lakukan tanpa yang terakhir kesepian else
. Dan kemudian reka bentuk akan mengambil bentuk berikut:
If (bool_condition1) {
statement1
} else if (bool_condition2) {
statement2
} else if (bool_conditionN) {
statementN
}
Dan ia akan berbunyi seperti ini:
Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Sehubungan itu, jika tiada syarat yang benar, maka tiada satu perintah pun akan dilaksanakan. Mari kita beralih kepada contoh. Mari kita kembali kepada situasi dengan tahap pengecasan pada telefon pintar. Mari tulis program yang akan memaklumkan pemilik dengan lebih terperinci tentang tahap caj perantinya:
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);
}
}
Sebagai contoh, dalam kes ini, jika pengguna memasukkan 15, program akan dipaparkan pada skrin: "Sudah tiba masanya untuk mengingati di mana pengecas berada." Walaupun fakta bahawa 15 adalah kurang dan 30 dan 50 dan 75 dan 100, output pada skrin akan menjadi hanya 1. Mari tulis aplikasi lain yang akan mencetak ke konsol hari apa dalam minggu itu:
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("Сегодня суббота");
}
}
Ia mudah, sudah tentu, tetapi banyaknya teks membosankan sedikit mempesonakan mata anda. Dalam situasi di mana kita mempunyai sejumlah besar pilihan, lebih baik menggunakan operator, yang akan dibincangkan di bawah.
kotak suis
Alternatif kepada boldif
dengan banyak cawangan ialah operator switch-case
. Pengendali ini seolah-olah berkata "Jadi, kami mempunyai pembolehubah ini. Lihat, jika nilainya sama dengan `x`, maka kita melakukan ini dan itu, jika nilainya sama dengan `y`, maka kita melakukannya secara berbeza, dan jika ia tidak sama dengan mana-mana di atas, kita lakukan sahaja ia seperti ini... ” Operator ini mempunyai struktur berikut.
switch (argument) {
case value1:
statement1;
break;
case value2:
statement2;
break;
case valueN:
statementN;
break;
default:
default_statement;
break;
}
Mari kita lihat struktur ini dengan lebih terperinci. argument
ialah pembolehubah yang nilainya akan kita bandingkan dengan pilihan hipotetikal berbeza. Pembolehubah mestilah final
. Perlu juga dikatakan bahawa pengendali switch
tidak menyokong sebarang jenis data sebagai hujah. Jenis yang sah disenaraikan di bawah:
- bait dan Bait
- pendek dan pendek
- int dan Integer
- watak dan Perwatakan
- enum
- Tali
case value1 (value2, valueN)
- ini adalah nilai, pemalar khusus yang mana kita membandingkan nilai pembolehubah argument
. Selain itu, setiap kes mentakrifkan satu set arahan yang perlu dilaksanakan. statement1
, statement2
, statementN
adalah arahan yang perlu dilaksanakan jika argument
ternyata sama dengan salah satu daripada value
. Sebagai contoh, jika argument
ia sama dengan value2
, maka program akan melaksanakan statement2
. default
dan default_statement
merupakan "nilai lalai". Jika argument
ia tidak sama dengan mana - mana yang dibentangkan value
, maka cawangan akan dicetuskan default
dan arahan akan dilaksanakan default_statement
. default
dan default_statement
merupakan atribut pilihan pengendali switch-case
. break
— anda boleh perhatikan bahawa pada akhir setiap blok kes terdapat pernyataan break
. Operator ini juga adalah pilihan dan berfungsi untuk membezakan kod kes yang berbeza. Kadang-kadang perlu melakukan tindakan yang sama dalam kes yang berbeza: maka kes ini boleh digabungkan. Dalam kes ini, kata kunci break
ditinggalkan, dan struktur pengendali switch-case
akan kelihatan seperti ini:
switch (argument) {
case value1:
statement1;
break;
case valueX:
case valueY:
statementXY;
break;
}
Perlu diingat bahawa tiada pengendali antara `case valueX:` dan `case valueY:` break
. Di sini, jika argument
ia sama dengan value1
, ia akan dilaksanakan statement1
. Dan jika hujah adalah sama valueX
dengan sama ada valueY
, statementXY
. Mari kita cairkan teori yang sukar difahami kepada amalan yang mudah difahami. Mari kita tulis semula contoh dengan hari dalam seminggu menggunakan operator 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;
}
}
Sekarang mari kita tulis program yang memaparkan sama ada hari ini adalah hari bekerja atau hujung minggu menggunakan operator 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;
}
}
Biar saya terangkan sedikit. Dalam program ini kita mendapat enum DayOfWeek
, yang menandakan hari semasa dalam minggu. Seterusnya, kami melihat untuk melihat sama ada nilai pembolehubah kami adalah sama dengan dayOfWeek
nilai SUNDAY
sama ada SATURDAY
. Jika ini berlaku, program memaparkan "Hari ini adalah hari cuti". Jika tidak, maka kita semak sama ada nilai pembolehubah adalah sama dengan dayOfWeek
nilai FRIDAY
. Jika ini berlaku, program memaparkan "Esok adalah hari cuti." Jika dalam kes ini tiada, maka kami mempunyai sedikit pilihan, mana-mana hari yang tinggal ialah hari bekerja, jadi secara lalai, jika hari ini BUKAN Jumaat, BUKAN Sabtu dan BUKAN Ahad, program akan memaparkan "Hari ini ialah hari bekerja."
Kesimpulan
Jadi, dalam artikel ini kita melihat apa itu cawangan dalam program komputer. Kami juga mengetahui struktur kawalan yang digunakan untuk melaksanakan percabangan di Jawa. Kami membincangkan reka bentuk seperti:if-then
if-then-else
switch-case
GO TO FULL VERSION