我得到一个TypeError说变量是零,但我不知道为什么

时间:2015-02-26 19:48:27

标签: ruby

好的,所以我试图在一个素数数组上写一个简单的二进制搜索。但似乎由于某种原因,指定的变量为零。但是当我检入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)

1 个答案:

答案 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