没有在lua中给出唯一的随机值

时间:2014-02-15 14:16:05

标签: lua corona

    local i = nil
    local randNum = nil
    local tableSize = nil
    local gap = 300
    local t = {1, 2, 3, 4, 5}
    local tableSize = 5


    for i=1,5,1 do
        randNum = t[mRandom(tableSize)] 
        table.remove(t, randNum)

        if randNum == 1 then
            pencilOne.x = 680 + (gap*i)
            pencilTwo.x = 680 + (gap*i)
        end
        if randNum == 2 then
            scissor.x = 680 + (gap*i)
        end
        if randNum == 3 then
            paperClip.x = 680 + (gap*i)
        end
        if randNum == 4 then
            inkPot.x = 680 + (gap*i)
        end
        if randNum == 5 then
            gum.x = 680 + (gap*i)
        end

        tableSize = tableSize - 1

    end

我试图在每次迭代后获得一个唯一的随机值。我正在使用table.remove技术来完成它。我不知道为什么它没有给我独特的随机值。亲切的,帮助。 :)

2 个答案:

答案 0 :(得分:4)

这些行从表中提取一个值,然后错误地使用值本身作为table.remove的索引:

    randNum = t[mRandom(tableSize)] 
    table.remove(t, randNum)

你真正想写的是:

    randIndex = mRandom(tableSize)
    randNum = t[randIndex]
    table.remove(t, randIndex)

答案 1 :(得分:2)

问题在于:

  

randNum = t [mRandom(tableSize)]

让我们假设在第一次迭代中你得到一个随机的1卷。 randNum值计算如下:

randNum = t[1]
randNum = 1

然后下一个语句从表中删除第二个条目。在这种情况下,表格变为:

  

t = {2,3,4,5}

在下一次迭代中,随机函数范围是1-4。让我们假设新的滚动数是4.现在randNum计算为:

randNum = t[4]
randNum = 5

下一个声明试图从表中删除第5个条目。哪个不存在。所以你的代码将无法正常工作。

为了解决问题,您可以使用以下代码更改随机数生成:

randSize = mRandom(tableSize)
randNum  = t[randSize]
table.remove(t, randSize)