Random 函数NameGen():尝试将nil与number进行比较

Random 函数NameGen():尝试将nil与number进行比较,random,lua,Random,Lua,我得到的错误是 [string "function NameGen()..."]:14: attempt to compare nil with number stack traceback: [string "function NameGen()..."]:14: in function 'NameGen' [string "function NameGen()..."]:23: in main chunk [C]: ? 我的代码: function NameGen(

我得到的错误是

[string "function NameGen()..."]:14: attempt to compare nil with number
stack traceback:
    [string "function NameGen()..."]:14: in function 'NameGen'
    [string "function NameGen()..."]:23: in main chunk
    [C]: ?
我的代码:

function NameGen()
  preftest = math.random(100) ;
  syltest = math.random(100) ;
  sufftest = math.random(100) ;
  pref1 = "New ";
  _1syl1 = "Lon";
  _2syl1 = "Don";
  suff1 = " City";
  prefchoice = pref1;
  _1sylchoice = _1syl1;
  _2sylchoice = _2syl;
  suffchoice = suff1;

  if preftest < 50 and _2syltest < 50 and sufftest < 50 then 
    cityname = prefchoice .. _1sylchoice .. _2sylchoice .. suffchoice;
  elseif preftest < 50 and _2syltest < 50 then
    cityname = prefchoice .. _1sylchoice .. _2sylchoice;
  else
    cityname = _1sylchoice;
  end
end
NameGen();
print(cityname);
函数名gen()
预测试=数学随机(100);
syltest=数学随机(100);
测试=数学随机(100);
pref1=“新建”;
_1syl1=“Lon”;
_2syl1=“Don”;
suff1=“城市”;
prefchoice=pref1;
_1sylchoice=_1syl1;
_2sylchoice=2syl;
suffchoice=suff1;
如果预测试<50且 2syltest<50且sufftest<50,则
cityname=prefchoice_1.选择_2.选择。。选择权;
如果预试验<50,则试验<50
cityname=prefchoice_1.选择_2.选择;
其他的
cityname=_1sylchoice;
结束
结束
NameGen();
印刷品(城市名称);

我不知道在哪里分配了
\u 2syltest
——只有
syltest
。如果
\u 2syltest
不是来自其他地方,这可能是问题所在,因为这是If中使用该值的条件。

从代码的结构来看,您似乎希望在
If
elseif
条件中同时使用
syltest<50
,而不是使用
\u 2sylthoice<50
。此外,您的意思可能是
\u 2sylchoice=\u 2syl1
(这里的输入错误?)

看看这是不是你的意思:

function NameGen()
  preftest = math.random(100) 
  syltest = math.random(100) 
  sufftest = math.random(100)
  pref1 = "New "
  _1syl1 = "Lon"
  _2syl1 = "Don";
  suff1 = " City"
  prefchoice = pref1
  _1sylchoice = _1syl1
  _2sylchoice = _2syl1
  suffchoice = suff1

  if preftest < 50 and syltest < 50 and sufftest < 50 then
    cityname = prefchoice .. _1sylchoice .. _2sylchoice .. suffchoice
  elseif preftest < 50 and syltest < 50 then
    cityname = prefchoice .. _1sylchoice .. _2sylchoice
  else
    cityname = _1sylchoice
  end
end

for i = 1, 100 do
    NameGen()
    print(cityname)
end
函数名gen()
预测试=数学随机(100)
syltest=数学随机(100)
测试=数学随机(100)
pref1=“新建”
_1syl1=“Lon”
_2syl1=“Don”;
suff1=“城市”
prefchoice=pref1
_1sylchoice=\u 1syl1
_2sylchoice=_2syl1
suffchoice=suff1
如果预测试<50,syltest<50,sufftest<50,则
cityname=prefchoice_1.选择_2.选择。。选择权
elseif preftest<50,syltest<50则
cityname=prefchoice_1.选择_2sylchoice
其他的
cityname=\u 1sylchoice
结束
结束
当i=1100时,do
NameGen()
打印(城市名称)
结束

另一方面,您使用的全局变量太多了。您使用的所有变量都应该是本地变量,除非您有强烈的理由这样做(虽然我没有更改代码的这一方面,以免在您不知道我在说什么的情况下混淆您)。

请修复您的缩进快速提示,您不需要所有这些分号。这不是C。
如果你需要睡眠,那么sleep()end
bugs=不睡眠和更多或更少的bugs
(作为电视广告主),请不要在睡眠剥夺的影响下驱动或操作堆栈溢出。因此,这就是睡眠。谢谢!