【发布时间】:2014-10-04 11:08:25
【问题描述】:
我正在尝试使用冒泡排序方法。问题出现在if 语句中,我必须比较一个数字和下一个索引上的数字。代码如下:
numbers = [4, 2, 3, 1, 9]
def bubble_sort(arr)
arr.each do |i|
arr.each_index do |j|
if arr[j] > arr[j+1]
puts "works"
end
end
end
end #end method
bubble_sort(numbers)
这是我得到的错误:
sorting.rb:11:in `>': comparison of Fixnum with nil failed (ArgumentError)
from sorting.rb:11:in `block (2 levels) in bubble_sort'
from sorting.rb:9:in `each'
from sorting.rb:9:in `block in bubble_sort'
from sorting.rb:7:in `each_index'
from sorting.rb:7:in `bubble_sort'
from sorting.rb:19:in `<main>'
通过查看错误消息,我似乎收到了一个错误,因为我与 nil 进行比较,但我不明白为什么。
【问题讨论】:
-
当
arr.each_index do |j|到达最后一个索引时,arr[j+1]将返回 nil,因为该索引不存在。 -
哦,是的,但是我怎么能绕过这个呢?像 arr.each_index-1?
-
八月是正确的。您可以通过使用 arr.each_with_index 来避免它,它返回特定元素的索引。当它在 arr.length -1 (最后一个元素)时,你停下来。但是使用冒泡排序,您不必在以后遍历数组时总是走到数组的末尾。
标签: ruby if-statement bubble-sort