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

Undefined method when trying to square each element in array

我正在尝试编写一个名为 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) 时,应该 return 9414,我收到以下错误消息:

`block in square_digits': undefined method `**' for "3":String (NoMethodError)
from `each'
from  `square_digits'
from  `
'

我不太确定应该如何修复它;有什么建议吗?

嗯这里有几个问题:

对于输入 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}

return each 的结果不只是原始数组。

所以第一次修复它只会 return "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

虽然我对你想要达到的目标感到困惑。

你也可以试试这个 ;)

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