2014-05-01 184 views
0

無法填充網格。每次我這樣做,我得到一個stackoverflow錯誤。這裏是我當前的代碼:Gridworld填充網格

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.StackOverflowError 
at info.gridworld.actor.Actor.putSelfInGrid(Actor.java:123) 
at CKiller.removeSelfFromGrid(CKiller.java:120) 

它說這是問題

laugh.putSelfInGrid(grid, loc); 

回答

0

請仔細閱讀以下內容:

- 您是否在removeSelfFromGrid()方法調用之前定義了laugh?它之前沒有指定類型。

- 是否變量location不是ArrayList?它可能是一個Location對象。

- 是否已定義int direction

- 爲什麼要調用getGrid()和getLocation()?他們沒有做任何有益的事情。

- 是否CKiller繼承了Actor類中的putSelfInGrid()方法?

請包括CKiller類的完整代碼以及包含removeSelfFromGrid()的主類。

0

我認爲你的問題是你重寫removeSelfFromGrid()方法。你應該創建一個新的方法,如fillGrid()

當一個演員叫putSelfInGrid(),如果在Location它調用removeSelfFromGrid()目前另一個演員,你推翻了,以填補每一個LocationGrid跟個演員。如果網格上還有其他演員,他們會再撥打removeSelfFromGrid(),導致網格重新填充等。

只需修復removeSelfFromGrid()中的代碼,將其放入一個新方法並恢復以前的代碼,然後您應該很好。