2016-02-11 59 views
0

我正試圖在計算和打印數組中的單詞的平均長度的ruby中調試程序。計算和計算紅寶石中的單詞的平均長度

words = ['Four', 'score', 'and', 'seven', 'years', 'ago', 'our', 'fathers', 'brought', 'forth', 'on', 'this', 'continent', 'a', 'new', 'nation', 'conceived', 'in', 'Liberty', 'and', 'dedicated', 'to', 'the', 'proposition', 'that', 'all', 'men', 'are', 'created', 'equal'] 

word_lengths = Array.new 

words.each do |word| 

    word_lengths << word_to.s 

end 

sum = 0 
word_lengths.each do |word_length| 
    sum += word_length 
end 
average = sum.to_s/length.size 
puts "The average is " + average.to_s 

很明顯,代碼不起作用。當我運行該程序時,我收到一條錯誤消息,指出字符串'+'不能強制轉換爲fixnum(typeerror)。

我該做什麼不讓代碼計算數組中字符串的平均長度?

+1

什麼是'word_to'?什麼是's'?什麼是「長度」? – sawa

回答

1

試試這個。

words = ['Four', 'score', 'and', 'seven', 'years', 'ago', 'our', 'fathers', 
'brought', 'forth', 'on', 'this', 'continent', 'a', 'new', 'nation', 
'conceived', 'in', 'Liberty', 'and', 'dedicated', 'to', 'the', 'proposition', 
'that', 'all', 'men', 'are', 'created', 'equal'] 


sum = 0 
words.each do |word| 
    sum += word.length 

end 

average = sum.to_i/words.size 
puts "The average is " + average.to_s 

你不必有一個單獨的word_lengths變量來話都做成在words陣列。沒有循環遍歷word_lengths數組,您可以將兩個循環合併爲一個循環,就像我在文章中給出的一樣。

你得到word長度的方法是錯誤的。使用word.length。請參閱here

+1

由於用戶是新的,你可以添加評論。他的問題與陣列的功能有關。請解釋陣列字的功能。如word.length與使用諸如words.size之類的東西來計算平均值。由於他是新人,並且由於他在他的「做」循環中選擇的命名約定,所以它並不直觀。 – camdixon

+0

@Bunti謝謝!你是一個救星! – KMaelstrom

+1

首選'sum = words.reduce(0){| sum,word | sum + word.length}'。 –

7

嘗試

words.join.length.to_f/words.length 

說明:

這需要鏈接方法一起使用的優勢。首先,words.join給出的所有字符的從陣列的字符串:

'Fourscoreandsevenyearsagoourfathersbroughtforthonthiscontinentanewnationconcei 
vedinLibertyanddedicatedtothepropositionthatallmenarecreatedequal' 

然後,我們我們應用length.to_f給長度爲float(採用浮點數確保了精確的最終結果):

143.0 

然後我們用/ words.length來劃分:

4.766666666666667 
+2

您也可以使用['fdiv'](http://ruby-doc.org/core-2.3.0/Fixnum.html#method-i-fdiv)獲得浮點結果:'words.join.length .fdiv(words.length)' – Stefan