2009-06-24 190 views
1

我已經搜索/谷歌搜索,但我正在努力解決以下問題。LocalJumpError(Ruby on Rails)

我正在構建一個Rails 2.3.2應用程序,其中一個要求是計算結果數組的中值。我正在使用代碼來計算Ruby Cookbook的中位數,但當我嘗試查找有奇數個成員的數組的中位數時,仍然遇到接收錯誤「LocalJumpError - 沒有給出任何代碼塊」的錯誤問題。

在我的視圖的示例代碼如下:

<%= survey_response.median([6,4,5,4,4,2]) %> 

然後在survey_response.rb模型的方法如下:

def mean(array) 
    array.inject(array.inject(0) { |sum, x| sum += x }/array.size.to_f) 
end 

def median(array,already_sorted=false) 
    return nil if array.empty? 
    array = array.sort unless already_sorted 
    m_pos = array.size/2 
    return array.size % 2 == 1 ? array[m_pos] : mean(array[m_pos-1..m_pos])  
end 

時中值方法是指後面的誤差引起到平均的方法來獲得數組中奇數項目的媒體。我無法弄清楚爲什麼我會遇到這樣的錯誤,或者確實如何解決這個問題 - 所以我非常感謝任何人可以給我提供的任何幫助/指導/大笑!

感謝

西蒙

回答

1

李氏看起來是由於您使用分數指數在數組中。嘗試更換:

m_pos = array.size/2 

有:

m_pos =(array.size/2).ceil

此外,嘗試改變你的平均函數將此:

def mean(array) 
    array.inject(0) { |sum, x| sum += x }/array.size.to_f 
end 
+0

嘿謝謝回覆 - 不幸的是,沒有什麼區別。當數組中有奇數個項目時,仍然會出現相同的錯誤。有沒有我可以提供的其他信息可能有用? – simonyoung 2009-06-24 09:08:18

+0

謝謝 - 通過編輯mean()函數,這也是一種享受。 – simonyoung 2009-06-24 09:35:28

1

更好的代碼:

def mean(array) 
    array.inject { |sum, n| sum + n }/array.length.to_f 
end 

def median(array) 
    return nil if array.empty? 
    array.sort! 
    middle = array.length/2 
    (array.length % 2 == 1) ? array[middle] : mean([array[middle-1], array[middle]]) 
end 

puts median([5,11,12,4,8,21]) # => 9.5 
+0

嘿 我說: 數= numbers.sort ,因爲你會發現中間前陣需要排序,但它肯定另有固定我的問題。非常感謝! – simonyoung 2009-06-24 09:25:03

1

那個mean方法看起來非常糟糕。試試這個:

 
def mean(array) 
    a.inject(0) { |sum,x| sum += x }/a.size.to_f 
end