0

配列に対してループを使用して基本的な線形検索を実行し、期待値を返さない。与えられた:

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

「Monkey Boy」という名前が存在するかどうかを確認するために基本的な線形検索を実行し、そのインデックスを返そうとしています。

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

非常に混乱。何が起きてる?

4

2 に答える 2

1

よく見ると 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}"truei を返し、ループを中断します

検索linear_search(students, "Monkey Boy") "Monkey Boy"が配列[3]に存在し、最初array[i] == "#{name}"は==である場合、-1を返します。falseつまり、else部分を実行し、インクリメントなしでループを中断します"Alex""Monkey Boy"

他の部分を while から削除すると、以前の回答として、またはよりエレガントな方法で機能します

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
于 2015-04-26T06:41:08.573 に答える