Vòng lặp lồng nhau
Thuộc phần Kiến thức nền tảng trong hành trình Ruby của Coddy. Bài học 46 trên 88.
Bạn có thể đặt một vòng lặp bên trong vòng lặp khác để tạo thành vòng lặp lồng nhau. Vòng lặp bên trong chạy hết một lượt trong mỗi lần lặp của vòng lặp bên ngoài, nên cách này rất hữu ích khi làm việc với lưới, bảng hoặc các tổ hợp.
rows = 2
cols = 3
for i in 1..rows
for j in 1..cols
puts "i=#{i}, j=#{j}"
end
endLệnh này in ra sáu dòng. Với mỗi giá trị của i, vòng lặp bên trong chạy qua tất cả các giá trị của j.
Đầu tiên, i là 1 trong khi j lần lượt nhận các giá trị 1, 2, 3. Sau đó, i trở thành 2 và j lại lần lượt nhận các giá trị 1, 2, 3. rows và cols không bao giờ thay đổi: chúng chỉ cho các vòng lặp biết khi nào cần dừng.
Một ví dụ thực tế là tạo một mẫu phép nhân đơn giản:
for row in 1..3
for col in 1..3
print "#{row * col} "
end
puts ""
endLệnh này in ra một lưới sản phẩm 3x3. print giữ các giá trị trên cùng một dòng, còn puts "" chuyển sang dòng mới sau khi hoàn thành mỗi hàng. Bạn cũng có thể kết hợp các kiểu vòng lặp khác nhau, chẳng hạn như đặt vòng lặp times bên trong vòng lặp for.
Thử thách
DễĐọc hai số nguyên từ đầu vào:
rows- số hàngcols- số cột
Dùng các vòng lặp lồng nhau để in một hình chữ nhật gồm các dấu hoa thị (*) với kích thước đã cho. Mỗi hàng cần có cols dấu hoa thị, cách nhau bằng dấu cách, và mỗi hàng nằm trên một dòng riêng.
Dùng print để in các dấu hoa thị trong một hàng và dùng puts để chuyển sang dòng tiếp theo sau mỗi hàng.
Ví dụ, nếu đầu vào là 3 và 4, đầu ra sẽ là:
* * * *
* * * *
* * * *Nếu đầu vào là 2 và 5, đầu ra sẽ là:
* * * * *
* * * * *Không có dấu cách sau dấu * cuối cùng của một hàng.
Dùng một biến đếm mới cho mỗi vòng lặp, ví dụ row cho các hàng và col cho các dấu hoa thị trong một hàng, rồi so sánh biến đó với rows hoặc cols. Đừng thay đổi chính rows và cols: mỗi hàng cần dùng lại cols.
Tự làm thử
# Đọc đầu vào (input)
rows = gets.to_i
cols = gets.to_i
# TODO: Viết code của bạn bên dưới
# Dùng các vòng lặp (loop) lồng nhau để in ra một hình chữ nhật bằng dấu sao
# Dùng print để in các dấu sao trên cùng một hàng và puts để chuyển sang dòng tiếp theoBà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 Kiến thức nền tảng
4Toán tử phần 2
Toán tử logic phần 1Toán tử logic phần 2Ôn tập: logic đơn giảnToán tử logic phần 3Toán tử logic phần 42Biến và kiểu dữ liệu
Số và biếnKiểu dữ liệu chuỗiKiểu dữ liệu BooleanKiểu dữ liệu SymbolKiểm tra kiểu dữ liệuQuy ước đặt tênÔn tập: tạo biến8Vòng lặp
Vòng lặp for với khoảng giá trịVòng lặp whileThoátTiếp tụcÔn tập: giai thừaVòng lặp timesVòng lặp untilVòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcToán tử moduloPhép tính số học rút gọnÔn tập: Toán cơ bảnToán tử so sánh6Nhập xuất cơ bản
In ra bằng putsIn ra bằng print và pIn ra bằng biếnNhập dữ liệu bằng getsPhương thức chompChuyển đổi kiểu dữ liệuÔn tập: Tính tuổiÔn tập: Đúng hay sai9Phương thức
Định nghĩa phương thứcTham số phương thứcGiá trị trả vềÔn tập: phương thức SigmaÔn tập: phương thức xác thựcGiá trị tham số mặc định15Theo dõi chi tiêu hằng ngày
Tổng quan dự ánThoát chương trìnhTự luyện tập: Trình biên dịch Ruby online