Почему мой метод listIterator.next (). ToString для связанного списка не возвращает действительную строку? Он показывает исключение java .util.ConcurrentModificationException - PullRequest
0 голосов
/ 09 мая 2020

У меня есть простая карточная игра, которая в настоящее время просто перемешивает колоду из 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 + '\'' +
            '}';
}
...