Memecah Loop Bersarang

1. Ikhtisar

Dalam tutorial ini, kami akan membuat beberapa contoh untuk menunjukkan berbagai cara menggunakan break dalam loop. Selanjutnya, kita juga akan melihat bagaimana menghentikan sebuah loop tanpa menggunakan break sama sekali.

2. Masalah

Loop bersarang sangat berguna, misalnya untuk mencari dalam daftar daftar.

Salah satu contohnya adalah daftar siswa, di mana setiap siswa memiliki daftar kursus yang direncanakan. Katakanlah kita ingin mencari nama satu orang yang merencanakan kursus 0 .

Pertama, kami akan mengulang daftar siswa. Kemudian, di dalam lingkaran itu, kami akan mengulang daftar kursus yang direncanakan.

Ketika kami mencetak nama siswa dan mata kuliah kami akan mendapatkan hasil sebagai berikut:

student 0 course 0 course 1 student 1 course 0 course 1

Kami ingin menemukan siswa pertama yang merencanakan kursus 0 . Namun jika kita hanya menggunakan loop maka aplikasi akan terus mencari setelah kursus ditemukan.

Setelah kami menemukan seseorang yang merencanakan kursus tertentu, kami ingin berhenti mencari. Melanjutkan pencarian akan membutuhkan lebih banyak waktu dan sumber daya sementara kami tidak membutuhkan informasi tambahan. Itulah mengapa kami ingin keluar dari loop bersarang.

3. Istirahat

Opsi pertama kita harus keluar dari loop bersarang adalah dengan menggunakan pernyataan break :

String result = ""; for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { break; } } } return result;

Kami memiliki loop luar dan loop dalam, kedua loop memiliki dua iterasi. Jika penghitung loop dalam sama dengan 0 kita menjalankan perintah break . Saat kita menjalankan contoh, maka akan muncul hasil sebagai berikut:

outer0inner0outer1inner0

Atau kita bisa menyesuaikan kodenya agar lebih mudah dibaca:

outer 0 inner 0 outer 1 inner 0

Apakah ini yang kita inginkan?

Hampir, loop dalam diakhiri oleh pernyataan break setelah 0 ditemukan. Namun, loop luar terus berlanjut, yang bukan itu yang kita inginkan. Kami ingin menghentikan pemrosesan sepenuhnya segera setelah kami mendapatkan jawabannya.

4. Istirahat Berlabel

Contoh sebelumnya adalah langkah ke arah yang benar, tetapi kami perlu sedikit meningkatkannya. Kita dapat melakukannya dengan menggunakan jeda berlabel :

String result = ""; myBreakLabel: for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { break myBreakLabel; } } } return result;

Sebuah label istirahat akan mengakhiri loop luar bukan hanya loop batin. Kami mencapai itu dengan menambahkan myBreakLabel di luar loop dan mengubah pernyataan break untuk menghentikan myBreakLabel . Setelah kita menjalankan contoh kita mendapatkan hasil sebagai berikut:

outer0inner0

Kita dapat membacanya sedikit lebih baik dengan beberapa format:

outer 0 inner 0

Jika kita melihat hasilnya, kita dapat melihat bahwa loop dalam dan loop luar diakhiri, itulah yang ingin kita capai.

5. Kembali

Sebagai alternatif, kita juga bisa menggunakan pernyataan return untuk langsung mengembalikan hasil ketika ditemukan:

String result = ""; for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { return result; } } } return "failed";

Label dihapus dan pernyataan istirahat diganti dengan pernyataan kembali .

Ketika kami menjalankan kode di atas, kami mendapatkan hasil yang sama seperti untuk jeda berlabel. Perhatikan bahwa agar strategi ini bekerja, kita biasanya perlu memindahkan blok loop ke metodenya sendiri.

6. Kesimpulan

Jadi, kita baru saja melihat apa yang harus dilakukan ketika kita perlu keluar lebih awal dari perulangan, seperti ketika kita menemukan item yang kita cari. Kata kunci break berguna untuk loop tunggal, dan kita dapat menggunakan break berlabel s untuk loop bersarang.

Alternatifnya, kita bisa menggunakan pernyataan return . Menggunakan return membuat kode lebih mudah dibaca dan tidak terlalu rentan terhadap kesalahan karena kita tidak perlu memikirkan perbedaan antara jeda yang tidak berlabel dan berlabel.

Jangan ragu untuk melihat kode di GitHub.