Исключение Java Index вне границ при печати сетки - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь написать программу, которая выводит объекты-домино из массива их в сетку, однако всякий раз, когда я запускаю ее, я получаю исключение индекса за пределами границ.Я могу сделать особую линию, которая движется и рисует каждое домино в массиве, который работает нормально, но сетка вызывает следующее:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at DominoGame.drawTable(DominoGame.java:182)
at DominoGame.redraw(DominoGame.java:258)
at DominoGame.restart(DominoGame.java:119)
at DominoGame.<init>(DominoGame.java:91)
at DominoGame.main(DominoGame.java:262)

Вот мой код:

    public void drawTable(){
        int i = 0;
        if(this.table.isEmpty()){
        }
        else{
            for(int col = 0;col<this.table.size();col++){
                for(int row = 0;row<this.table.size();row++){
                    this.table.get(i).draw(TABLE_LEFT+DOMINO_SPACING*row, TABLE_TOP+DOMINO_HEIGHT*col);
                    if(this.table.get(i+1) != null){
                        i++;
                    }
                }
            }
        }

    }

Большое спасибо за любую помощь

РЕДАКТИРОВАТЬ: Люди указали, что у меня был неправильный прирост во внутреннем цикле.Я исправил это, но все еще получаю ошибку.Спасибо

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

спасибо за помощь.Поскольку моему коду требовалась сетка шириной 7, я смог собрать этот код:

public void drawTable(){
    if(this.table.isEmpty()){
    }
    else{
        int rowCount = 0;
        int colCount = 0;
        for(int i = 0;i<this.table.size();i++){
            if(i%7 == 0){
                rowCount++;
                colCount = 0;
            }
            this.table.get(i).draw(TABLE_LEFT+DOMINO_SPACING*colCount, TABLE_TOP+DOMINO_HEIGHT*rowCount); 
            colCount++;
        }
    }
}

Этот код выполнил то, что я хочу, напечатав 7 домино в одном ряду, затем перейдя к следующему и напечатав еще 7Это можно сделать для любого размера сетки, просто изменив число 7 на другое.

Я просто хотел бы еще раз поблагодарить всех за вашу помощь, это сделало этот процесс немного менее достойным, чем в противном случае.

0 голосов
/ 22 мая 2018

Вы можете изменить свой код:

if(this.table.get(i+1) != null){
   i++;
}

на

if (i < this.table.size()-1 && this.table.get(i+1) != null) {
   i++;
}

Когда i = this.table.size () - 1, this.table.get (i + 1) вызовет IndexOutOfBoundsException.

0 голосов
/ 22 мая 2018

Предполагая, что ваша переменная "i" должна увеличиваться в большинстве строк строки *, вероятно, ее значение в конечном итоге превышает размер таблицы.

0 голосов
/ 22 мая 2018
this.table.get(i+1) //if i+1 does not exist and you want to call it, you get error

Java Api - метод get () в ArrayList

В описании вы увидите, в какой ситуации будет выдана ошибка

0 голосов
/ 22 мая 2018

Вы увеличиваете col вместо row во внутреннем цикле.Кроме того, вы перебираете свою таблицу странным образом: внешний цикл повторяется один раз для всех элементов с col, внутренний цикл делает то же самое с row (с вышеупомянутой опечаткой), и дополнительно у вас есть i,который определенно будет больше размера таблицы и используется для получения элементов из table.

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