2014-03-29 105 views
1

我試圖使用列表中的下列方法中的多個所有因素:爲什麼此Ruby代碼不會返回預期的答案?

def find_factors(n) 
    factors = [] 
    2.upto(n-1) {|x| factors << x if n % x == 0} 
end 

factor = find_factors(24) 
puts factor 

其打印出以下幾點:

2 

代替因素清單!如果做錯了,該怎麼辦?

回答

5

upto與塊用於返回的接收裝置,2

一種更好的方式來寫,這將是:

def find_factors(n) 
    2.upto(n-1).select{|x| (n % x).zero?} 
end 
+0

更好,更優雅/慣用,或更快? – TCSGrad

+0

如同更多的防錯 – sawa

1

你必須在你find_factors方法的最後返回factors

def find_factors(n) 
    factors = [] 
    2.upto(n-1) {|x| factors << x if n % x == 0} 
    factors 
end 
+0

呃! Facepalm :(對不起,浪費社區時間!!感謝您的快速響應! – TCSGrad

2

在Ruby中,只要您一個循環之前看到一個數組的初始化,通常可以將其轉換爲一個功能更強大的方法:

def find_factors(n) 
    2.upto(n-1).select{|x| n % x == 0} 
end 

這往往是更緊湊,往往更易讀。

相關問題