2017-04-22 13 views
-1

私はRubyを使い始めていますが、なぜこれが起こっているのかわかりません。 これは私のコードです。Fixnumとnilの比較が失敗しました(ArgumentError)

def buble_sort(a) 
    i = 0 
    print a.size() 
    while i < a.size() do 
     if a[i] > a[i+1] then 
      temp = a[i] 
      a[i] = temp 
      a[i+1] = a[i] 
     end 
     i = i + 1 
    end 
    return a 
end 

puts "Amount of elements in your array" 
n = gets.chomp.to_i 
a = [] 
n.times do |num| 
    puts "input your element #{num}" 
    a <<gets.chomp.to_i 
end 
puts a 
a = buble_sort(a) 
puts "Array sorted #{a}" 

、出力は私に、このエラーを与える: 4burbuja.rb:6:>': comparison of Fixnum with nil failed (ArgumentError) from burbuja.rb:6:in buble_sortの ' burbuja.rbから:24: `で'

+0

経由で実行されての一例です何もない。あなたは '' temp = a [i + 1] '' a [i + 1] = a [i] '' a [i] = temp'やもっと慣用的なルビーでは、a [i + 1] a [i] = a [i]、a [i + 1] 'である。 – GSP

+0

うん、私は助けXDを求めた後にそれを実現した。 –

答えて

-1

私はあなたがルビーを学んでいることを理解して欲しいの独自のバブルソートを実装します。 a.sortは簡単ですが、何も教えていません。私はあなたがやって学ぶことがうれしいです!バブルソート方法に欠陥があります。あなたはiをインクリメントし、それを各繰り返しで配列のインデックスとして使用しています。最悪の場合、配列の要素よりもはるかに多くなるn ** 2(n 2乗)の反復が必要です。しかし、あなたのコードがうまく動いていたら、それが実行されると予想していると思ったら、配列に1回だけ渡します。

これは古典的なルビーバブルソートです。 (ユーザーがコンソールからアレイを埋めるように) 値を交換する必要がなくなるまで、ENTIRE配列を何度も処理し続けることに注意してください。ここで

def bubble_sort(array) 
    n = array.length 
    puts "Sorting your array of #{n} items" 
    loop do  #will loop forever till we break 
       #When we go through the entire array 
       #and don't have to swap then the array 
       #is sorted 
    swapped = false 

    (n-1).times do |i| 
     print "*" #just to illustrate how many iterations occur 
     if array[i] > array[i+1] 
     array[i], array[i+1] = array[i+1], array[i] #swap these values, no pesky temp variable 
     swapped = true 
     end 
    end 

    break if not swapped #we are done exit the loop 
    end 

    array #return the sorted array 
end 

puts "Amount of elements in your array" 
n = gets.chomp.to_i 
a = [] 
n.times do |num| 
    puts "input your element #{num}" 
    a <<gets.chomp.to_i 
end 
puts a 
a = bubble_sort(a) 
puts "Array sorted #{a}" 

は、それが達成されますが、 `一時は= [i]は` [I] = temp` `続いているあなたのwhileループではコンソール

Cyclops% ruby sort_test.rb 
Amount of elements in your array 
6 
input your element 0 
5465463 
input your element 1 
3421 
input your element 2 
432143 
input your element 3 
234123 
input your element 4 
645 
input your element 5 
1 
5465463 
3421 
432143 
234123 
645 
1 
Sorting your array of 6 items 
****************************** 
Array sorted [1, 645, 3421, 234123, 432143, 5465463] 
Cyclops% 
関連する問題