2016-12-04 174 views
0

我有四個不同的ArrayList。我想嘗試每種可能的價值組合。Java嵌套迭代器拋出IllegalStateException

如果第一個組合不會導致滿足我的約束條件,那麼我想從第一個列表中刪除第一個值,並使用下一個值再次完成整個事件。

我爲每個ArrayList創建了一個Iterator,但是當我從第一個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

好了兩個電話之間,是有辦法做到這一點不同,使其工作? – alena

+0

@alena你可以添加一個標籤到最外層的循環並使用'continue'。 – Bubletan

+0

是的,您可以使用@Bubletan建議的標籤。 – Sergi