Я пытаюсь запрограммировать 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
Что я хочу сделать в каждой итерации, это удалить домино из домино игроков, пока не появится один список игроковпуст.