无法填充网格。每次我这样做,我得到一个stackoverflow错误。这是我目前的代码:
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);
}
这是错误(部分内容,太大而不能发布所有内容。只是重复了那两个语句):
java.lang.StackOverflowError
at info.gridworld.actor.Actor.putSelfInGrid(Actor.java:123)
at CKiller.removeSelfFromGrid(CKiller.java:120)
这是说这是问题
laugh.putSelfInGrid(grid, loc);
答案 0 :(得分:0)
完成以下操作:
- 您是否在removeSelfFromGrid()方法调用之前定义了laugh
?它没有在它之前指定的类型。
- 变量location
应该不是ArrayList吗?它可能是一个Location对象。
- 已经定义了int direction
吗?
- 你为什么要调用getGrid()和getLocation()?他们没有做任何有益的事情。
- CKiller是否从Actor类继承了putSelfInGrid()方法?
请包含CKiller类的完整代码以及包含removeSelfFromGrid()的主类。
答案 1 :(得分:0)
我认为您的问题是您覆盖了removeSelfFromGrid()
方法。您应该已经创建了一个新方法,例如fillGrid()
。
当一个演员调用putSelfInGrid()
时,如果Location
中当前有另一位演员,则调用removeSelfFromGrid()
,你将其覆盖以填充{{1}上的每个Location
与演员。如果网格上有任何其他演员,他们将调用Grid
,这将导致再次填充网格等。
只需修复removeSelfFromGrid()
中的代码,将其放入新方法并恢复以前的代码,就应该很好。