Бинарный поиск - отображение результатов - PullRequest
2 голосов
/ 22 мая 2011
    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!");
    }

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

Ответы [ 2 ]

4 голосов
/ 22 мая 2011

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

if(Value.equals(ArrayList[Pivot].LastNamePlayer))
{
    System.out.println(ArrayList[Pivot].NamePerson);
    break;
}
0 голосов
/ 22 мая 2011

Добавить возврат;до конца вашего if и до конца вашего оператора 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;
}
...