尝试对数组中的每个元素求平方时的未定义方法

时间:2015-04-24 11:12:03

标签: ruby undefined nomethoderror

我正在尝试编写一个名为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  `
'

我不太清楚应该怎么做才能修复它;有什么建议吗?

2 个答案:

答案 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