2016-03-27 23 views
2

Biraz Ruby öğrenmeye karar verdim ve Ruby'de (2.3.0) bir ekleme sıralama sürümü denemeye karar verdim. Ancak programım pozisyonu kontrol edip değerleri değiştirip değiştirmediğini kontrol ettiğinde, '>' için bir NoMethodError döndürür. Daha spesifik olarak: Burada NoMethodError, Ruby ile Karşılaştırma Açıklaması

./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>' 

sıralama yöntemi için kodudur:

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 

bunun muhtemelen önemsiz ve gerçekten basit bir şeydir ama burada ya da başka bir soru bulamıyorum biliyorum çözüm ve herhangi bir yardım takdir edilecektir!

+0

Bana iyi çalışıyor ... daha yakut-bilge '(1..valueAmount yapıyor deneyin olan sürümü Modifiye) .each do | i | 've çalışıp çalışmadığını kontrol edin –

+0

Lütfen bu hatanın neden olduğu' input' ve 'valueAmount' değerlerini verin. –

+0

valueAmount, depolanacak değerlerin miktarını depolayan bir tamsayı değeridir, giriş, değerlerin listesini saklayan bir boyut [valueAmount] dizisidir. Bu durumda giriş değerleri: 2, 7, 4 ve 9 –

cevap

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 

Ve burada (çıkış olmadan) benim sürüm

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

Çözümünüz benim için çalışmış gibi görünüyor, yardım için teşekkürler! –