Java 嵌套迭代器抛出 IllegalStateException
Java nested Iterator throws IllegalStateException
我有四个不同的 ArrayList。我想尝试所有可能的值组合。
如果第一个组合没有产生满足我的约束的结果,我想从第一个列表中删除第一个值,然后使用下一个值再次执行整个操作。
我为每个 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;
}
这可能是因为 teratorFarbe1.remove()
在 iteratorFarbe1.hasNext()
的两次调用之间调用了不止一次
我有四个不同的 ArrayList。我想尝试所有可能的值组合。
如果第一个组合没有产生满足我的约束的结果,我想从第一个列表中删除第一个值,然后使用下一个值再次执行整个操作。
我为每个 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;
}
这可能是因为 teratorFarbe1.remove()
在 iteratorFarbe1.hasNext()