2016-03-27 10 views
2

Rubyを少し学び始め、Ruby(2.3.0)で挿入ソートバージョンを試してみることにしました。しかし、私のプログラムが位置を確認するためにチェックし、値をスワップするかどうかは '>'のNoMethodErrorを返します。具体的には:ここでRubyのNoMethodError比較ステートメント

./rubyInsertSort.rb:28:in `block in sort': undefined method `>' for 1..4:Range (NoMethodError) 
from ./rubyInsertSort.rb:26:in `each' 
from ./rubyInsertSort.rb:26:in `sort' 
from ./rubyInsertSort.rb:22:in `main' 
from ./rubyInsertSort.rb:40:in `<main>' 

ソートメソッドのコードです:

def sort(input, valueAmount) 
    for i in 1..valueAmount 
    j = i 
    while j > 0 and input[j - 1] > input[j] 
     input[j], input[j - 1] = input[j - 1], input[j] 
     j += -1   
    end 
    end 

    #Output loop 
    for i in 1..valueAmount 
    puts "Sort Value #{i} = #{input[i]}" #Outputs the sorted array to the console 
    end 
end 

私はこれはおそらく、些細なと本当に簡単なものである知っているが、と私はここや他の場所で質問を見つけることができませんソリューションと任意の助けをいただければ幸いです!

+0

それは私には正常に動作します...それはより多くのルビー賢明 '(1..valueAmountをやってみているバージョン変更します).each do | i | 'とそれが動作するかどうかを確認してください –

+0

このエラーの原因となる' input'と 'valueAmount'の値を与えてください。 –

+0

valueAmountは格納する値の量を格納する整数値で、inputは値のリストを格納するサイズ[valueAmount]の配列です。この場合、入力値は2,7,4、および9でした。 –

答えて

1

def sort(input, valueAmount) 
    for i in 1...valueAmount # Added a dot 
    j = i 
    while j >= 0 and input[j - 1] > input[j] # >= instead of > 
     input[j], input[j - 1] = input[j - 1], input[j] 
     j += -1 
    end 
    end 

    #Output loop 
    for i in 0...valueAmount # Added a dot 
    puts "Sort Value #{i} = #{input[i]}" #Outputs the sorted array to the console 
    end 
end 

そして、ここでは(出力なし)私のバージョン

def insertion_sort!(ary) 
    return ary if ary.size < 2 
    1.upto(ary.size - 1) do |i| 
    i.downto(0) do |j| 
     break if ary[j - 1] <= ary[j] 
     ary[j - 1], ary[j] = ary[j], ary[j - 1] 
    end 
    end 
    ary 
end 
+0

あなたのソリューションは私のために働いているようですが、助けてくれてありがとう! –

関連する問題