2016-09-11 8 views
-2

私はユーザーIDを取得し、それが既に存在するかどうかを確認するためにリストをチェックしようとしていました。存在する場合は、「IDはすでに存在します」というメッセージが表示されていない場合はそれを印刷し、ユーザー名を取り込んでリストに格納します。リスト全体で重複を見つけるには

private LinkedList<Person> people = new LinkedList<Person>(); 

    private void addPerson(){ 
      int personId = readPersonId(); 
      Person person = person(personId); 
      if (person.hasId){ 
      System.out.println("ID already exists"); 
      } 
      else{ 
      String s = readName(); 
      people.add(new Person(personId, s, 2)); 
      } 
     } 

しかし、私のプログラムは何らかの理由で最初のループで停止します。

+3

あなたはループを表示していません...あなたのプログラムは "停止"していますか?ハングしたり例外を与えたりしますか? – John3136

+0

また、 'person.hasId'とは何ですか? – UnholySheep

+0

リストの代わりにセットを使用することを検討してください。重複を含むことはできません。 –

答えて

0

あなたがすでに持っている人のリストを見て、同じIDを持つ人を探してください。一致するものがない場合は、先頭に移動して新しい人をリストに追加します。

private LinkedList<Person> people = new LinkedList<Person>(); 

private void addPerson(){ 
    int personId = readPersonId(); 
    boolean found = false; 

    for (Person curr : people) { 
     if (curr.getId() == personId){ 
      System.out.println("ID already exists"); 
      found = true; 
      break; 
     } 
    } 

    if (!found) { 
     Person person = person(personId); 
     String s = readName(); 
     people.add(person); 
    } 
} 
+1

説明のないコードは誰にも役立ちません!この答えをより良くするために説明を追加してください – Li357

0

あなたはセットにし、セットのサイズは、ArrayListのサイズよりも小さい場合には、これらの2を比較するよりも、あなたのArrayListをダンプすることができ、その後、重複があります。

ArrayList<Integer> list = ...; 
Set<Integer> set = new HashSet<Integer>(list); 

if(set.size() < list.size()){ 
    /* There are duplicates in your arrayList */ 
} 
+0

与えられたIDが重複しているかどうかを調べるのに役立ちません。 – John3136

関連する問題