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行で多くのこと書きたいんだったら改行か";"をはさまないと行けないんだったなーって・・・

 

じゃあ失敗してるものは横に並べて宣言してるから配列みたいな宣言になってる?よくわからん