2016-05-01 21 views
0

私はこの10次元の配列迷路10を生成しようとしていますが、10行の各行に0〜9の数字を付けていますが、配列の境界外の例外が続きます。私は私のインデックスとループフォーマットをチェックして、すべてが標準的に見えます。この10x10 2D配列を生成できないのはなぜですか?

public class MazeDemo { 

    public static void main(String[] args) { 
     Maze maze = new Maze(10, 10); 
     maze.generate(); 
    } 
} 

class Maze { 
    int N, M; 
    int[][] cell = new int[N][M]; 
    public Maze(int N, int M) { 
     this.N = N; 
     this.M = M; 
    } 

    public void generate() { 
     for (int i = 0; i < N; i++) { 
      int counter = 0; 
      for (int j = 0; i < M; j++) { 
       cell[i][j] = counter; 
       counter++; 
      } 
     } 
     display(cell, 10, 10); 

    } 

    public static void display(int a[][], int N, int M) { 
     for (int i = 0; i < N; i++) { 
      for (int j = 0; j < M; j++) { 
       System.out.print(a[i][j]); 
      } 
     } 
    } 
} 

ここでは何が起こっていますか?境界外の例外が発生するのはなぜですか?

答えて

2

cellを指定すると、NM0となります。

int N, M; 
int[][] cell; 
public Maze(int N, int M) { 
    this.N = N; 
    this.M = M; 
    this.cell = new int[N][M]; // <-- add this. 
} 

のようなものに変更し、 generateで、この

​​

for (int j = 0; j < M; j++) { 
+0

@ Elliot 2つの質問、なぜコンストラクタで配列を指定し、2番目にその形式の構文を持っていますか?ありがとうございました – SkyZ

+0

@SkyZ 'int N、M;'と言うとき、 'N'と' M'はプリミティブ 'int'なので、値は' 0'です。コンストラクタに初期化を入れないと、 '[0] [0]'という配列が得られます。構文の書式については、[JLS-15.10.1。 「アレイ作成式」(http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.1) –

0

問題がでgenerate方法である必要があります:

for (int j = 0; i < M; j++) 
       ^

for (int j = 0; j < M; j++) 
関連する問題