У меня есть простая карточная игра, которая в настоящее время просто перемешивает колоду из 52 карт и позволяет пользователю перебирать связанный список, содержащий объекты Card, с помощью итератора списка. Однако в этом методе метод listIterator.next (). ToString () генерирует исключение java .util.ConcurrentModificationException и не превращается в String. Я включил метод toString в класс Card, и вот первая часть моего кода:
public void runGame() {
Scanner scanner = new Scanner(System.in);
boolean quit = false; //var to quit game
boolean forward = true; //var to organise whether going forward or backward
printMenu(); //shows user the key bindings
while (!quit) {
int action = scanner.nextInt(); //obtains user input
scanner.nextLine(); //stops enter key errors
ListIterator<Card> listIterator = this.cards.listIterator(); //uses a list iterator
createCardList();
shuffleCardList(); //generates random card deck in this.cards linked list
switch (action) {
case 0: //quits game
System.out.println("Thanks for playing");
quit = true;
break;
case 1: //moves one position forward through list
if (!forward) { //if going backwards, sorts duplication error
if (listIterator.hasNext()) {
listIterator.next();
}
forward = true;
}
if (listIterator.hasNext()) { //goes to next card
System.out.println("Next card is " + listIterator.next().toString());
} else {
System.out.println("We have reached the end of the card deck");
forward = false;
}
break;
В то время как метод toString в классе Card:
@Override
public String toString() {
return "{" +
"suit='" + suit + '\'' +
", cardValue='" + cardValue + '\'' +
'}';
}