JavaRush /Blog Java /Random-MS /Bercabang di Jawa

Bercabang di Jawa

Diterbitkan dalam kumpulan
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(atau if)
  • if-then-else(atau if-else)
  • switch-case
Cawangan di Jawa - 1

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:
  • Operatorif-then
  • Operatorif-then-else
  • Operator ternary? :
Dalam artikel ini kita akan melihat pada if-elsedan operator switch-case.

jika-maka

Operator if-then, atau ifmungkin pengendali yang paling biasa. Ungkapan "ya, tulis 1 jika" telah menjadi popular. Operator ifmempunyai struktur berikut:
if (bool_condition) {
	statement
}
Dalam reka bentuk ini:
  • bool_conditionialah 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)
Pembinaan ini boleh dibaca seperti ini:

Если (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 ifhanya 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 stringadalah sama dengan null.

jika-maka-lain

Jika, dalam keadaan biasa, ifprogram mempunyai pilihan: "untuk melakukan sesuatu atau tidak melakukan apa-apa," maka apabila if-elsememilih 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_statementialah 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)
Pembinaan ini boleh dibaca seperti ini:

Если (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 < 10benar (paras bateri kurang daripada 10), program akan mencetak satu teks. Jika tidak, jika syarat a < 10tidak 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 ifmenjadi 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 printStringSizepada 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: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Situasi boleh diterima apabila elseia 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
Bilangan syarat sedemikian tidak terhad. Setiap syarat mempunyai arahan sendiri:
  • pernyataan1
  • pernyataan2
  • pernyataanN
Setiap satu statementboleh 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 bold ifdengan 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 switchtidak 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, statementNadalah arahan yang perlu dilaksanakan jika argumentternyata sama dengan salah satu daripada value. Sebagai contoh, jika argumentia sama dengan value2, maka program akan melaksanakan statement2. defaultdan default_statementmerupakan "nilai lalai". Jika argumentia tidak sama dengan mana - mana yang dibentangkan value, maka cawangan akan dicetuskan defaultdan arahan akan dilaksanakan default_statement. defaultdan default_statementmerupakan 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 breakditinggalkan, dan struktur pengendali switch-caseakan 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 argumentia sama dengan value1, ia akan dilaksanakan statement1. Dan jika hujah adalah sama valueXdengan 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 dayOfWeeknilai SUNDAYsama ada SATURDAY. Jika ini berlaku, program memaparkan "Hari ini adalah hari cuti". Jika tidak, maka kita semak sama ada nilai pembolehubah adalah sama dengan dayOfWeeknilai 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
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION