Java ConcurrentModificationException без итерации по нему - PullRequest
0 голосов
/ 18 февраля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...