2011-05-22 3 views
2
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!"); 
    } 

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

ответ

4

Вы должны ломаться, когда вы найдете матч:

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

Если я добавлю перерыв, другое, если после него это не сработает. – chief

+2

Вы использовали скобки? – MByD

0

Добавить возвращение; до конца вашего, если будет найдено, и до конца вашего заявления 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; 
}