2014-02-07 3 views
0

У меня есть код, над которым я работаю для игры. Игра здесь неактуальна, но вот часть моего кода, которая создает проблему. В сущности, я хочу, чтобы функция вводила информацию о типе солдата, затем подставляла в сумме каждый ресурс, который потребуется для создания какой-либо заданной суммы этого солдата. У меня есть последняя часть функции, написанная и работающая нормально, но это назначение переменной, с которой у меня возникают проблемы.Если инструкции else и присвоение переменных

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"){ 

И так далее. Мне интересно несколько вещей: во-первых, есть ли более эффективный способ сделать это? Я хочу, чтобы иметь возможность вводить «стоимость (phalanx, 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 

Что я делаю неправильно?

Спасибо!

+1

Какой язык программирования? (Кроме того, являются ли эти '+' s в начале строки частью кода или Markdown пошло не так?) – jwodder

+0

Что делает troop = c ("phalanx", "druidrider", "pathfinder")? –

+0

Это в Р. Я думал, что отряд = c («фаланга», «друидер», «следопыт») избавится от ошибки, потому что он скажет, что «фаланга не определена» Знаки «+» только в начале моего кода при копировании и вставке – user3084629

ответ

1

Вы ошибаетесь в своей функции. Вы не можете переназначить войска.

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.

3

предупреждение потому, что troop является вектором с 3-х элементов, когда вы делаете сравнение: troop=="phalanx" возвращает логический вектор с тремя значениями (TRUE, FALSE, FALSE). Затем он передается в оператор if, который ожидает одно логическое значение, но получает 3, поэтому он игнорирует последние 2 и выполняет код на основе 1-го значения.

Непонятно, что именно вы пытаетесь сделать здесь, но может быть проще создать список списков со значениями, которые вы получите nt, то вы можете получить доступ к подспискам по имени, чтобы получить набор значений, связанных с этим именем.

Смежные вопросы