0

グリッドを埋めるのに問題があります。それを行うたびに、スタックオーバーフローエラーが発生します。ここに私の現在のコードがあります:

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);
4

2 に答える 2

0

次の手順を実行します。

laugh-removeSelfFromGrid() メソッド呼び出しの前に定義していますか? その前にタイプが指定されていません。

-変数locationは ArrayList であってはなりませんか? Location オブジェクトである可能性があります。

-int はdirection既に定義されていますか?

- なぜ getGrid() と getLocation() を呼び出しているのですか? 彼らは何も有益なことをしていません。

- CKiller は Actor クラスから putSelfInGrid() メソッドを継承していますか?

CKiller クラスの完全なコードと、removeSelfFromGrid() を含むメイン クラスを含めてください。

于 2014-05-01T23:32:20.493 に答える
0

あなたの問題は、removeSelfFromGrid()メソッドをオーバーライドしたことだと思います。などの新しいメソッドを作成しておく必要がありますfillGrid()

アクターが を呼び出すとき、putSelfInGrid()その中に現在別のアクターが存在するLocation場合は、それをオーバーライドして、removeSelfFromGrid()すべてのアクターをアクターで埋めます。グリッド上に他のアクターがいる場合、それらは を呼び出します。これにより、グリッドが再び埋められます。LocationGridremoveSelfFromGrid()

のコードを修正しremoveSelfFromGrid()、それを新しいメソッドに入れ、以前のコードを復元するだけで、うまくいくはずです。

于 2014-05-02T01:03:38.673 に答える