У меня проблема с индексированием массива. Предполагается, что код перемещает объекты типа Ant вокруг сетки 20x20.Исправлен указатель Out Of Bounds Exception
public class Test {
Organism[][] grid = new Organism[20][20];
public static void main(String[] args) {
for (int i = 0; i < 20; i++){
for (int j = 0; j < 20; j++){
if(grid[i][j] instanceof Ant){
int xpos = i;
int ypos = j;
grid[i][j].move(xpos, ypos);
grid[i][j].breed(xpos, ypos);
}
}
}
}
Класс Ant распространяется на организм, класс Организм расширяет тест.
public class Ant extends Organism{
public void move(int xpos, int ypos){
Random rand = new Random();
int direction = rand.nextInt(3);
if(direction == 0){
if(grid[xpos][ypos + 1] == null && xpos <20 && ypos <20)
{
grid[xpos][ypos] = grid[xpos][ypos];
grid[xpos][ypos] = null;
{
}
}
}
Метод шаг должен выбрать случайное направление на сетке и переместить Ant там, если прилегающая пространство пусто. Он также не может выйти за пределы сетки 20x20. (Есть еще три петли для других направлений).
Если я изменяю шестую строчку в методе перемещения к:
if(grid[xpos][ypos] == null && xpos <20 && ypos <20)
Тогда не выбрасывается никакая ошибка.
Я стесняюсь опубликовать это, потому что его, вероятно, небольшая ошибка с моей стороны, но я смотрел на это несколько часов.
Помощь с благодарностью.
Это все еще дает мне ошибку. – newjersian1
Вы сделали аналогичные изменения в других 'if's? На какой строке выбрано исключение, и каково сообщение? –
Кстати, это определенно сбой в 'main()', потому что вы сначала перемещаете муравей из своей исходной ячейки, а затем пытаетесь развить ту же ячейку (которая теперь пуста). –