2016-03-30 12 views
0

問題が発生しました。オブジェクトがすでにarraylistに存在する場合、forループをチェックインする必要があります。オブジェクトが存在しないときは、作成する必要があります。しかし、私はこれをチェックする方法を見つけることができません。なぜなら、彼は常に最初のインデックスをチェックしてシャットダウンするか、最初のインデックスとオブジェクトが一致しないことをチェックします。したがって、ループが実現する前に3つの複製オブジェクトを作成します。それは遅すぎる。ここにコードです:arraylistでオブジェクトを見つけるためのJavaルーピングが過去のインデックスを取得する[0]

私は本当にあなたが解決策を得ることはできません私たちは助けてくれることを願っています。あなたの質問の私の理解から、

Klas klas = informatieSysteem.getKlasVanStudent(student);   // klascode van de student opzoeken 
    for (Les l : informatieSysteem.deLessen) { 
     if (l.getKlas().getKlasCode().contains(klas.getKlasCode()) && l.getStartTijdString().contains(begintijd) && l.getEindTijdString().contains(eindtijd) && l.getDateString().contains(datum) && l.getKlas().getStudentenKlas().contains(student)) { 
      System.out.println(l); 
      les = l; 
     } 
    } 
    if (student.getAbsentie().size() == 0) { 
     student.addabsentie(datum, begintijd, eindtijd, les, student); 
    } else { 
     for (int i = 0; i < student.getAbsentie().size(); i++) {//anders controle of dit object voorkomt in lijst. 
      Absentie ab = student.getAbsentie().get(i); 
      System.out.println(student.getAbsentie().size()); 
      if(student.getAbsentie().listIterator().next().getLes().equals(les)){ 
      //if ((ab.getLes().getDateString().equals(les.getDateString()))&& (ab.getLes().getStartTijdString().equals(les.getStartTijdString()))&&ab.getLes().getEindTijdString().equals(les.getEindTijdString())) { 
       System.out.println("niet else"); 
      }else{ 
       student.addabsentie(datum, begintijd, eindtijd, les, student); 
       break; 
      } 
     } 
    } 
    JsonArrayBuilder jab = Json.createArrayBuilder(); 
    for(Absentie ab: student.getAbsentie()) { 
           // Uiteindelijk gaat er een array... 
     jab.add(ab.getLes().getDateString()); 
    } 
    conversation.sendJSONMessage(jab.build().toString());      // terug naar de Polymer-GUI! 
} 
+1

'ArrayList'の代わりに' Set'を使いたいかもしれません。次に、オブジェクトが存在するかどうかをチェックする必要はありません。重複はありません。 https://docs.oracle.com/javase/7/docs/api/java/util/Set.html – Atri

+0

'for(Absentie ab:student.getAbsentie()) 'を使用してください。listIteratorが何をしているのかわかりませんコードでそれはちょっと読みにくいです。たぶんあなたはリファクタリングし、最初にそれをきれいにするべきです。 –

+0

は 'equ'(les)に設定された' les'変数ですか?どこ? –

答えて

2

はあなたのArrayListStudentインスタンスに存在する)にAbsentieインスタンスを追加しようとしています。重複を避けるために、その特定のインスタンスがすでに存在するかどうかを確認しようとしています。

ArrayListはそれのために定義されたcontains方法を持っているので、そこにそれをループにあなたのための必要がなく、そのようにそれを確認してください。 containsメソッドは、オブジェクト内で定義されたequalsメソッドを呼び出して、指定されたレコードに一致させます。だから、あなたはAbsentieクラスのoverrideequalsメソッドを確認し、制約を満たすフィールドと比較するだけです。

class Absentie{ 
     ... 
     @Override 
     public boolean equals(Absentie absentie){ 
      //Define your equality condition here 
     } 
    } 

配列がすでに含まれているかどうかを確認しようとしています。

Absentie absenties = student.getAbsentie(); 
    if(!absenties.contains(absentie){ 
     student.addAbsentie(absentie); 
    } 

また、あなたはIteratorsをそのように使用することは想定されていません。それらをどのように使用すべきかを理解するために、ドキュメントを参照してください。

+0

ああ私はとても愚かなされている、私は何が間違っているかわからない – Colivar

関連する問題