当我尝试使用条件迭代字符串中的索引时,我现在在练习中遇到过这个错误两次。当我用个别情况打破它时,逻辑似乎有效,但Ruby不喜欢它所表达的方式。
def NumberAddition(str)
def is_num(num)
(0..9).include? num.to_i
end
i = 0
sum = 0
while i < str.length
if is_num(str[i])
if !is_num(str[i+1])
sum += str[i].to_i
else
mult = str[i]
n = 1
while is_num(str[i+n])
mult << str[i+n]
n += 1
end
sum += mult.to_i
end
end
i += 1
end
sum
end
NumberAddition("75Number9")
抛出此错误:
no implicit conversion of nil into String
(repl):18:in `NumberAddition'
为该行:
mult << str[i+n]
所以很明显而不是返回str [i + n]的字符串“5”, 其中i = 0且n = 1,它找到零。有没有办法用我的方法表达这个或者我需要重新整理整个循环吗?
答案 0 :(得分:1)
您的is_num
功能并未考虑nil.to_i
是0
。这就是您收到错误的原因,因为您正试图将nil附加到字符串中。你需要使用这样的东西:
def is_num(num)
# convert string to integer and back to string should be equal to string itself
num.to_i.to_s == num
end
或者,如果您想确保连接字符串,只需将参数转换为字符串
即可mult << str[i+n].to_s # nil gets converted to an empty string