我正在尝试编写一个名为square_digits
的方法,该方法对给定数字中的每个数字进行平方。我写道:
def square_digits(num)
number_array = num.to_s.split("")
num_to_int = number_array.to_i
num_squared = num_to_int.each{|n| n**2}
return num_squared.join("")
end
尝试运行square_digits(3212)
时,应该返回9414
,我收到以下错误消息:
`block in square_digits': undefined method `**' for "3":String (NoMethodError)
from `each'
from `square_digits'
from `
'
我不太清楚应该怎么做才能修复它;有什么建议吗?
答案 0 :(得分:3)
这里有一些问题:
使用输入123
时,它应该出现错误:
num_to_int = number_array.to_i
使用:
NoMethodError: undefined method 'to_i' for ["1","2","3"]:Array
你想:
num_to_int = number_array.map(&:to_i)
另外
num_squared = num_to_int.each{|n| n**2}
不会仅返回each
原始数组的结果。
因此,第一次修复时,它将返回"123"
你想要:
num_squared = num_to_int.map{|n| n**2}
所以最终的功能如下:
def square_digits(num)
number_array = num.to_s.split("")
num_to_int = number_array.map(&:to_i)
num_squared = num_to_int.map{|n| n**2}
return num_squared.join("")
end
虽然我对你想要达到的目标感到困惑。
答案 1 :(得分:0)
你也可以试试这个;)
def square_digits(num)
num.to_s.split('').map { |n| n.to_i ** 2 }.join("")
end
或强>
def square_digits(num)
num.to_s.chars.map { |n| n.to_i ** 2 }.join("")
end