Ruby:nil:NilClass的未定义方法“>”(NoMethodError)
目前正在研究 Ruby 的二进制搜索算法,但在将中间数组元素与 n 进行比较时遇到错误。
代码如下:
def b_search(n, arr)
middle = arr.length / 2
first = 0
last = arr.length - 1
while first <= last
middle = first + last / 2
if arr[middle] == n
return true
elsif arr[middle] > n
last = middle - 1
else
first = middle + 1
end
end
false
end
nums = [1, 2, 3, 4, 5]
target = 4
if b_search(target, nums)
puts "Target Found"
else
puts "Target Not Found"
end
错误显然发生在 while 循环中
elsif arr[middle] > n
行,但我不知道为什么。任何帮助,将不胜感激。
回答
它发生的原因arr[middle]是nil并nil没有任何方法>上定义。
考虑一下
middle = first + last / 2
等于
middle = first + (last / 2)
你可能是说
middle = (first + last) / 2
所以使用括号因为/有更高的优先级
THE END
二维码