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().