0

これは私にエラーを与えています。これは構文的に正しいと思いました。私はJavaの経験がありません。C++のみ。誰かが私が間違っていることを教えてもらえますか?

private enum Site{
    OPEN, BLOCKED }
Site[][] grid;

final Site DEFAULT_STATE = Site.OPEN;
/**
 * Constructor.
 */
public GridClass(int N)
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; i++)
        {
            grid[i][j] = DEFAULT_STATE;
        }
    }
}
4

3 に答える 3

3

あなたは宣言しているだけgridで、それを定義しているのではありません。

次のようなものが必要になります。

Site[][] grid = new Site[N][N];
于 2012-08-25T22:38:09.250 に答える
2

問題は、gridまだメモリを割り当てずにアクセスしていることです。

これをコンストラクターの最初の行として追加します。

grid = new Site[N][N];

受け取ったエラーは、行がであるnullポインターを逆参照しようとしているNullPointerExceptionため、と呼ばれます。grid[i][j]grid


さらに、2番目のforループはi++;と言います。する必要がありますj++

于 2012-08-25T22:39:28.953 に答える
0

コンストラクターで配列を作成する必要があります。これは、ここで次元がわかっているためです。Nはその時点でスコープ内にないため、これは静的初期化子では実行できません。

public GridClass(int N) {
   grid = new Site[N][N];
   for (int i=0;i<N;i++) {
      Arrays.fill(grid[i], DEFAULT_STATE);
   }
}
于 2012-08-26T02:25:40.677 に答える