JavaRush /Java Blog /Random-ID /Bercabang di Pulau Jawa

Bercabang di Pulau Jawa

Dipublikasikan di grup Random-ID
Pada artikel kali ini kita akan melihat konsep percabangan pada program komputer secara umum dan yang ditulis di Java. Mari kita bicara tentang struktur kendali seperti:
  • if-then(atau if)
  • if-then-else(atau if-else)
  • switch-case
Bercabang di Jawa - 1

Percabangan

Mari kita mulai dengan konsep dasar. Program apa pun adalah serangkaian perintah yang dijalankan oleh komputer. Paling sering, perintah dijalankan secara berurutan, satu demi satu. Sedikit lebih jarang (tetapi masih cukup sering) situasi muncul ketika Anda perlu mengubah aliran perintah program yang berurutan. Terkadang, tergantung pada kondisi tertentu, mungkin perlu menjalankan satu blok perintah, bukan yang lain. Dan ketika kondisi ini berubah, lakukan yang sebaliknya. Misalnya, ada sejumlah situs yang dilarang dikunjungi oleh orang di bawah usia 18 tahun. Biasanya, ketika pertama kali mengunjungi sumber tersebut, pengguna akan disambut dengan semacam formulir di mana pengguna diperingatkan tentang batasan usia dan diminta memasukkan tanggal lahirnya. Kemudian, tergantung pada data yang dimasukkan pengguna, dia akan diizinkan masuk ke sumber daya atau tidak. Fungsionalitas ini disediakan oleh apa yang biasa disebut percabangan. Mari kita beri analogi lain. Bayangkan diri kita berada di persimpangan tujuh jalan. Kita dihadapkan pada pilihan: belok kiri atau kanan, atau lurus. Pilihan kami didasarkan pada kondisi tertentu. Kami juga tidak mempunyai kesempatan untuk menempuh beberapa jalan sekaligus. Itu. tergantung pada beberapa kondisi, kita harus memilih satu jalan. Prinsip yang sama berlaku untuk percabangan. Sekarang mari kita coba memberikan definisi tentang percabangan. Percabangan adalah konstruksi algoritmik di mana, bergantung pada kebenaran suatu kondisi, salah satu dari beberapa rangkaian tindakan dilakukan. Percabangan diimplementasikan (kemungkinan besar) di semua bahasa pemrograman. Bahasa pemrograman Java memiliki beberapa konstruksi kontrol yang memungkinkan Anda mengimplementasikan percabangan dalam program Anda. Ada 3 konstruksi seperti itu dalam bahasa pemrograman:
  • Operatorif-then
  • Operatorif-then-else
  • Operator terner? :
Pada artikel ini kita akan melihat if-elsedan operator switch-case.

jika kemudian

Operator if-then, atau ifmungkin operator yang paling umum. Ungkapan “ya, tulis 1 jika” sudah menjadi populer. Operator ifmemiliki struktur berikut:
if (bool_condition) {
	statement
}
Dalam desain ini:
  • bool_conditionadalah ekspresi boolean yang bernilai benar atau salah. Ekspresi ini disebut kondisi.
  • statement— perintah (mungkin lebih dari satu) yang harus dijalankan jika kondisinya benar ( bool_statement==true)
Konstruksi ini dapat dibaca seperti ini:

Если (bool_condition), то {statement}
Berikut beberapa contohnya:
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 persentase daya baterai pada ponsel cerdasnya. Jika daya yang tersisa kurang dari 10 persen, program akan memperingatkan pengguna tentang perlunya mengisi daya ponsel cerdas. Ini adalah contoh desain yang paling sederhana if. Perlu dicatat bahwa jika variabel `a` lebih besar dari atau sama dengan 10, maka tidak akan terjadi apa-apa. Program akan terus mengeksekusi kode setelahnya if. Perhatikan juga bahwa dalam kasus ini, konstruksi ifhanya memiliki satu urutan tindakan untuk dijalankan: mencetak teks, atau tidak melakukan apa pun. Ini adalah variasi percabangan dengan satu “cabang”. Hal ini terkadang diperlukan. Misalnya saja ketika kita ingin melindungi diri dari nilai-nilai yang salah. Misalnya, kita tidak dapat mengetahui jumlah huruf dalam sebuah string jika string tersebut null. Contoh di bawah ini:
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());
    }
}
Sebagai hasil dari mengeksekusi metode utama, berikut ini akan menjadi output ke konsol:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Berkat pemeriksaan itu string != null, kami dapat menghindari kesalahan dalam program. Dan tidak melakukan apa pun jika variabelnya stringsama dengan null.

jika-maka-lainnya

Jika, dalam kondisi normal, ifsuatu program mempunyai pilihan: “melakukan sesuatu atau tidak melakukan apa pun”, maka ketika if-elsememilih suatu program, pilihannya adalah “melakukan satu atau lain hal”. Opsi “tidak melakukan apa pun” menghilang. Ada dua atau lebih varian eksekusi (atau jumlah cabang) dengan jenis percabangan ini. Mari kita pertimbangkan kasus ketika ada dua pilihan. Maka struktur kendalinya memiliki bentuk sebagai berikut:
if (bool_condition) {
	statement1
} else {
	statement2
}
Di Sini:
  • bool_statementadalah ekspresi boolean yang bernilai benar atau salah. Ekspresi ini disebut kondisi.
  • statement1— perintah (mungkin lebih dari satu) yang harus dijalankan jika kondisinya benar ( bool_statement==true)
  • statement2— perintah (mungkin lebih dari satu) yang harus dijalankan jika kondisinya salah ( bool_statement==false)
Konstruksi ini dapat dibaca seperti ini:

Если (bool_condition), то {statement1}
Иначе {statement2}
Berikut ini contohnya:
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 level baterai pada smartphone. Hanya jika terakhir kali program hanya memperingatkan tentang perlunya mengisi daya ponsel cerdas, kali ini kami mendapat pemberitahuan tambahan. Mari kita lihat yang ini if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Jika a < 10benar (level baterai kurang dari 10), program akan mencetak satu teks. Jika tidak, jika kondisi a < 10tidak terpenuhi, program akan menampilkan teks yang sangat berbeda. Mari kita selesaikan juga contoh kedua kita, di mana kita menampilkan jumlah huruf dalam satu baris. Terakhir kali program tidak mengeluarkan apa pun jika string yang diteruskan sama dengan null. Mari kita perbaiki dengan mengubah yang normal 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 metodenya , kami menambahkan satu blok printStringSizeke konstruksi . Sekarang, jika kita menjalankan program, maka output ke konsol bukan 2 baris, tetapi 4, meskipun input (metode ) tetap sama seperti terakhir kali. Teks yang akan dihasilkan program: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Situasi dapat diterima jika elsediikuti bukan oleh perintah eksekusi, tetapi oleh perintah lain if. Kemudian konstruksinya mengambil bentuk sebagai berikut:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Desain ini memiliki beberapa syarat:
  • bo_kondisi1
  • bo_kondisi2
  • bo_kondisiN
Jumlah kondisi tersebut tidak terbatas. Setiap kondisi memiliki perintahnya sendiri:
  • pernyataan1
  • pernyataan2
  • pernyataanN
Masing-masing statementdapat berisi 1 atau lebih baris kode. Kondisinya diperiksa satu per satu. Setelah kondisi pertama yang benar ditentukan, serangkaian perintah yang “terikat” dengan kondisi sebenarnya akan dijalankan. Setelah menjalankan perintah ini, program akan keluar dari blok if, meskipun ada pemeriksaan lebih lanjut di depan. Ekspresi “pernyataanN+1” akan dieksekusi jika tidak ada kondisi yang ditentukan di atas yang benar. Konstruksi ini dapat dibaca seperti ini:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Baris terakhir dalam hal ini adalah opsional. Anda bisa melakukannya tanpa yang terakhir kesepian else. Dan kemudian desainnya akan berbentuk sebagai berikut:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
Dan akan terbaca seperti ini:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Oleh karena itu, jika tidak ada kondisi yang benar, maka tidak ada satu perintah pun yang akan dijalankan. Mari beralih ke contoh. Mari kita kembali ke situasi dengan tingkat pengisian daya pada ponsel cerdas. Mari kita menulis sebuah program yang akan memberi tahu pemilik lebih detail tentang tingkat pengisian daya perangkatnya:
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);
    }
}
Misalnya, dalam kasus ini, jika pengguna memasukkan 15, program akan menampilkan di layar: “Saatnya mengingat di mana pengisi daya berada.” Terlepas dari kenyataan bahwa 15 lebih kecil dan 30 dan 50 dan 75 dan 100, output di layar hanya akan menjadi 1. Mari kita tulis aplikasi lain yang akan mencetak ke konsol hari apa dalam seminggu:
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("Сегодня суббота");
    }
}
Memang nyaman, tentu saja, tetapi banyaknya teks monoton sedikit membuat mata Anda terpesona. Dalam situasi di mana kita memiliki banyak pilihan, lebih baik menggunakan operator, yang akan dibahas di bawah.

saklar-kasus

Alternatif untuk huruf tebal ifdengan banyak cabang adalah operator switch-case. Operator ini sepertinya mengatakan “Jadi, kita memiliki variabel ini. Lihat, jika nilainya sama dengan `x`, maka kita lakukan ini dan itu, jika nilainya sama dengan `y`, maka kita melakukannya secara berbeda, dan jika tidak sama dengan salah satu cara di atas, kita lakukan saja seperti ini…” Operator ini memiliki struktur sebagai berikut.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Mari kita lihat struktur ini lebih detail. argument adalah variabel yang nilainya akan kita bandingkan dengan pilihan hipotetis yang berbeda. Variabelnya harus final. Perlu juga dikatakan bahwa operator switchtidak mendukung tipe data apa pun sebagai argumen. Jenis yang valid tercantum di bawah ini:
  • byte dan byte
  • pendek dan pendek
  • int dan Integer
  • karakter dan Karakter
  • enum
  • Rangkaian
case value1 (value2, valueN)- ini adalah nilai, konstanta spesifik yang dengannya kita membandingkan nilai suatu variabel argument. Selain itu, setiap kasus menentukan serangkaian perintah yang perlu dijalankan. statement1, statement2, statementNadalah perintah yang perlu dijalankan jika argumentternyata sama dengan salah satu dari value. Misalnya, jika argumentsama dengan value2, maka program akan dijalankan statement2. defaultdan default_statementmerupakan "nilai default". Jika argumenttidak sama dengan salah satu yang disajikan value, maka cabang akan terpicu defaultdan perintah akan dijalankan default_statement. defaultdan default_statementmerupakan atribut opsional dari operator switch-case. break— Anda dapat melihat bahwa di akhir setiap blok kasus terdapat pernyataan break. Operator ini juga opsional dan berfungsi untuk membedakan kode kasus yang berbeda. Terkadang perlu untuk melakukan tindakan yang sama dalam kasus yang berbeda: maka kasus ini dapat digabungkan. Dalam hal ini, kata kunci breakdihilangkan, dan struktur operator switch-caseakan terlihat seperti ini:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
Perlu dicatat bahwa tidak ada operator antara `case valueX:` dan `case valueY:` break. Di sini, jika argumentsama dengan value1, maka akan dieksekusi statement1. Dan jika argumen sama valueXdengan keduanya valueY, statementXY. Mari kita encerkan teori yang sulit dipahami menjadi praktik yang mudah dipahami. Mari kita tulis ulang contoh 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 menulis sebuah program yang menampilkan apakah hari ini adalah hari kerja atau akhir pekan dengan 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;

    }
}
Izinkan saya menjelaskan sedikit. Dalam program ini kita mendapatkan enum DayOfWeek, yang menunjukkan hari saat ini dalam seminggu. Selanjutnya, kita melihat apakah nilai variabel kita sama dengan dayOfWeeknilai SUNDAYkeduanya SATURDAY. Jika hal ini terjadi, program akan menampilkan “Hari ini adalah hari libur.” Jika tidak, maka kita periksa apakah nilai variabelnya sama dengan dayOfWeeknilai FRIDAY. Jika hal ini terjadi, program akan menampilkan “Besok adalah hari libur.” Jika dalam hal ini tidak ada, maka kita mempunyai beberapa pilihan, hari yang tersisa adalah hari kerja, jadi secara default, jika hari ini BUKAN Jumat, BUKAN Sabtu dan BUKAN Minggu, program akan menampilkan “Hari ini adalah hari kerja.”

Kesimpulan

Nah, pada artikel kali ini kita membahas apa itu percabangan dalam program komputer. Kami juga mengetahui struktur kontrol apa yang digunakan untuk mengimplementasikan percabangan di Java. Kami mendiskusikan desain seperti:
  • if-then
  • if-then-else
  • switch-case
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION