当我试图自己对一个表进行排序时,我不断收到一个数字和nil之间的比较。

taula = {};

function randomNumber()
  return math.random(100);
end

function startArray()
    for x=0, 10 do
        taula[x]=randomNumber();
    end
end

function printArray()
    for i=0,#taula do
        print(taula[i]);
    end
end

function organizeArray()
   for i=0,#taula do
        for j=1,#taula do
            if taula[i]>taula[j] then
                tmp = taula[j];
                taula[j]=taula[i];
                taula[i]=taula[tmp];
            end
        end
    end
end

startArray()  //开始数组
organizeArray()  //整理数组
printArray()  //打印数组

这段代码有问题!最初的想法是将声明为'taula'的表打印出来,但在函数organizeArray()中,如果条件判断出现问题,因为当我已经声明了i和j变量时,它说我将一个数字与nil值进行比较。我需要帮助。

点赞
用户2698261
用户2698261

你在将数组打乱时,在第27行引用了tala[tmp],而不是tmp,这就是导致程序出错的原因。

几个指针:

  • 你为一切使用了全局变量。这可能会在以后导致头痛,当全局变量发生冲突时(例如tmp可能会被设置为某些内容,而你却对它进行某些操作)。参见:本地变量和块

  • 使用randomNumber()会使你的代码有点不清晰,因为randomNumber只是math.random(100)的别名。

  • Lua从1开始,而不是0。你可以从0开始,但这只是要记住的一件事。#table不会将索引0计入其中。

  • 当询问问题时,请提供完整的错误消息--这让我们可以查看代码,而无需自己运行。

  • 你可以在代码中加入print(x),这样你就可以看到正在发生的事情。这将帮助你找到bugs,因为你知道发生了什么。

2014-07-31 10:33:57