Java Vector & ArrayindexoutofBoundsException - PullRequest
0 голосов
/ 12 июня 2018

Здравствуйте, коллеги-разработчики!У меня есть этот метод для моей программы Java ниже.Он имеет 52 карты (вектор v), которые перетасовываются, и он должен печатать только те, у которых нет карты с тем же символом, следующим за ними (так что если его Q сердец, то Король червей, он должен пропустить Король червей), его работакак и должно быть, но я получаю:

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс массива вне диапазона: 52 в java.util.Vector.get (Vector.java:748) at cardgame.Cardgame.shufflenosamebefore (Cardgame.java:507)

(507 - это строка if (v.get(i).getsymbol() != v.get(i + 1).getsymbol()) {)

 public void shufflenosamebefore() {
    Collections.shuffle(v);
    for (i = 0; i < v.size(); i++) {
        if (v.get(i).getsymbol() != v.get(i + 1).getsymbol()) {

            if (v.get(i).getsymbol() == 'T') {
                v.get(i).setsymbol('♣');
            }

            if (v.get(i).getsymbol() == 'P') {
                v.get(i).setsymbol('♠');
            }

            if (v.get(i).getsymbol() == 'C') {
                v.get(i).setsymbol('♦');
            }

            if (v.get(i).getsymbol() == 'H') {
                v.get(i).setsymbol('♥');
            }

            if (v.get(i).getnumber() == 11) {
                System.out.println("Card n." + (i + 1) + " is J " + v.get(i).getsymbol());
            } else if (v.get(i).getnumber() == 12) {
                System.out.println("Card n." + (i + 1) + " is Q " + v.get(i).getsymbol());
            } else if (v.get(i).getnumber() == 13) {
                System.out.println("Card n." + (i + 1) + " is K " + v.get(i).getsymbol());
            } else if (v.get(i).getnumber() == 0 || v.get(i).getnumber() == 1) {
                System.out.println("Card n." + (i + 1) + " is A " + v.get(i).getsymbol());
            } else {
                System.out.println("Card n." + (i + 1) + " is " + v.get(i).getnumber() + " " + v.get(i).getsymbol());
            }
        }
    }
}

Любой ввод, почему он дает мне эту ошибкуа сборка не удалась?Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Когда вы переходите к последней карточке в Списке, ваш первый оператор if if (v.get(i).getsymbol() != v.get(i + 1).getsymbol()) вызывает исключение IndexOutOfBounds, потому что i + 1 = List.size (), и это выходит за пределы.Вы можете исправить это с помощью цикла for for (i = 0; i < v.size()-1; i++)

0 голосов
/ 12 июня 2018

Вы переходите к последнему элементу в списке, затем сравниваете его со следующим элементом.

Интуиция не позволяет сравнить последний элемент со следующим элементом.Решите это, перейдя ко второму последнему элементу в списке i<size()-1

0 голосов
/ 12 июня 2018
v.get(i).getsymbol() != v.get(i + 1)

здесь последний элемент потерпит неудачу, так как вы тестируете этот элемент со следующим элементом, который не существует.

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