2014-02-16 97 views
1

我正在進行一種「測驗」,我希望腳本從表格中隨機選擇一個問題。沒有錯誤,但是當我運行腳本時,沒有任何東西被打印出來。似乎for循環只是越過了。我在做一些愚蠢的事情嗎?謝謝你的幫助。Lua表錯誤?

local Questions = { 
Q1 = {"What is the magic word?", "lotion"}, --Q, A 
Q2 = {"Does anyone love you?", "no"} 
} 

for i = 1, #Questions do 
local number = math.random(1, #Questions) 
local q = Questions["Q" .. number][1] 
local a = Questions["Q" .. number][2] 
print("HI") 
print(q .. a) 
end 

io.read() 

回答

2

#的操作者僅在有效的序列,即,與12,等等索引的數組狀表。但是你的表Questions不是一個序列。你可以這樣說:

local Questions = { 
    {"What is the magic word?", "lotion"}, --Q, A 
    {"Does anyone love you?", "no"} 
} 

for i = 1, #Questions do 
    local number = math.random(1, #Questions) 

    local q = Questions[number][1] 
    local a = Questions[number][2] 
    print("HI") 
    print(q .. a) 
end 
2

其原因,這是發生是因爲長操作(#)沒有爲表與不是從1開始從documentation序列索引定義:

除非給出了一個__len元方法,否則表t的表的長度僅在表是一個序列時定義,也就是說,對於某個整數n,其正數字鍵集合等於{1..n}。在那種情況下,n是它的長度。

要解決你的代碼,你可以簡單地刪除你的桌子上鍵 「Q」 前綴:

local Questions = { 
    {"What is the magic word?", "lotion"}, --Q, A 
    {"Does anyone love you?", "no"} 
} 

for i = 1, #Questions do 
    local number = math.random(1, #Questions) 
    local q = Questions[number][1] 
    local a = Questions[number][2] 
    print("HI") 
    print(q .. a) 
end 
+0

謝謝!現在它工作正常。 – user3314993

+1

@ user3314993:很高興聽到它!如果可以,請記住[標記接受的答案](http://stackoverflow.com/help/someone-answers)。 –