2

問題は、以前にコンストラクターで作成したマトリックスを出力しようとしていることですが、空のようです。

コンストラクタのコードは次のとおりです。

public Matrix(int row_col){
    int [][] randomMatrix = new int[row_col][row_col];
    Random rand = new Random();
    if (row_col > 0 && row_col < ROW_LIMIT && row_col < COL_LIMIT)
    for (int i = 0; i < randomMatrix.length; i++) 
     for (int j = 0; j < randomMatrix[0].length; j++)
         randomMatrix[i][j] = rand.nextInt(51);
}

メソッド print のコードは次のとおりです。

public void print(){
    int row = randomMatrix.length;
    int col = randomMatrix[0].length;
    for(int i=0 ; i < row ; i++)
     for(int j=0 ; j < col ; j++)
        System.out.print(randomMatrix[i][j]);
}

ご挨拶!

4

3 に答える 3

4

交換

int [][] randomMatrix = new int[row_col][row_col];

this.randomMatrix = new int[row_col][row_col];

コンストラクターは、メソッドが使用するインスタンス フィールドを初期化して埋める代わりに、ローカル変数を初期化して埋めます。print()

于 2012-12-15T16:13:41.853 に答える
1

randomMatrixはコンストラクターのスコープで直接定義されており、クラスのフィールドに格納されていないようです。

フィールドとしてすでにrandomMatrixがある場合は、コンストラクターメソッドの最初の行のint [] []を削除して、新しい変数を宣言する代わりにフィールドを参照するようにします。

于 2012-12-15T16:14:06.830 に答える
0

コンストラクター内で配列を宣言して初期化しrandomMatrix、コンストラクターのコードが実行されるとすぐに、配列がメソッドrandomMatrixのスコープから外れるためです。print

printしたがって、メソッドでアクセスしようとすると、そのようなrandomMatrixオブジェクトがないため、次のようになります。NullPointerException

于 2012-12-15T16:14:06.210 に答える