4

私が得ているエラーは

[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);
4

2 に答える 2

5

_2syltestが割り当てられている場所がわかりません-- だけsyltestです。if_2syltestが他の場所から来ていない場合、それが問題になる可能性があります。これは、 if がその値を使用する条件であるためです。

于 2013-09-13T04:13:22.097 に答える
0

syltest < 50コードの構造から、 との両方ifの条件で使用したかったようですがelseif、代わりに_2sylchoice < 50. さらに、おそらくあなたは_2sylchoice = _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

余談ですが、あまりにも多くのグローバル変数を使用しています。特別な理由がない限り、使用するすべての変数はローカル変数にする必要があります (ただし、私が話していることを認識していない場合に混乱しないように、コードのこの側面を変更していません)。約)。

于 2013-09-13T06:28:50.580 に答える