2015-04-24 22 views
1

我正在嘗試編寫一個方法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 ` 
' 

我不太清楚,我應該做些什麼來解決這個問題;有什麼建議麼?

回答

3

嗯這裏有幾個問題:

與輸入123應該出錯ON:

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

我想發佈相同的代碼,但你咬我用30秒;)1+ –

+0

迪基,考慮你自己警告過:如果你咬人,我會報告你。 –

+0

@CarySwoveland對不起,警告?做什麼的? – DickieBoy

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 
相關問題