Me preguntaba por qué aparece el error: "método indefinido `<' para nil:NilClass" al compilar. Después de buscar los motivos, descubrí que no se puede usar [] en un objeto con valor nulo. Esto tiene sentido, pero no veo por qué mi matriz contendría cero. ¿Qué me estoy perdiendo?
def binary_search(n, arr) middle = arr.length #pick middle value i = 0 j = arr.length - 1 while i <= j if arr[middle] == n return true elsif arr[middle] < n i = middle + 1 middle = (i + j) / 2 else j = middle - 1 middle = (i + j) / 2 end end false end nums = [76,32,50,90,10,8,15,49] nums.sort puts nums.inspect binary_search(50, nums)Veamos un subconjunto simplificado del código:
arr = [76,32,50,90,10,8,15,49] middle = arr.length # 8 arr[middle] < 50 # NoMethodErrorlength es de 8.arr[8] es nil porque no hay ningún elemento en el índice 8. Recuerde que los índices de Ruby comienzan con 0.nil < 50 es un NoMethodError