Tiếp tục một vòng lặp cụ thể
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 3 trên 68.
Cũng như bạn có thể dùng nhãn với break để thoát khỏi các vòng lặp cụ thể, Go cũng cho phép bạn dùng nhãn với câu lệnh continue. Câu lệnh continue có nhãn bỏ qua lần lặp hiện tại của vòng lặp được chỉ định và chuyển sang lần lặp tiếp theo.
Điều này đặc biệt hữu ích trong các vòng lặp lồng nhau khi bạn muốn bỏ qua phần còn lại của lần lặp hiện tại trong vòng lặp bên ngoài từ bên trong vòng lặp bên trong, thay vì chỉ tiếp tục vòng lặp bên trong.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}Trong ví dụ này, khi i == 1 && j == 0, câu lệnh continue outer bỏ qua phần còn lại của lần lặp hiện tại trong vòng lặp ngoài, bao gồm cả vòng lặp trong và thông báo "End of outer loop iteration". Sau đó, chương trình chuyển thẳng sang lần lặp tiếp theo của vòng lặp ngoài, khi i trở thành 2.
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 continue có nhãn để điều khiển việc thực thi các vòng lặp lồng nhau. Bạn đang xây dựng một hệ thống xử lý dữ liệu cần bỏ qua một số lần lặp của vòng lặp bên ngoài dựa trên các điều kiện tìm thấy trong vòng lặp bên trong.
Bạn sẽ nhận được hai đầu vào:
- Một chuỗi biểu thị số hàng cần xử lý (ví dụ:
"4") - Một chuỗi biểu thị số dùng làm điều kiện bỏ qua (ví dụ:
"3")
Bạn được cung cấp mảng dữ liệu 2D sau:
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
}Nhiệm vụ của bạn là:
- Phân tích số hàng từ đầu vào thứ nhất để xác định số hàng cần xử lý
- Phân tích số dùng làm điều kiện bỏ qua từ đầu vào thứ hai
- Dùng các vòng lặp lồng nhau với câu lệnh
continuecó nhãn để xử lý dữ liệu - Với mỗi hàng, kiểm tra giá trị của từng cột trong hàng đó
- Nếu tìm thấy số dùng làm điều kiện bỏ qua ở bất kỳ cột nào của một hàng, hãy dùng câu lệnh
continuecó nhãn để bỏ qua phần xử lý còn lại của hàng đó và chuyển sang hàng tiếp theo - Với những hàng không chứa số dùng làm điều kiện bỏ qua, in ra
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Với những hàng có chứa số dùng làm điều kiện bỏ qua, in ra
"Skipping row [row_number] due to condition"
Số hàng cần được báo cáo bằng chỉ số bắt đầu từ 0 (hàng đầu tiên là 0). Chỉ xử lý số hàng được chỉ định trong đầu vào thứ nhất và chỉ kiểm tra 5 cột đầu tiên của mỗi hàng.
Tự làm thử
package main
import (
"fmt"
"strconv"
)
func main() {
// Đọc đầu vào
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Phân tích đầu vào
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Mảng dữ liệu hai chiều có sẵn
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
}
// TODO: Viết code bên dưới
// Dùng các vòng lặp lồng nhau với continue có nhãn để xử lý dữ liệu
// Kiểm tra từng hàng xem có chứa số dùng làm điều kiện bỏ qua không
// In ra thông báo phù hợp tùy theo có tìm thấy giá trị thỏa điều kiện hay không
}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
1Luồng điều khiển nâng cao
Switch với `fallthrough`Thoát khỏi vòng lặp lồng nhauTiếp tục một vòng lặp cụ thểCâu lệnh `goto`Ôn tập: điều khiển vòng lặp nâng cao4Dự án: Danh sách việc cần làm đơn giản
Thiết lập dự ánThêm một việc cần làm2Struct và phương thức
Định nghĩa phương thức cho structReceiver giá trịReceiver con trỏChọn receiverPhương thức và hàmÔn tập: hành vi của struct5Tìm hiểu chuyên sâu về map
Map chứa structCon trỏ làm giá trị của mapKiểm tra map nilSo sánh các mapÔn tập: bộ đếm tần suất từ8Dự án: Quản lý hàng tồn kho đơn giản
Tổng quan dự ánKiểm tra hàng tồn kho3Interface (cơ bản)
Interface là gì?Định nghĩa interfaceTriển khai interfaceDùng kiểu interfaceInterface rỗngKhẳng định kiểuType switchÔn tập: hình dạng và hành viTự luyện tập: Trình biên dịch Go online