Lua 支援多種迴圈結構,且允許任意類型迴圈相互嵌套(for 在 while 中、while 在 repeat 中等)。本文詳細說明三種迴圈的巢狀語法與實用範例。
for init1, limit1, step1 do
for init2, limit2, step2 do
-- 內層迴圈主體
statement(s)
end
-- 外層迴圈主體(內層結束後)
statement(s)
end
while condition1 do
while condition2 do
statement(s)
end
statement(s)
end
repeat
statement(s)
repeat
statement(s)
until condition2
until condition1
break 僅跳出 最內層 迴圈,若需跳出多層需配合標記變數或 goto(Lua 5.2+)。-- 使用巢狀 for 迴圈實作試除法
print("2 到 100 的質數:")
for i = 2, 100 do
local isPrime = true
-- 內層迴圈檢測因數,只需檢查到 sqrt(i)
for j = 2, math.floor(math.sqrt(i)) do
if i % j == 0 then
isPrime = false
break -- 跳出內層迴圈
end
end
if isPrime then
io.write(i .. " ")
end
end
print() -- 換行
-- 輸出:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
print("九九乘法表:")
for i = 1, 9 do
for j = 1, i do
io.write(string.format("%dx%d=%2d ", j, i, i*j))
end
print() -- 每行結束換行
end
local limit = 100
local isPrime = {}
for i = 2, limit do isPrime[i] = true end
local i = 2
while i * i <= limit do
if isPrime[i] then
local j = i * i
while j <= limit do
isPrime[j] = false
j = j + i
end
end
i = i + 1
end
print("質數列表:")
for i = 2, limit do
if isPrime[i] then io.write(i .. " ") end
end
-- repeat-until 至少執行一次,適合「先做後判斷」場景
local sum = 0
local n = 1
repeat
sum = sum + n
n = n + 1
until n > 10
print("1+2+...+10 = " .. sum) -- 55
-- 巢狀 repeat:輸出三角形圖案
local row = 1
repeat
local col = 1
repeat
io.write("*")
col = col + 1
until col > row
print()
row = row + 1
until row > 5
local,減少全域表查找開銷。break,避免無效迭代。Lua 的巢狀迴圈語法靈活、類型可混合,核心在於理解各迴圈的終止條件與 break 的作用範圍。實務開發中,配合 local 變數與適當演算法(如篩法優於試除法),能編寫高效且可維護的迴圈邏輯。