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

これは、配列に適切なレコードがあるようです。問題は、それが結果を印刷する無限ループに入ってしまうことです。結果を表示する最良の方法は何ですか?バイナリ検索 - 結果を表示

答えて

4

あなたが試合を見つけたときに分割する必要があります。

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

休憩を追加すると、それ以降の場合はelseが機能しません。 – 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; 
} 
関連する問題