线性搜索未成功完成

Linear Search not completing successfully

在数组上循环执行基本线性搜索,而不是 return 预期值。给定:

students = ["Alex", "Kyle", "Libby", "Monkey Boy"]

我正在尝试进行基本线性搜索以查看名称 "Monkey Boy" 是否存在,并且 return 它是索引。

def linear_search(array, name)
  i = 0
  while i < array.length
    if array[i] == "#{name}"
      return i
    else
      return -1
    end
    i+=1
  end
end

linear_search(students, "Alex") # returns 0
linear_search(students, "Monkey Boy") # returns -1, should return 3

很困惑。这是怎么回事?

return -1 应该在 while 循环之外。

def linear_search(array, name)
  i = 0
  while i < array.length
    if array[i] == "#{name}"
      return i
    end
    i+=1
  end
  return -1 
end

仔细看你的while块不正确

def linear_search(array, name)
 i = 0
 while i < array.length
  if array[i] == "#{name}"
   return i
  else
   return -1
  end
  i+=1
 end
end

当你搜索时linear_search(students, "Alex") "Alex" 出现在数组 [0],array[i] == "#{name}"true 它 return i 并打破循环

当你搜索时linear_search(students, "Monkey Boy") "Monkey Boy" 出现在数组 [3] 中,第一次 array[i] == "#{name}"false"Alex" == "Monkey Boy" 它 return -1,即执行 else 部分并且 中断循环没有增量

如果您从 while 中删除 else 部分,它将作为较早的答案或以更优雅的方式工作

def linear_search(array, name)
  return array.index(name).nil? ? -1 : array.index(name)
end 

linear_search(students, "Kyle") # 0
linear_search(students, "Monkey Boy") # 3
linear_search(students, "Monkey") # -1