【问题标题】:Not giving unique random value in lua没有在lua中给出唯一的随机值
【发布时间】:2014-02-15 14:16:04
【问题描述】:
    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 技术来完成它。我不知道为什么它没有给我唯一的随机值。好心,帮助。 :)

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

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

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

    你真正想写的是:

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

      • 感谢猎人搜索者的详细回复。得到了错误。 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2012-12-01
      相关资源
      最近更新 更多