Keluar dari Perulangan Bersarang
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 2 dari 68.
Saat bekerja dengan perulangan bersarang, pernyataan break biasa hanya keluar dari perulangan terdalam. Namun, Go menyediakan label yang memungkinkan kamu keluar langsung dari perulangan luar, sehingga kamu dapat mengendalikan struktur perulangan yang kompleks dengan tepat.
Label adalah identifier yang diikuti titik dua dan kamu letakkan sebelum perulangan. Kamu kemudian dapat menggunakan break yang diikuti nama label untuk keluar dari perulangan tertentu itu, bahkan dari dalam perulangan bertingkat.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}Dalam contoh ini, saat kondisi i == 1 && j == 1 terpenuhi, break outer langsung keluar dari perulangan bagian dalam dan bagian luar. Ini sangat berguna saat mencari di dalam struktur data 2D, ketika kamu ingin menghentikan seluruh pencarian setelah menemukan yang kamu cari.
Tantangan
MudahDalam tantangan ini, kamu akan berlatih menggunakan pernyataan break berlabel untuk keluar dari perulangan bersarang saat menelusuri grid 2D. Kamu perlu menemukan angka target tertentu di dalam grid dan langsung berhenti mencari begitu menemukannya.
Kamu akan menerima dua input:
- String yang mewakili dimensi grid dengan format
"rows,cols"(misalnya,"3,4") - String yang mewakili angka target yang dicari (misalnya,
"7")
Kamu diberikan grid angka 2D berikut:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}Tugasmu adalah:
- Uraikan dimensi dari input pertama untuk menentukan jumlah baris dan kolom yang akan ditelusuri
- Uraikan angka target dari input kedua
- Gunakan perulangan bersarang dengan
breakberlabel untuk menelusuri grid - Saat menemukan angka target, cetak
"Found [target] at position ([row], [col])"dan langsung keluar dari kedua perulangan menggunakan break berlabel - Jika kamu menyelesaikan pencarian tanpa menemukan target, cetak
"Target [target] not found"
Posisi harus dilaporkan menggunakan indeks berbasis 0 (baris pertama adalah 0, kolom pertama adalah 0).
Coba sendiri
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Baca input
var dimensions string
var targetStr string
fmt.Scanln(&dimensions)
fmt.Scanln(&targetStr)
// Uraikan dimensi
dimParts := strings.Split(dimensions, ",")
rows, _ := strconv.Atoi(dimParts[0])
cols, _ := strconv.Atoi(dimParts[1])
// Uraikan angka target
target, _ := strconv.Atoi(targetStr)
// Grid yang sudah ditentukan
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}
// TODO: Tulis kodemu di bawah ini
// Gunakan perulangan bersarang dengan break berlabel untuk mencari target
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online