Java ConcurrentModificationException без повторения через него

Я пытаюсь запрограммировать игру Java Domino без интерфейса atm, и у меня есть исключение concurrentModification, и я не добавляю и не удаляю его во время итерации. Более того, когда я перебираю их, я просто печатаю их значения.

Я разработал систему классов с классом Player, у которого есть список. В этом классе я удаляю костяшки каждого игрока. Я пробовал повторять с помощью итератора, но я не вижу никаких изменений.

do {
            if (counter >= players.size()) {
                counter = 0;
            }
            Player p = players.get(counter);
            System.out.println("It is " + p.getName() + " turn");
            if (lastdominoes.size() == 0) {
                System.out.println("There is no dominoes in the table. Please make a move:");
            } else {
                for (Entry<String, Domino> e : lastdominoes.entrySet()) {
                    System.out.print("The last dominoes played are:");
                    System.out.print(e.getValue().toString());
                }
            }
            System.out.println();
            System.out.println("Your dominoes are:");
            int numberaux = 0;
            String dominoesnumber = "";
            Iterator<Domino> iteratordominoes = p.getDominoes().iterator();
            while (iteratordominoes.hasNext()) {
                Domino d = iteratordominoes.next();
                System.out.print(d.toString());
                dominoesnumber += " " + numberaux + "  ";
                numberaux++;
            }
            System.out.println();
            System.out.printf(dominoesnumber);
            System.out.println("Please choose a domino:");
            int choosenDominoNumber = scan.nextInt();
            System.out.println("You are about to move the Domino" + p.getDominoes().get(choosenDominoNumber).toString());
            placeaDomino(p, p.getDominoes().get(choosenDominoNumber));
            System.out.printf("\n\n");
            if (p.endofGame()){endofgame=true;}
            counter++;
        } while (!endofgame);

Это место метод домино

 public boolean placeaDomino(Player p, Domino d) {
        if (playedDominoes.isEmpty()) {
            playedDominoes.add(d);
            unplayeddominoes.remove(d);
            lastdominoes.put(d.getDirection(), d);
            p.makeaMove(d);
            return true;
        } else if (lastdominoes.get(d.getDirection()).match(d)) {
            playedDominoes.add(d);
            unplayeddominoes.remove(d);
            lastdominoes.put(d.getDirection(), d);
            p.makeaMove(d);
            return true;
        }
        return false;
    }

и p.makeaMove в основном просто удаляет домино

public void makeaMove(Domino d){
        this.dominoes.remove(d);
    }

это выполнение программы, так что становится понятнее

 How many players you want to play with
2
There are 2 players in this table
It is Player 1 turn
There is no dominoes in the table. Please make a move:

Your dominoes are:
3/5 2/2 2/6 3/3 5/3 4/5 1/6 
 0   1   2   3   4   5   6  Please choose a domino:
2
You are about to move the Domino2/6 

Then exception occurs
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1239)
    at java.util.ArrayList$SubList.listIterator(ArrayList.java:1099)
    at java.util.AbstractList.listIterator(AbstractList.java:299)
    at java.util.ArrayList$SubList.iterator(ArrayList.java:1095)
    at java.util.AbstractCollection.remove(AbstractCollection.java:282)
    at dominolibrary.Player.makeaMove(Player.java:72)
    at dominolibrary.Table.placeaDomino(Table.java:116)
    at dominolibrary.Table.<init>(Table.java:79)
    at dominolibrary.DominoLibrary.main(DominoLibrary.java:18)
Java Result: 1

Что я хочу сделать в каждой итерации, так это удалить домино из домино игроков, пока список одного игрока не станет пустым.

Первый фрагмент в конструкторе?

Maurice Perry 18.02.2019 12:52

Да, весь первый сниппет в конструкторе

Ernest Barrachina 19.02.2019 21:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
35
0

Другие вопросы по теме