2017-01-04 68 views
0

我計算3個數字的平均值,用戶將在Ruby中輸入。我每次運行應用程序,用戶將在3個電話號碼,但我得到一個錯誤,指出:簡單的紅寶石平均程序

test.rb:7:in <main>': undefined method /' for "23\n23\n24\n":String (NoMethodError)

我的代碼如下:

puts "Enter first" 
num1 = gets 
puts "Enter second" 
num2 = gets 
puts "Enter third" 
num3 = gets 
avg = (num1 + num2 + num3)/3 
puts "Average is " + avg 
+1

您需要仔細檢查錯誤消息。像這裏一樣,他們經常會指出問題所在。這個告訴你方法'/'沒有爲'String'類的實例''23 \ n23 \ n24 \ n「'定義。這意味着'(num1 + num2 + num3)'是一個字符串(不是整數)。因此您需要將其更改爲'(num1.to_i + num2.to_i + num3.to_i)'。 –

回答

0

我對Ruby一無所知,但如果它與Python相似,則必須將從字符串獲得的輸入轉換爲整數。現在你的程序只是連接你輸入的字符串,並且因爲你不能在字符串上使用/而感到困惑。

編輯:您必須使用輸入上的方法.to_i將其轉換爲整數。

4

試試這個:

puts "Enter first" 
num1 = gets.to_i 
puts "Enter second" 
num2 = gets.to_i 
puts "Enter third" 
num3 = gets.to_i 
avg = (num1 + num2 + num3)/3.0 
puts "Average is #{avg}" 

首先,您需要從get方法中去掉換行符,並通過調用.to_i將字符串轉換爲整數。然後,要正確輸出平均值,只需使用字符串插值。

+1

無論如何,當你計劃調用to_i時,實際上不需要調用chomp。從文檔:返回解釋str中的前導字符作爲整數基數(2到36之間)的結果。超過有效數字末尾的無關字符將被忽略。如果在str開頭沒有一個有效的數字,則返回0._只要刪除'chomp',它沒有什麼區別。 – spickermann

+0

@spickermann,你是完全正確的。我更新了我的答案以反映您的意見。謝謝! –

+0

謝謝你解釋它Alex,我還有一個問題。我仍然是Ruby的初學者,所以我不太瞭解#{avg}的部分。這是在Ruby中計算平均值的唯一方法嗎?對於初學者來說沒有別的辦法嗎?我只是不想領先於自己。 –

0

gets返回String,而不是數字。因此您需要先撥打to_i

此外:要返回Float您的計算需要對左邊或/右側一個浮點值,否則會返回一個Integer(可能是什麼意料之外):

(1 + 1 + 2)/3 
#=> 1 
(1 + 1 + 2)/3.0 
#=> 1.3333333333333333 

更改代碼爲:

puts "Enter first" 
num1 = gets.to_i 
puts "Enter second" 
num2 = gets.to_i 
puts "Enter third" 
num3 = gets.to_i 
avg = (num1 + num2 + num3)/3.0 
puts "Average is #{avg}" 
+0

#{avg}是什麼意思?沒有其他方法來計算平均值? –

+0

@JohnDoe''...#{avg} ...「是一個字符串插值和一個常見的Ruby成語。它與'「...」+ avg.to_s +「...」'基本相同。它具有的優點是它比使用'+'將字符串串起來更容易出錯,因爲它會自動調用'to_s',並且很多[devs](https://github.com/bbatsov/ruby-style-guide#字符串插值)認爲它更容易閱讀。 – spickermann