首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Lua 巢狀迴圈語法與範例:for、while、repeat-until 多層嵌套詳解

     編輯:Java 相關知識

前言

Lua 支援多種迴圈結構,且允許任意類型迴圈相互嵌套(for 在 while 中、while 在 repeat 中等)。本文詳細說明三種迴圈的巢狀語法與實用範例。

巢狀迴圈語法模板

1. 巢狀 for 迴圈

for init1, limit1, step1 do
    for init2, limit2, step2 do
        -- 內層迴圈主體
        statement(s)
    end
    -- 外層迴圈主體(內層結束後)
    statement(s)
end

2. 巢狀 while 迴圈

while condition1 do
    while condition2 do
        statement(s)
    end
    statement(s)
end

3. 巢狀 repeat-until 迴圈

repeat
    statement(s)
    repeat
        statement(s)
    until condition2
until condition1

關鍵特性

  • 任意組合:外層 for 可嵌套內層 while,反之亦然;repeat 同理。
  • 變數作用域:迴圈變數(如 for 的控制變數)在迴圈結束後自動釋放,不洩漏到外部。
  • break 機制:break 僅跳出 最內層 迴圈,若需跳出多層需配合標記變數或 goto(Lua 5.2+)。

實戰範例:尋找 2~100 以內的質數

-- 使用巢狀 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

while 版質數篩選(埃拉托斯特尼篩法簡化版)

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 特性示範

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

效能與風格建議

  • 優先使用 for:計數迴圈語意最清晰,效能最佳(JIT 優化友善)。
  • 避免過深嵌套:超過 3 層建議拆分函式,降低認知負荷。
  • 局部變數:迴圈內頻繁使用的值儲存為 local,減少全域表查找開銷。
  • break 優化:內層迴圈盡早 break,避免無效迭代。

總結

Lua 的巢狀迴圈語法靈活、類型可混合,核心在於理解各迴圈的終止條件與 break 的作用範圍。實務開發中,配合 local 變數與適當演算法(如篩法優於試除法),能編寫高效且可維護的迴圈邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved