2010-12-28 23 views
0

たとえば、私がEricという名前の人物を登録しようとすると、もう一度Ericを登録すると動作します。これは私が持っているコードでは起こらないはずです。 ericが既に登録されている場合は登録しないでください。 "=="java - registerの問題

if (person.getName() == name) 

あなたはJavaでは

if (person.getName().equals(name)) 

をしたい、非ため参照の等価です:

 private Person findName(String name) { 
     for (Person person : personer) { 
      if (person.getName() == name) { 
       return person; 
      } 
     } 
     return null; 
    } 





private boolean containsName(String name) { 

     return findName(name) != null; 

} 

答えて

2

あなたの問題は、この行である:ここでは私の完全なコードです - 主な型。 nameへの参照(つまり、その "アドレス")は、getName()によって返されたオブジェクトへの参照と同じではありません。

も参照してください:http://www.java-samples.com/showtutorial.php?tutorialid=221

+0

+1のコードの部分が間違っています。しかし、コードの設計も間違っています(私の記事を参照してください)。そして、_that_を修正した後は、手動で名前を比較する必要はありません。この問題は解決しません。 –

+0

私はここにワームの缶を開くのを気にする傾向がありますが、あなたは絶対に正しいです。 –

2

ブライアンの答えは正しいです。ただし、「ツリーの代わりにフォレスト」レベルでは、コードのデザインも修正する必要があります。

ソートされた名前のコレクションが必要で、既存の名前を検索できるようにするには、TreeMapを使用する必要があります。 ArrayList(各挿入時にソートしてもそれ以下である)は完全に間違ったデータ構造です。

+1

または 'TreeSet'です。あるいは 'HashSet'です。もちろん、5人のユーザーしかいない場合は、それほど重要ではありません。 –

+0

@Brian:+1はい、正しくありますが、「TreeSet」も良いですがあなたは自然な順序を使用することができ、カスタムコンパレータを書く必要はありません名前でキーを使用してマップを使用してください。 ( 'HashSet'は一般的な場合は問題ありませんが、ここでOPは名前でソートされた項目を望んでいます)。 –