If statement 在Lua中跳过其他项

If statement 在Lua中跳过其他项,if-statement,lua,If Statement,Lua,我开始在Lua从事一个小游戏开发项目,我的代码中的这部分遇到了问题: if genrel == RPG and langl == BASIC and topicl == WAR then review = math.random(2, 5) review2 = math.random(2, 5) review3 = math.random(2, 3) money = money + 300 print("Yo

我开始在Lua从事一个小游戏开发项目,我的代码中的这部分遇到了问题:

    if genrel == RPG and langl == BASIC and topicl == WAR then
        review = math.random(2, 5)
        review2 = math.random(2, 5)
        review3 = math.random(2, 3)
        money = money + 300
        print("You have earned a total of $300 dollars from your game. Overall not many people enjoyed the game.")

elseif genrel == RPG and langl == BASIC and topicl == "WESTERN" then
        review = math.random(7, 9)
        review2 = math.random(4, 9)
        review3 = math.random(5, 8)
    money = money + 400
    print("You have earned a total of $300 dollars from your game. The game recieved mixed reviews.")
topicl、langl和genrel在代码的前面定义。 例如:

所有内容都已定义,但当我运行代码时,输出的随机数是if下的第一个随机数,无论我输入了什么。这可能很难理解,所以这里是我的完整代码。


小结:程序通过确定类型、主题和编码语言来决定显示哪些随机数。它不按类型、主题和编码语言选择数字,而是简单地使用第一个if语句。

在代码的早期,您有以下内容:

if genreChoice == 'ACTION' then
    genre = "[ACTION]"
    genrel = ACTION     
elseif genreChoice == 'RPG' then
    genre = "[RPG]"
    genrel = RPG     
elseif genreChoice == 'SIM' then
    genre = "[SIM]"
    genrel = SIM     
end
您将变量
ACTION
RPG
SIM
的值分配给
genrel
,但这些变量似乎没有在任何地方定义,因此它们的值为
nil
。换句话说,当您执行以下操作时:

genrel = ACTION     
与您所做的相同:

genrel = nil     

Lorenzo介绍了代码执行不符合预期的主要原因。第二个问题是,您正在检查播放机输入的字符串,但没有规范化该情况

考虑一下如果玩家输入类似于
WeSTErn
的内容会发生什么。这与
WESTERN
不同——变量设置不正确,程序再次输出错误的结果

通过使用
string.upper
string.lower
,或者使用不同的数据类型,例如数字,在比较之前对播放器输入进行规范化。在处理数据时,并非所有内容都必须表示为字符串

我是否应该像克里斯特·安德森(Krister Andersson)所说的那样,在if语句中的每一项都加上引号

仅当您希望这些变量包含字符串类型时。您也可以为它们分配唯一的编号,以便在它们之间进行标识。比如说:

local ACTION, RPG, SIM = 1, 2, 3
local JAVA, BASIC = 1, 2, 3
local WAR, WESTERN, BLOCKS = 1, 2, 3
-- etc.

最后,你真的应该考虑破解你的程序——这就是为什么函数被发明的原因。

不是第一个<代码> > < < /> >语句中没有引用“代码>战争<代码>的问题吗?我已经试过引用过它们,但这可能是问题所在。我会用“”或“”引用它们吗?Lua中的字符串文本可以用单引号或双引号引用,这是一样的。你应该:第1章、第2章、第3章并不长,在你做任何严肃的程序之前,你必须很好地了解它们。我添加了引号,随机数显示为零。访问未定义的全局变量(如RPG或WAR)真的很烦人。我强烈建议使用lint工具(LuaInspect)或元表技巧(strict.lua)更快地检测这些错误。我想一开始我是这样做的,但是把它去掉了。我现在就试试。我是否应该像克里斯特·安德森(Krister Andersson)所说的那样,在if语句中的每一项都加上引号?编辑:等等,我如何准确定义这些变量?
local ACTION, RPG, SIM = 1, 2, 3
local JAVA, BASIC = 1, 2, 3
local WAR, WESTERN, BLOCKS = 1, 2, 3
-- etc.