-1

それぞれが別のオブジェクトで満たされた、配列の 2D 配列を作成したいと考えています。私がこれまでに持っているものは次のとおりです。

class CustomCache{
    boolean dirty = false;
    int age  = 0;
    String addr;
    public CustomCache(boolean a, String b, int c){
    dirty = a;
        addr = b;
        age = c;
    }

}

class Setup {
    int wpb;
    CustomCache[] wpbArray = new CustomCache[wpb];
    public Setup(int a){
        wpb = a;
    }
}

 Setup[][] array = new Setup[numSets][numBlocks];
 for(int i=0; i<numSets; i++){
        for(int j=0; j<numBlocks; j++){
            array[i][j] = new Setup(wpb);
            for(int k=0; k<wpb; k++){
                array[i][j].wpbArray[k] = new CustomCache(false, "", 0);
            }
        }//end inner for
    }//end outer loop

私は取得し続けます

java.lang.ArrayIndexOutOfBoundsException: 0

つまり、配列は空です。それを修正する方法について何か考えはありますか?

4

1 に答える 1

5

これが問題です:

class Setup {
    int wpb;
    CustomCache[] wpbArray = new CustomCache[wpb];
    public Setup(int a){
        wpb = a;
    }
}

この行:

CustomCache[] wpbArray = new CustomCache[wpb];

コンストラクターの本体のに実行されwpbます - while はまだ 0 です。

class Setup {
    int wpb;
    CustomCache[] wpbArray;

    public Setup(int a) {
        wpb = a;
        wpbArray = new CustomCache[wpb];
    }
}

(より意味のある名前に変更し、プライベートの最終フィールドを使用することもお勧めしますが、それは別の問題です。)

于 2013-05-01T19:23:27.307 に答える