2016-12-04 12 views
0

私は4つの異なるArrayListを持っています。私は価値観のあらゆる組み合わせを試してみたい。Javaネストされたイテレータは、IllegalStateExceptionをスローする

最初の組み合わせで制約が満たされない場合は、最初の値を最初のリストから削除し、次の値ですべてを再実行します。

各ArrayListに対してイテレータを作成しましたが、最初のArrayListから値を削除するとIllegalStateExceptionがスローされます。

これは私のコードです:

public static boolean revise(Haus haus1, Haus haus2) { 
    boolean removed = false; 

    Iterator<String> iteratorFarbe1 = haus1.getFarbListe().iterator(); 
    while (iteratorFarbe1.hasNext()) { 
     String farbe1 = iteratorFarbe1.next(); 

     Iterator<String> iteratorFarbe2 = haus2.getFarbListe().iterator(); 
     while (iteratorFarbe2.hasNext()) { 
      String farbe2 = iteratorFarbe2.next(); 

      Iterator<String> iteratorLand1 = haus1.getLandListe().iterator(); 
      while (iteratorLand1.hasNext()) { 
       String land1 = iteratorLand1.next(); 

       Iterator<String> iteratorLand2 = haus2.getLandListe().iterator(); 
       while (iteratorLand2.hasNext()) { 
        String land2 = iteratorLand2.next(); 

        Haus checkHaus1 = new Haus(haus1.getNummer(), farbe1, land1); 
        Haus checkHaus2 = new Haus(haus2.getNummer(), farbe2, land2); 

        if (!checkConstraints(checkHaus1, checkHaus2)) { 
         iteratorFarbe1.remove(); 
         removed = true; 
        } 
       } 
      } 
     } 
    } 
    return removed; 
} 

答えて

0

teratorFarbe1.remove()iteratorFarbe1.hasNext()

+0

の2回の呼び出しの間に複数回呼び出すので、これが起こる可能性さて、それを動作させるために、異なるこれを行うにはそこに方法はありますか? – alena

+0

@alena一番外側のループにラベルを追加し、 'continue'を使うことができます。 – Bubletan

+0

はい、@Bubletanが推奨するラベルを使用できます。 – Sergi

関連する問題