2011-01-28 26 views
0

私はRubyが新しく、文字列を整数に変換しようとしています。Rubyで文字列を整数に変換する方法

私はGPAを計算しようとしていますので、文字の等級(A、B、Cなど)を入力するために取得を使用しています。次に、それぞれをそれぞれの数値グレード(A = 4、B = 3、C = 2など)。私は整数を文字列に変換する方法についての情報をたくさん見つけましたが、文字列は整数に変換しませんでした。助言がありますか?

puts ("This program will calculate your GPA this semester")  
puts ("Please type your grade, then press enter") 

puts("How many courses are you taking?") 
num_courses=gets.chomp 
puts("Your are taking #{num_courses} courses") 

puts ("Use A, A-, B+, B, B-, C+, C, C-, D, or F (Press enter after typing each grade.)") 

gradeList = [] 
gradeList.push gets.chomp while gradeList.last != '' 
puts gradeList.sort 

"A"=4 
"A-"=3.7 
"B+"=3.3 

更新:完全に変更されたコード。私は間違った角度から来ていたと思う。 grades.rb:10:未定義のメソッド `」最後のnilのために:NilClass(NoMethodError)ここでは最も簡単な解決策は、おそらくハッシュだろう

puts "This program will calculate your GPA this semester" 
puts "Please type your grade, then press enter" 

puts("How many courses are you taking?") 
num_courses=gets.chomp 
puts("Your are taking #{num_courses} courses") 

puts ("Use A, A-, B+, B, B-, C+, C, C-, D, or F (Press enter after typing each grade.)") 

grade=gets.chomp while grade.last != '' 

if grade == "A" 
    total=total+4 
elsif grade=="B" 
    total=total+3 
elsif grade=="C" 
    total=total+2 
elsif grade=="D" 
    total=total+1 
end 

gpa=total/num_courses 
puts"Your GPA is #{gpa}" 
+0

ありがとう、私は間違った角度からコードに来ていたと思うし、配列を使用せずに書き換えます。皆さんはどう思いますか?今の角度は良いですか?私はまだエラーが発生しています。オリジナルの投稿で編集と新しいコードを確認してください。 –

+0

Rubyで文字列をintにキャストする方法を探しているときに、この質問のタイトルを検索結果に表示する必要がありますが、そのことについては – callum

答えて

2
しかし、私はまだエラーを取得しています

このエラーが発生するのは、最初の繰り返しでgradeが定義されていないためです。アクション後にwhileが配置されているため、これはわかりません。それが評価されたとき、それはグレードがnilであることが明らかになったため、このループは、あなたがそれがしたい何もしないという事実以外に、今、この

while grade.last != '' { 
    grade=gets.chomp 
} 

のようにそれを記述する必要があり、この形式は、はるかに優れています。ここで

がありますが、これの一部を行うことができますいくつかの他の方法がありますが、うまくいけば、上記のは、あなたが一般的な概念を見ていることは十分に簡単です

puts "This program will calculate your GPA this semester" 

puts "How many courses are you taking?" 
num_courses = gets.chomp.to_i     # num_courses is now an integer 
puts "You are taking #{num_courses} courses"  # let's pretend num_courses = 4 

puts "Use A, A-, B+, B, B-, C+, C, C-, D, or F" 

values = {       # using a hash will allow us to avoid a 
    "A" => 4,      # large and inefficient if/elsif statement 
    "A-" => 3.7, 
    "B+" => 3.3, 
    "B" => 3, 
} 

total = 0.0       # sets our total prior to the loop for scope 
num_courses.times do    # so we will do this loop 4 times 
    total += values[gets.chomp.upcase]  # looks up the value from our hash 
end           # and adds it to the (running) total 

gpa = total/num_courses   # calculates the gpa from the total 
            # and the num_courses we asked earlier 
puts "Your GPA is #{gpa}" 

...あなたのコードの迅速な再書き込みですあなたが以前に把握するのに苦労していたかもしれないこと。

私はこれがあなたを助けてくれることを願っていますが、あなたがまだ不思議に思うかもしれないものを尋ねます。

+0

このコードは少し脆弱です。つまり、値ハッシュのグレードと一致しないものが入力された場合は失敗します。しかし、単純な宿題のように見えるものは十分でしょう。 @Faisal、上記のコードに構文エラーがありますが、それを見つけて修正できるはずです。 –

+0

@スティーブ私はこれの「脆弱性」を認識していますが、彼が誤ってやっていたこととそのやり方を理解すれば、私はファイゼルのためにそれを残すと考えました。 Re:構文エラーです。私はばかばかしい 'gets.to_i'であるかもしれないばかげた' gets.chomp.to_i'以外のものを見るのに失敗しています。何を参考にしていますか? –

2

GRADE_VALUES = { 
    "A" => 4, 
    "A-" => 3.7, 
    ... 
} 

gradeList = [] 
gradeList.push GRADE_VALUES[gets.chomp.strip] while gradeList.last != '' 


puts gradeList 

=> [3.7, 4, 3.3 ... ] 
+0

ありがとうございます。編集? –

+0

GRADE_VALUES [gets.chomp.strip]は、GRADE_VALUES ['']を実行すると、gradeListの最後までnilをプッシュします。あなたが書いたループは戻ってこないでしょう。 –

関連する問題