Двоичный поиск — отображение результатов

#java #infinite-loop #binary-search

#java #бесконечный цикл #двоичный поиск

Вопрос:

     public void Find() {

    String Value = "";
    System.out.println("Search Name");
            Value = Input.next();

    int Begin, End, Pivot;

    Begin = 0;
    End = CurrentCount;

    while(End - Begin > 1 ) {
        Pivot = Begin   (End - Begin)/2;

        if(Value.equals(ArrayList[Pivot].LastNamePlayer))
         System.out.println(ArrayList[Pivot].NamePerson);

        else if(Value.compareTo(ArrayList[Pivot].LastNamePlayer) < 0)
            End = Pivot;
        else
            Begin = Pivot;
        }
       if (Value.equals(ArrayList[Begin].LastNamePlayer))
            System.out.println(ArrayList[Begin].NamePerson );
           else if(Value.equals(ArrayList[End].LastNamePlayer))
             System.out.println(ArrayList[End].NamePerson);
           else
          System.out.println("Not Found!");
    }
  

Похоже, что это позволит найти нужную запись в массиве. Проблема в том, что вывод результата выполняется в бесконечном цикле. Каков наилучший способ отображения результата?

Ответ №1:

Вам нужно прервать, когда вы найдете совпадение:

 if(Value.equals(ArrayList[Pivot].LastNamePlayer))
{
    System.out.println(ArrayList[Pivot].NamePerson);
    break;
}
  

Ответ №2:

Добавьте return; в конец вашего if found и в конец вашего оператора else. Это завершит цикл while и завершит функцию.

 if (Value.equals(ArrayList[Begin].LastNamePlayer)){
    System.out.println(ArrayList[Begin].NamePerson );
    return;
}
else if(Value.equals(ArrayList[End].LastNamePlayer))
    System.out.println(ArrayList[End].NamePerson);
    return;
else
    System.out.println("Not Found!");
    return;
}