Здравствуйте кидает Exception
ConcurrentModificationException на этой строчке
for (Transaction t : c.getTransactions())(64 строчка) на 2 итерации. Саму суть ошибки понимаю - случается она тогда, когда в цикле происходит удаление элементов итератора. Пытался remove изменить на
removeIF, но ошибка та же.
private static void iteration() {
Integer n = 1;
Integer k = 1;
Double maxProfit;
Integer clusterInd;
while (k > 0) {
System.out.println("Итерация " + n);
n++;
k = 0;
for (int i=0;i<clusters.size();i++) {
Cluster c = clusters.get(i);
for (Transaction t : c.getTransactions()) {//ошибку кидает здесь на 2 итерации
maxProfit = profit();
clusterInd = -1;
c.deleteTransaction(t);
int j = 0;
for (Cluster cl : clusters) {
if (j != i) {
cl.addTransaction(t);
Double p = profit();
if (p > maxProfit) {
maxProfit = p;
clusterInd = j;
}
cl.deleteTransaction(t);
}
j++;
}
if (clusterInd == -1){
clusters.get(i).addTransaction(t);
}else {
k++;
clusters.get(clusterInd).addTransaction(t);
}
}
}
}
System.out.println(k);
}
Функция, в которой происходит удаление транзакции:public void deleteTransaction(Transaction m) {
if (this.count > 0) {
String[] trans = m.getTrans();
for (String s : trans) {
this.square--;
if (freq.containsKey(s)) {
if (freq.get(s) > 0) {
this.freq.put(s, freq.get(s) - 1);
if (this.freq.get(s) == 0) {
this.width--;
freq.entrySet().removeIf(entry -> entry.getKey().equals(s));
}
}
}
}
this.count--;
if (this.count > 0) {
this.height = (double) this.square / this.width;
} else {
this.height = 0.0;
}
transactions.removeIf(m::equals);
}
}
Логи:
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:939)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:893)
at com.lab6.ClopeAlgorithm.iteration(ClopeAlgorithm.java:64)
at com.lab6.ClopeAlgorithm.main(ClopeAlgorithm.java:96)