我一直在研究一些項目歐拉問題,以幫助學習編程,並想知道如果有人能解釋這一點給我。紅寶石!地圖不改變對象類型
我有一串數字,我試圖找到序列中任意五個最大的產品。這是我到目前爲止有:
temp = series.split(//).map!{|x| x.to_i}
len = temp.length
maxprod = 1
0.upto(len-4) do |x|
num = (temp[x] * temp[x+1] * temp[x +2] * temp[x+3] * temp[x+4])
if num > maxprod
maxprod = num
end
end
puts maxprod
溫度[0]的.class返回一個Fixnum,但是,當我運行的代碼我得到一個錯誤「*:無不能強迫Fixnum對象(類型錯誤)」
由於
爲了擴展這一點,ruby範例是破壞性方法(改變對象內部狀態的方法)往往有一個!後綴。在你的情況下,地圖!指示它修改您引用的任何可枚舉對象的內部結構,而map則會從原始對象創建一個新的已更改對象並將其返回。 – mcfinnigan 2013-04-09 16:08:03
我做了更改,但仍然收到相同的錯誤。我沒有改變循環爲「temp [x] .to_i * temp [x + 1] .to_i ...」,這似乎工作(似乎重複)。 – MattLock 2013-04-09 16:12:03
這可能是因爲'temp'沒有包含你認爲的那麼多元素。請注意,如果一個數組只有1個元素,'temp [1] == nil'。因此,'temp = [1]; temp [0] * temp [1]'會給你你得到的錯誤。 'to_i'爲你工作的原因是因爲'nil.to_i == 0' – 2013-04-09 16:49:13