Menu
CoddyTech

Thoát khỏi vòng lặp lồng nhau

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 2 trên 68.

Khi làm việc với các vòng lặp lồng nhau, câu lệnh break thông thường chỉ thoát khỏi vòng lặp trong cùng. Tuy nhiên, Go cung cấp nhãn cho phép bạn thoát trực tiếp khỏi các vòng lặp bên ngoài, giúp bạn kiểm soát chính xác các cấu trúc vòng lặp phức tạp.

Nhãn là một mã định danh theo sau bởi dấu hai chấm, được đặt trước vòng lặp. Sau đó, bạn có thể dùng break theo sau là tên nhãn để thoát khỏi vòng lặp cụ thể đó, ngay cả khi đang ở bên trong các vòng lặp lồng nhau.

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)
    }
}

Trong ví dụ này, khi điều kiện i == 1 && j == 1 được thỏa mãn, break outer thoát khỏi cả vòng lặp bên trong và bên ngoài ngay lập tức. Cách này đặc biệt hữu ích khi tìm kiếm trong các cấu trúc dữ liệu 2D và bạn muốn dừng hẳn việc tìm kiếm ngay khi tìm thấy thứ mình cần.

challenge icon

Thử thách

Dễ

Trong thử thách này, bạn sẽ luyện tập cách dùng câu lệnh break có nhãn để thoát khỏi các vòng lặp lồng nhau khi tìm kiếm trong một lưới 2D. Bạn cần tìm một số mục tiêu cụ thể trong lưới và dừng tìm kiếm ngay khi tìm thấy.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi biểu thị kích thước của lưới theo định dạng "rows,cols" (ví dụ: "3,4")
  • Một chuỗi biểu thị số mục tiêu cần tìm (ví dụ: "7")

Bạn được cung cấp lưới số 2D sau:

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

Nhiệm vụ của bạn là:

  1. Phân tích kích thước từ đầu vào thứ nhất để xác định số hàng và số cột cần tìm kiếm
  2. Phân tích số mục tiêu từ đầu vào thứ hai
  3. Dùng các vòng lặp lồng nhau với câu lệnh break có nhãn để tìm kiếm trong lưới
  4. Khi tìm thấy số mục tiêu, in ra "Found [target] at position ([row], [col])" và lập tức thoát khỏi cả hai vòng lặp bằng câu lệnh break có nhãn
  5. Nếu tìm kiếm xong mà không tìm thấy số mục tiêu, in ra "Target [target] not found"

Vị trí cần được báo cáo theo chỉ số bắt đầu từ 0 (hàng đầu tiên là 0, cột đầu tiên là 0).

Tự làm thử

    // TODO: Viết code bên dưới
    // Dùng các vòng lặp lồng nhau và break có nhãn để tìm giá trị cần tìm
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online