Gridworld填充网格

时间:2014-05-01 23:12:48

标签: java computer-science gridworld

无法填充网格。每次我这样做,我得到一个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);

2 个答案:

答案 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()中的代码,将其放入新方法并恢复以前的代码,就应该很好。