0

これはばかげた質問かもしれませんが、私はこれにうんざりしています。クラスオブジェクトを適切に初期化して、その中のメソッドと変数にアクセスできるようにするにはどうすればよいですか?これが私のコードです:

public class GenChunk {

Chunk c;
VBO vbo;

int worldSize = 64;
int var1 = 16; //x
int var2 = 16; //z
int var3 = 16; //y

public GenChunk(){
    gen();
}

public void gen(){
    c = new Chunk();
    if(c.chunkChanged == false){
        for(int i = 0; i < worldSize; i++){
            newChunk();
        }
    }
}

この行c = new Chunk()がスタックオーバーフローエラーを引き起こしています。理由はわかりますが(新しいインスタンスを作成し、メモリを消費するため)、コンストラクターで初期化するか、単に実行するとすぐにChunk c = new Chunk()、下の上部に次のように表示されpublic class GenChunk {ます。別のスタックオーバーフローエラー!クラスを初期化しないと、(明らかに)nullポインターを取得します。私のコードの何が問題になっていますか?私は何かを見落としているに違いありませんが、それを理解することはできません!

これが私のChunkクラスです。いくつかの空のメソッドがあります。

public class Chunk {

public boolean chunkChanged = false;
boolean enteredGame = true;

public int chunkID = 0;

Player player;

float var1;
float var2;
float var3;

public Chunk(){
    update();
}

private void update(){
    setUp();
}

private void setUp(){
    if(enteredGame){
        new GenChunk();
    }
}

private void checkChunkRebuild(int id){

}

private void rebuildOnPlayerChange(int id){
    if(enteredGame && chunkChanged == true){

    }
}

private float getPlayerX(){
    return player.var1;
}

private float getPlayerZ(){
    return player.var2;
}

private float getPlayerY(){
    return player.var3;
}

}

4

3 に答える 3

1

ChunkクラスはGenChunkの新しいインスタンスを作成し、次にChunkクラスの新しいインスタンスを作成し、スタックオーバーフローが発生するまで無限ループを作成します。

private void setUp(){
if(enteredGame){
    new GenChunk();
    }
}

それが始まるところです、そしてそれはで続きます

public void gen(){
    c = new Chunk();
if(c.chunkChanged == false){
    for(int i = 0; i < worldSize; i++){
        newChunk();
    }
  }
}

これはGenChunkコンストラクターで呼び出されます。

于 2013-02-07T23:33:07.720 に答える
0

GenChunkのコンストラクターで、を呼び出します。gen()これにより、のインスタンスが作成されますChunk

Chunkのコンストラクターで、を呼び出します。これは、のインスタンスを作成するupdate()呼び出しです。setUp()GenChunk

このプロセスは無期限に繰り返されます。したがって、スタックオーバーフローエラー。

于 2013-02-07T23:29:22.087 に答える
0
  • コンストラクターで、 (を介して)GenChuck新しいメソッドを作成します。Chunkgen
  • コンストラクターで、 (を介して)Chunk新しいメソッドを作成します。 デフォルトはtrueです。GenChunkupdateenteredGame

これは、スタックオーバーフローの原因となっている循環参照です。

于 2013-02-07T23:29:37.703 に答える