web-dev-qa-db-ja.com

二次元配列を作成するための構文

検討してください:

int[][] multD = new int[5][];
multD[0] = new int[10];

これは5行10列の2次元配列を作成する方法ですか。

このコードをオンラインで見ましたが、構文は意味がありませんでした。

403
AppSensei

以下を試してください。

int[][] multi = new int[5][10];

...これは、次のような簡単な説明です。

int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];

すべての要素はint0のデフォルト値に初期化されるので、上記も以下と同等です。

int[][] multi = new int[][]{
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
754
oldrinb

2次元配列を宣言し、宣言時に要素を直接次のように格納できます。

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

ここで int は配列に格納された整数型要素を表し、配列名は 'marks'です。配列は同じデータ型を持つ要素の集まりであるため、 int は "{"と "}"の中に表されているすべての要素のデータ型です。

上記のステートメントに戻ります。要素の各行は中括弧で囲む必要があります。行と各行の要素はコンマで区切る必要があります。

ステートメントを見てください。3行5列になるので、JVMは3 * 5 = 15ブロックのメモリーを作成します。これらのブロックは個別に次のように呼ぶことができます。

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]


注意:
n 要素を格納したい場合は、配列インデックスはゼロから始まり n-1 で終わります。 2次元配列を作成するもう1つの方法は、最初に配列を宣言し、次にnew演算子を使用してそれにメモリを割り当てることです。

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

上記の2つを組み合わせることで、次のように書くことができます。

int marks[][] = new int[3][5];
69
Indu Joshi

他の人が言ったようにそれらを作成することができます。もう1点追加する必要があります。各列に傾斜した2次元配列を作成することもできます。必ずしも同じ数の列を持つ必要はありません。

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
46

5 rowsと 10 columnsを持つ2次元配列を作成するための最も一般的な慣用句は次のとおりです。

int[][] multD = new int[5][10];

代わりに、以下を使用することもできます。これは、各行を明示的に初期化する必要がありますが、実際のものと似ています。

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}
27
João Silva

次のように宣言することも可能です。それは良いデザインではありませんが、うまくいきます。

int[] twoDimIntArray[] = new int[5][10];
9
ctomek

試してください:

int[][] multD = new int[5][10];

コードでは、2D配列の最初の行だけが0に初期化されています。2行目から5行目までは存在しません。あなたがそれらを印刷しようとするならば、あなたは彼ら全員のためにnullを得るでしょう。

8
dcernahoschi

Javaでは、2次元配列は1次元配列と同じものとして宣言できます。一次元配列では、次のように書くことができます。

  int array[] = new int[5];

ここで、intはデータ型、array []は配列宣言、そしてnew arrayは5つのインデックスを持つオブジェクトを含む配列です。

そのように、次のように2次元配列を書くことができます。

  int array[][];
  array = new int[3][4];

ここでarrayはintデータ型です。最初にそのタイプの1次元配列を宣言した後、3行4列の配列が作成されます。

あなたのコードで

int[][] multD = new int[5][];
multD[0] = new int[10];

つまり、5行の2次元配列を作成したということです。最初の行には10列あります。 Javaでは、必要に応じて各行の列サイズを選択できます。

7
Zishan
int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i
7
Kieran Horton
int rows = 5;
int cols = 10;

int[] multD = new int[rows * cols];

for (int r = 0; r < rows; r++)
{
  for (int c = 0; c < cols; c++)
  {
     int index = r * cols + c;
     multD[index] = index * 2;
  }
}

楽しい!

5
Albeoris

この方法を試してください:

int a[][] = {{1,2}, {3,4}};

int b[] = {1, 2, 3, 4};
2

これらのタイプの配列は、Javaではギザギザ配列として知られています。

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

このシナリオでは、配列の各行は異なる列数を保持します。上記の例では、1行目に3列、2行目に2列、3行目に5列が格納されます。この配列はコンパイル時に以下のように初期化できます。

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

配列内のすべての要素を簡単に繰り返すことができます。

for (int i = 0; i<multD.length; i++) {
    for (int j = 0; j<multD[i].length; j++) {
        System.out.print(multD[i][j] + "\t");
    }
    System.out.println();
}
2
ritesh9984