Индекс массива Java выходит за границы - PullRequest
0 голосов
/ 11 июля 2010

ОК, так что мне кажется, что я получаю ошибку Array Index of Bounds в части моего кода.В частности, в строках 85-102 ...

Мой код: http://www.sosos.pastebin.com/f0JQBWui

Я просто хочу, чтобы он проверял наличие заблокированных плиток ВПЕРЕДИ времени, чтобы мой спрайт не двигался в направленииэто не можетЭто исключение случается только тогда, когда я нахожусь в правых или нижних углах моей карты.

Я УДОСТОВЕРЯЮСЯ, почему эта ошибка происходит, если, потому что, когда я нахожусь на углу ... она проверяет плитки на ПРАВО и ВНИЗ.этого, которого нет ...

Ответы [ 3 ]

2 голосов
/ 11 июля 2010

1) Способ, которым вы реализовали блокировку (tx, ty), он принимает только допустимые координаты доски (0 <= tx <= 12 и 0 <= ty <= 8).В противном случае он проверяет недопустимую позицию массива, создавая ArrayIndexOutOfBoundsException.Вы уверены, что это ваше намерение?Я думаю, что имеет смысл считать плитки вне игры заблокированными. </p>

2) В строках 85-102, похоже, много ошибок.Я думаю, что вы имели в виду что-то вроде:

        if (spawnX == 0 || blocked(spawnX - 1, spawnY)) {
            left = false;
            System.out.println("You can't go left!");
        }           
        if (spawnX == 12 || blocked(spawnX + 1, spawnY)) {
            right = false;
            System.out.println("You can't go right!");
        }
        if (spawnY ==0 || blocked(spawnX, spawnY - 1)) {
            up = false;
            System.out.println("You can't go up!");
        }
        if (spawnY == 8 || blocked(spawnX, spawnY + 1)) {
            down = false;
            System.out.println("You can't go down!");
        }

В любом случае, если вы исправите (1), как я предлагал, дополнительное условие ограничения для направления не требуется.

3) isInBound (r, c) реализован неправильно.Он всегда возвращает false, из-за условий c.

4) Есть много других проблем с кодом, но я не буду вдаваться в подробности.Как правило, постарайтесь сделать свой дизайн простым и убедитесь, что код не повторяется.

0 голосов
/ 11 июля 2010

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

0 голосов
/ 11 июля 2010

Вам нужно будет выполнить некоторые проверки границ в вашей заблокированной () функции. Убедитесь, что координаты, которые они вам дают, действительно существуют, и, если они этого не делают, возвращают некоторые «заблокированные» значения.

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