好的,所以我试图在一个素数数组上写一个简单的二进制搜索。但似乎由于某种原因,指定的变量为零。但是当我检入irb时,变量max和min都有一个值。
这是命令行错误:
Binarysearch.rb:15:in []': no implicit conversion from nil to integer (TypeError)
from Binarysearch.rb:15:in
搜索'
来自Binarysearch.rb:33:在''
这是代码:
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
target = 43
def search(primes, target)
range = (primes.size) - 1
min = (range - range).to_i
max = range.to_i
operations = 0
if primes[min] == target || primes[max] == target
puts "#{target}"
else
while primes[max] >= primes[min]
b = (min + max)/2
check = primes[b]
if check == target
puts "index #{primes[check]}"
puts "this took #{operations}"
break
end
if check < target
min = primes[check + 1]
elsif check > target
max = primes[check - 1]
end
operations += 1
end
end
end
search(primes)
答案 0 :(得分:1)
您将check
设置为等于其中一个素数。
check = primes[b]
想象一下(例如)支票包含53。
现在,在此代码中,您将min或max设置为等于Prime数组元素54或52的值......
if check < target
min = primes[check + 1]
elsif check > target
max = primes[check - 1]
end
但是,你没有多个素数元素,所以min(或max)设置为nil
(当你引用数组范围之外的数组元素时,你总是得到nil)
array = [2,4]
p array[6]
#-> nil