2012-03-17 3 views
1

プログラム全体でArrayListStudentのオブジェクトを最高の平均と姓の整数でソートし、検索を実行するオプションもあります。私のプログラムはバイナリ検索以外は完璧に動作しますが、私は絶対に失敗の原因を特定できません。私はすべての情報を印刷しています。ArrayListオブジェクトメソッドをバイナリ検索して文字列を取得しても、文字列が同一であるかどうかはわかりません。

生徒の名字(String)を参照する方法の生徒クラスがあります。

さらに、バイナリ検索のコードは次のとおりです。はい、私はCollectionsがこの目的のためのメソッドを持っていることを知っていますが、私のクラスでは自分で検索を書く必要があります。

private static void searchStudent(ArrayList<Student> a){ 
    Scanner reader = new Scanner(System.in); 
    System.out.print("Please enter search term: "); 
      String term = reader.next(); 

    //System.out.println(term + " " + term.length()); 
    System.out.println("---SEARCH RESULTS:---"); 
    for (int i = 0; i < a.size(); i++){ 
     String fName = (a.get(i).getFirstName()); 
     String lName = (a.get(i).getLastName()); 
     //System.out.println(fName + " " + fName.length()); 
     //System.out.println(lName + " " + lName.length()); 
      if (term == fName){ 
       System.out.println(a.get(i)); 
      } else if (term == lName){ 
       System.out.println(a.get(i)); 
      } 
    } 

} 

答えて

4

Javaでは、文字列を比較するのに、.equals()を使用する必要があります。例えば。これに代えて:

if (term == fName){ 

あなたはこれを実行する必要があります。

if (term.equals(fName)){ 

そうでない場合は、あなたが比較しているの参照のみを。

Btw、これはバイナリ検索ではなく、リニア検索です。たとえばバイナリ検索の実装を1つ表示することができます。ここでは文字列を比較するのに

あなたは、Stringクラスの.compareTo/.compareToIgnoreCase方法の代わりに、</>演算子を使用します。

+0

ああ、優秀です。どうもありがとうございました! – pearbear

+0

確かに、助けてうれしい! –

関連する問題