当我尝试自己排序时,我会在数字和零之间进行比较

Rax*_*axe 2 sorting null lua compare numbers

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()
Run Code Online (Sandbox Code Playgroud)

这不行!最初的想法是打印声明为'taula'的表,但是在函数organizationalArray()中,if中存在一个问题,它表示当我声明了j和i变量时,我将数字与nil值进行比较.我需要帮助.

小智 5

当你正在改变阵列时,你正在引用tala[tmp]而不是tmp(在第27行).这就是造成这个错误的原因.

几点建议:

  • 你正在使用全局变量.当全局碰撞时(即tmp可以设置为某个东西,并且你用它做某事),这可能导致后来的麻烦.请参阅:局部变量和块

  • 使用randomNumber()会使您的代码变得模糊,因为randomNumber只是一个别名math.random(100).

  • Lua开始1,而不是0.你可以从头开始0,但这只是要记住的事情.#table不会计算指数0.

  • 在提问时,请提供完整的错误消息 - 这将让我们看看代码而无需自己运行:)

  • 您可以print(x)输入代码,这样您就可以看到正在发生的事情.这会帮助你找到错误,因为你知道发生了什么.