我正在做一个卡塔,它要求我将两个数字字符串(例如“1 2 3 4 5 6”)更改为整数,将这些整数相加,然后确定哪个值较大以打印出信息。 这是我到目前为止所拥有的:
def goodVsEvil(good, evil)
goodarr = []
evilarr = []
goodarr.push(good.split(" "))
evilarr.push(evil.split(" "))
goodarr.each{|n| n.to_i}
evilarr.each{|n| n.to_i}
goodsum = goodarr.inject(:+)
evilsum = evilarr.inject(:+)
if goodsum > evilsum
return "Battle Result: Good triumphs over Evil"
elsif goodsum < evilsum
return "Battle Result: Evil eradicates all trace of Good"
elsif goodsum = evilsum
return "Battle Result: No victor on this battle field"
end
end
我将字符串拆分为单独的数字并将它们放入各自的数组中,但我需要将它们转换为整数,解释器不会将 .to_i
方法识别为有效方法.
我该如何解决或我哪里错了?
最佳答案
这里至少有三个错误:
goodarr.push(good.split(" "))
这并不像您认为的那样。在这里,您只向数组添加一个元素,该元素是调用 split
的结果数组:
goodarr => [["1", "2", "3", "4", "5", "6"]]
这意味着数组中的每个元素都是一个数组,没有to_i
方法。
你应该这样做:
goodarr = good.split(" ")
或
goodarr = good.split # use spaces by default
第二个错误是:
goodarr.each{|n| n.to_i}
这段代码完全没有副作用。 block 返回的值不存储在任何地方。您需要使用 map!
代替:
goodarr.map!{|n| n.to_i}
最后一个错误是使用赋值运算符 =
,而您实际上想使用等于运算符 ==
来比较值是否相等。
关于arrays - 为什么我不能将数字作为字符串更改为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200713/