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]nilnil没有任何方法>上定义。

考虑一下

middle = first + last / 2

等于

middle = first + (last / 2)

你可能是说

middle = (first + last) / 2

所以使用括号因为/有更高的优先级


以上是Ruby:nil:NilClass的未定义方法“&gt;”(NoMethodError)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>