Gridworld Fill Grid

Возникли проблемы с заполнением сетки. Каждый раз, когда я делаю это, я получаю ошибку переполнения стека. Вот мой текущий код:

public void removeSelfFromGrid() {
    Grid<Actor> grid = getGrid();
    int rows = grid.getNumRows();
    int cols = grid.getNumCols();
    for (int i=0; i<rows; i++) {
        for (int j=0; j<cols; j++) {
            Location loc = new Location(i, j);
            laugh = new CKiller();
            laugh.putSelfInGrid(grid, loc);
        }   
    }    
}

и вот конструктор, если это необходимо

public CKiller()
 {
    Color c = null;
    setColor(c);
    getGrid();
    getLocation();
    location = new ArrayList<Location>();
    location.add(getLocation());
    setDirection(direction);
 }

И вот ошибка (часть этого, слишком большая, чтобы публиковать все. Просто повторяются эти 2 утверждения):

java.lang.StackruError
at info.gridworld.actor.Actor.putSelfInGrid(Actor.java:123)
at CKiller.removeSelfFromGrid(CKiller.java:120)

Это говорит, что это проблема

laugh.putSelfInGrid(grid, loc);

2 ответа

Я думаю, что ваша проблема в том, что вы преодолели removeSelfFromGrid() метод. Вы должны были создать новый метод, такой как fillGrid(),

Когда актер звонит putSelfInGrid(), если в настоящее время есть другой актер в этом Location это вызывает removeSelfFromGrid(), который вы преодолели, чтобы заполнить каждый Location на Grid с актером. Если в сетке есть другие актеры, они removeSelfFromGrid(), что приводит к повторному заполнению сетки и т. д.

Просто исправьте код в removeSelfFromGrid()Поместите его в новый метод и восстановите предыдущий код, и все будет хорошо.

Пройдите через следующее:

Вы определяете laugh до вызова метода removeSelfFromGrid()? У него нет указанного типа перед ним.

Должна ли переменная location не быть ArrayList? Это может быть объект Location.

-Инт direction уже определено?

-Почему вы вызываете getGrid() и getLocation ()? Они не делают ничего полезного.

- наследует ли CKiller метод putSelfInGrid() от класса Actor?

Пожалуйста, включите полный код класса CKiller, а также основной класс, который содержит removeSelfFromGrid().

Другие вопросы по тегам