我正在尝试创建插入排序。我遇到了NoMethodError,我正在寻找一些帮助。
def insertion_sort array
(1..array.length-1).each do |pull_position|
checked_value = array.delete(pull_position)
insert_point = pull_position
while checked_value < array[insert_point - 1] and insert_point >= 0 do
insert_point -= 1
end
array.insert(insert_point,checked_value)
end
end
puts insertion_sort(["goof","fire","apple","charlie","banana","elephant","dog"])
答案 0 :(得分:2)
问题是pull_position
不是array
的元素。 (它是一个索引。)所以array.delete(pull_position)
返回nil
,分配给checked_value
。 checked_value < array
...引发了异常,因为nil
没有方法<
。
而不是array.delete(pull_position)
我希望您想要array.delete_at(pull_position)
,但这还不足以修复代码。
当我运行代码并获得此异常时,很容易发现问题:
NoMethodError: undefined method `<' for nil:NilClass
from (irb):39:in `block in insertion_sort'
...
这是有价值的信息。它告诉我
时发生了异常while checked_value < array[insert_point - 1] and insert_point >= 0 do
已执行且checked_value
等于nil
。因此,只需要查看checked_value
最后一次分配值(nil
)和宾果游戏的问题!