Ruby よくわかんない
Rubyちょっとくらい書けるようになってるよなって思ってひとまずAOJのVolume0を解いてたんだけど2問目で早速躓いた
List of Top 3 Hills
#最初に書いたコード
highest = 0, higher = 0, high = 0 # top3 highest > higher > high
10.times{
x = gets.to_i
if x > highest
high = higher
higher = highest
highest = x
end
if x > higher
high = higher
higher = x
end
if x > high
high = x
end
}
print highest + "\n" + higher + "\n" + high + "\n"
自分ではミスのないコードだって思ったんで実行してみたんだけど
`>': comparison of Fixnum with Array failed (ArgumentError)
なるエラーが起こって調べてみたら型が違うものを比較してて混乱してるって似たような文面のエラーが出てきた人のブログがあった
ちゃんと整数に初期化してるし比較も整数になってるよな・・・なんでだってなった
よくわかんないけど試しに配列に置き換えてみようって思って配列にしてみた
#配列に変更したコード
hills = [0,0,0] # top3 highest > higher > high
10.times{
x = gets.to_i
if x > hills[2]
hills[0] = hills[1]
hills[1] = hills[2]
hills[2] = x
elsif x > hills[1]
hills[0] = hills[1]
hills[1] = x
elsif x > hills[0]
hills[0] = x
end
}
3.times do |i|
puts hills[2-i]
end
すると今度はエラーも出ずにAOJにも無事に受理された
Rubyはまだまだわからないことが多い
追記
失敗した方のコードの初期化してる部分でもしかして?って思って
highest = 0, higher = 0, high = 0
から
highest = 0
higher = 0
high = 0
にしてみたら通ってその・・・
そういえば1行で多くのこと書きたいんだったら改行か";"をはさまないと行けないんだったなーって・・・
じゃあ失敗してるものは横に並べて宣言してるから配列みたいな宣言になってる?よくわからん