If else 语句和分配变量

Posted

技术标签:

【中文标题】If else 语句和分配变量【英文标题】:If else statements and assigning variables 【发布时间】:2014-03-05 08:49:19 【问题描述】:

所以我有一个正在为游戏编写的代码。游戏在这里无关紧要,但这是我的代码中产生问题的部分。本质上,我希望该函数接受士兵类型的输入,然后替换为建造任何给定数量的士兵所需的每种资源的数量。我已经编写了函数的后半部分并且工作正常,但是我遇到了变量赋值问题。

 cost=function(troop,from,to)
    troop=c("phalanx","druidrider","pathfinder")
    if(troop=="phalanx")
        w=100
        cl=130
        i=55
        cr=30
    else if(troop=="druidrider")
        w=360
        cl=330
        i=280
        cr=120
    else if(troop=="pathfinder")

等等。我想知道一些事情:首先,有没有更有效的方法来做到这一点?我希望能够输入“成本(方阵,30,50)”,它会自动使用我尝试分配给方阵的值来获取资源 w、cl、i、cr,并将其替换为其余的方程。它给了我一个错误提示

Warning message:
In if (troop == "phalanx")  :
 the condition has length > 1 and only the first element will be used

我做错了什么?

谢谢!

【问题讨论】:

这是什么编程语言? (另外,代码行开头的+s 或 Markdown 是否出错了?) troop=c("phalanx","druidrider","pathfinder") 是做什么的? 它在 R 中。我认为 troop=c("phalanx","druidrider","pathfinder") 会摆脱错误,因为它会说“方阵未定义”当我复制和粘贴时,+ 符号就在我的代码的开头 troop 作为函数的参数然后立即覆盖任何可能已传递给troop 的值是没有任何意义的。 【参考方案1】:

警告是因为troop 是一个具有 3 个元素的向量,当您进行比较时:troop=="phalanx" 它返回一个具有 3 个值(TRUE、FALSE、FALSE)的逻辑向量。然后将其传递给 if 语句,该语句期望单个逻辑值,但它收到 3,因此它忽略最后 2 个并根据第一个值执行代码。

目前尚不清楚您究竟想在这里做什么,但创建具有所需值的列表列表可能更简单,然后您可以按名称访问子列表以获取与相关联的值集那个名字。

【讨论】:

【参考方案2】:

你在你的函数中犯了一个错误。你不能重新分配部队。

cost=function(troop,from,to)
    #troop=c("phalanx","druidrider","pathfinder")
    if(troop=="phalanx")
        w=100
        cl=130
        i=55
        cr=30
      else if(troop=="druidrider")
        w=360
        cl=330
        i=280
        cr=120
      else if(troop=="pathfinder")

只要放出troop = 部分。如果你有它,部队是一个向量,然后if 不知道它应该与向量的哪个元素进行比较。在您的代码中写出if(troop=="phalanx")if(c("phalanx","druidrider","pathfinder") == "phalanx"),这没有意义(因为它提供了一个布尔向量TRUE, FALSE, FALSE,并且只使用了第一个TRUE

【讨论】:

以上是关于If else 语句和分配变量的主要内容,如果未能解决你的问题,请参考以下文章

“if, else”计算语句有问题

Javascript IF,ELSE IF总是选择IF语句[重复]

带有变量分配的机器人框架中的 IF ELSE

if-else语句中,if和else的配对原则各是啥

如何将 DOM 更改为“if/else”语句单独为真,如果所有 if 语句都为真,也将变量设置为真?

switch语句和switch-case与if-else之间的转换