Java では、2 次元配列は配列の配列とみなされます。つまり、2 次元配列は特殊な 1 次元配列であり、2 次元配列の各要素は 1 次元配列です。
要素のデータ型 [][] 配列名 = new 要素のデータ型 [2次元配列の長さ][1次元配列の長さ];
int[][]arr=newint[3][2];
上記の状況は、3 つの 1 次元配列があり、各 1 次元配列には 2 つの要素があることを表しています。
要素のデータ型 [][] 配列名 = new 要素のデータ型 [2次元配列の長さ][];
int[][]arr=newint[3][];
上記の状況は、3 つの 1 次元配列があることを表していますが、各 1 次元配列の要素の数は不確実であり、各 1 次元配列の要素の数は異なる可能性があります。
要素のデータ型 [][] 配列名 = {{要素 1, 要素 2,…}, {要素 1, 要素 2,…},…};
int[][]arr={{1,2,3},{4,5},{6,7,8,9}};
上記の状況は、1 次元配列が 3 つあることを表しています。最初の 1 次元配列には 3 つの要素があり、2 番目の 1 次元配列には 2 つの要素があり、3 番目の 1 次元配列には 4 つの要素があります。 1 次元配列は異なる場合があります。
2 次元配列を宣言するには 2 つの形式があります。
配列要素の型 配列名[][];
array[][] 配列名の要素の型。
例えば:
charcat[][];charcat[][]cat;
2 次元配列の初期化は、同次元配列の初期化と同じです。動的初期化と静的初期化の 2 つの方法があります。
1) 最初に宣言してから静的に初期化する
要素のデータ型 [][] 2 次元配列名; 2 次元配列名 = 要素の新しいデータ型 [][]{{要素 1、要素 2、要素 3、...}、{要素 1、要素 2、要素 3、...} 2 行目}, …,{n 行目の値のリスト}};
2) 宣言中の静的初期化
要素のデータ型 [][] 2 次元配列名 = new 要素のデータ型 [][]{{要素 1, 要素 2, 要素 3,…},{2 行目の値リスト},…,{nth行値のリスト }};
注:右側の「新規要素[][]のデータ型」の「[][]」には行数と列数が{}内の要素数で決まるため、数値を記述することはできません。
3) 宣言と同時に静的に初期化する簡易的な書き方
要素のデータ型 [][] 二次元配列名 = {{要素1,要素2,要素3,…},{2行目の値リスト},…,{n行目の値リスト}};
例えば:
publicclassMain{publicstaticvoidmain(String[]args){int[][]arr={{1,2,3},{4,5},{6}};//配列を定義 System.out.println(arr[0 ][0]);//1System.out.println(arr[1][0]);//4System.out.println(arr[2][0]);//6System.out.println(arr[ 0][1]);//2System.out.println(arr[1][1]);//5System.out.println(arr[2][1]);//範囲外}}
動的初期化作成では内部の 1 次元配列の長さを宣言する必要がないため、各 1 次元配列の長さは異なっていても構いません。そのため、次の 2 つの初期化方法があります。
1)動的初期化1:ルール2次元テーブル
プログラマは配列の長さを指定し、後でその値を割り当てます。通常の 2 次元テーブルでは、各行の列数が同じであることを意味します。一般的な形式は次のとおりです。まず行数と列数を決定します。
要素[][]のデータ型 2次元配列名 = 新規要素[m][n]のデータ型;
ここで、m は、この 2 次元配列にある 1 次元配列の数、または 2 次元テーブルにある行の数を表し、n は、各 1 次元配列にある要素の数、またはセルの数を表します。各行にあります。
この時点で、配列が作成され、行と列の数が決定され、要素にデフォルト値が割り当てられます。
2次元配列名[行の添字][列の添字]=値;
例えば:
publicclassMain{publicstaticvoidmain(String[]args){int[][]arr=newint[3][2];/*2 次元配列 arr を定義します。この 2 次元配列には 3 つの 1 次元配列要素があります。 -次元配列 要素が2つあります */System.out.println(arr);//二次元配列の名前を出力 System.out.println(arr[0]);//最初の要素の名前を出力2 次元配列の名前と 1 次元配列の名前 System.out.println(arr[0][0]);//2 次元配列の要素を出力します}}
2) 動的初期化2: 不規則な2次元テーブル
不規則な 2 次元テーブルは、各行の列数が異なる可能性があることを意味します。その一般的な形式は、最初に行の合計数を決定します。
要素のデータ型[][] 2次元配列名 = 新規要素のデータ型[総行数][];
この時点では、行の合計数のみが決定され、各行は null になります。次に、各行の列数が決定され、各行の 1 次元配列が作成されます。
2次元配列名 [行の添字] = 新しい要素のデータ型 [行内の列の総数];
この時点で、new を渡す行の要素にはデフォルト値が設定され、new を渡さない行には依然として null が設定されます。 最後に、要素には値が割り当てられます。
2次元配列名[行の添字][列の添字]=値;
注: 不規則な 2 次元テーブルは、宣言後、内部 1 次元配列を初期化するときに省略できません。
//不規則な 2 次元テーブルは 2 次元配列を定義します int[][]arr=newint[3][]; //3 行、不明な列 //2 次元配列の要素値を初期化します arr[0]= newint[ ]{1};//これを arr[0]={1}arr[1]=newint[]{2,3};arr[2]=newint[]{4,5,6 と省略することはできません};
2 次元配列の走査は 1 次元配列の走査と同じです。異なる点は、まず、各 1 次元配列を走査するために外側のループが必要になることです。
for(inti=0;i<二次元配列名.length;i++){for(intj=0;j<二次元配列名[i].length;j++){System.out.print(二次元配列名[ i][j]);}System.out.println();}