Java の配列の基本 多次元配列 簡単な言葉で配列の配列として定義できます。多次元配列のデータは、表形式 (行順) で保存されます。
構文:
データ・タイプ [1 次元][2 次元][]..[N 次元] 配列名 = 新しいデータ型 [サイズ1][サイズ2]….[サイズN];
どこ:
- データ・タイプ : 配列に格納されるデータのタイプ。例: int、char など。
- 寸法 : 作成された配列の次元。例: 1D、2D など。
- 配列名 : アレイの名前
- サイズ1、サイズ2、…、サイズN : それぞれの寸法のサイズ。
例:
Two dimensional array: int[][] twoD_arr = new int[10][20]; Three dimensional array: int[][][] threeD_arr = new int[10][20][30];>
多次元配列のサイズ : 多次元配列に格納できる要素の総数は、すべての次元のサイズを乗算することで計算できます。
例えば: 配列 int[][] x = 新しい int[10][20] 合計 (10*20) = 200 個の要素を保存できます。同様に、配列 int[][][] x = 新しい int[5][10][20] 合計 (5*10*20) = 1000 個の要素を保存できます。
多次元配列の応用
● 多次元配列は、データを表形式で保存するために使用されます。たとえば、生徒のロール番号と採点の保存は、多次元配列を使用して簡単に行うことができます。もう 1 つの一般的な使用法は、画像を 3D 配列に保存することです。
● 動的プログラミングの問題では、問題の状態を表すために多次元配列が使用されます。
● これらとは別に、行列の乗算、グラフの隣接行列表現、グリッド検索問題など、多くの標準的なアルゴリズムの問題にも応用できます。
二次元配列 (2D-Array)
2 次元配列は、多次元配列の最も単純な形式です。理解しやすいように、2 次元配列は 1 次元配列の配列として見ることができます。
間接的な申告方法:
- 宣言 – 構文:
data_type[][] array_name = new data_type[x][y]; For example: int[][] arr = new int[10][20];>
- 初期化 – 構文:
array_name[row_index][column_index] = value; For example: arr[0][0] = 1;>
例: 1
ジャワ
ビジェイ映画俳優
import> java.io.*;> public> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr => new> int> [> 10> ][> 20> ];> > arr[> 0> ][> 0> ] => 1> ;> > System.out.println(> 'arr[0][0] = '> + arr[> 0> ][> 0> ]);> > }> }> |
>
>出力
arr[0][0] = 1>
例: 4*4 行列のデフォルト値を持つ 2D 配列の実装
ジャワ
public> class> TwoDArray {> > public> static> void> main(String[] args) {> > int> rows => 4> ;> > int> columns => 4> ;> > int> [][] array => new> int> [rows][columns];> > int> value => 1> ;> > for> (> int> i => 0> ; i for (int j = 0; j array[i][j] = value; value++; } } System.out.println('The 2D array is: '); for (int i = 0; i for (int j = 0; j System.out.print(array[i][j] + ' '); } System.out.println(); } } }> |
>
>出力
The 2D array is: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16>
説明:
- 行と列の数は、変数 row と columns を使用して指定します。 2D 配列は、配列にメモリを割り当てる new 演算子を使用して作成されます。配列のサイズは行と列で指定されます。
直接申告方法: 構文:
data_type[][] array_name = { {valueR1C1, valueR1C2, ....}, {valueR2C1, valueR2C2, ....} }; For example: int[][] arr = {{1, 2}, {3, 4}};>
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > for> (> int> i => 0> ; i <> 2> ; i++)> > for> (> int> j => 0> ; j <> 2> ; j++)> > System.out.println(> 'arr['> + i +> ']['> + j +> '] = '> > + arr[i][j]);> > }> }> |
>
>出力
arr[0][0] = 1 arr[0][1] = 2 arr[1][0] = 3 arr[1][1] = 4>
2 次元配列の要素へのアクセス
2 次元配列の要素は通常、次のように参照されます。 x[i][j] ここで、「i」は行番号、「j」は列番号です。
構文:
x[row_index][column_index]>
例えば:
int[][] arr = new int[10][20]; arr[0][0] = 1;>
上記の例は、1 行目、1 列目に存在する要素を表しています。 注記 : 配列のサイズが N の場合、配列内。そのインデックスは 0 から N-1 になります。したがって、row_index 2 の場合、実際の行番号は 2+1 = 3 になります。 例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > System.out.println(> 'arr[0][0] = '> + arr[> 0> ][> 0> ]);> > }> }> |
>
>出力
arr[0][0] = 1>
表形式での 2D 配列の表現:
2 次元配列は、行番号が 0 から (x-1) まで、列番号が 0 から (y-1) までの範囲の「x」行と「y」列を含むテーブルとして見ることができます。 3 行 3 列の 2 次元配列「x」を以下に示します。
2D 配列を表形式で出力します。
2 次元配列のすべての要素を出力するには、ネストされた for ループを使用します。このためには 2 つの for ループが必要です。1 つは行を走査するもので、もう 1 つは列を走査するものです。
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > for> (> int> i => 0> ; i <> 2> ; i++) {> > for> (> int> j => 0> ; j <> 2> ; j++) {> > System.out.print(arr[i][j] +> ' '> );> > }> > System.out.println();> > }> > }> }> |
>
>出力
1 2 3 4>
例: ユーザー入力による 2D 配列の実装
ジャワ
import> java.util.Scanner;> public> class> Main {> > public> static> void> main(String[] args)> > {> > Scanner scan => new> Scanner(System.in);> > System.out.print(> 'Enter number of rows: '> );> > int> rows = scan.nextInt();> > System.out.print(> 'Enter number of columns: '> );> > int> columns = scan.nextInt();> > int> [][] multidimensionalArray=> new> int> [rows][columns];> > // Now you can use the array like a regular> > // 2-dimensional array> > for> (> int> i => 0> ; i for (int j = 0; j multidimensionalArray[i][j]= (i + 1) * (j + 1); } } for (int i = 0; i for (int j = 0; j System.out.print(multidimensionalArray[i][j]+ ' '); } System.out.println(); } scan.close(); } }> |
>
>
出力
Enter number of rows: 3 Enter number of columns: 3 1 2 3 2 4 6 3 6 9>
- このコードは、2 次元配列の行数と列数を入力するようユーザーに求めます。 Scanner クラスは、ユーザー入力を読み取るために使用されます。次に、指定された行数と列数を持つ整数の 2 次元配列を作成し、配列の各要素に i*j を割り当てます。
- 2 次元を超える多次元配列を作成する場合は、配列の配列を作成するのと同じ方法を使用できます。たとえば、3 次元配列を作成するには、2 次元配列の配列を作成します。
三次元配列 (3D-Array)
3 次元配列は、多次元配列の複雑な形式です。 3 次元配列は、理解しやすいように 2 次元配列の配列として見ることができます。
間接的な申告方法:
- 宣言 – 構文:
data_type[][][] array_name = new data_type[x][y][z]; For example: int[][][] arr = new int[10][20][30];>
- 初期化 – 構文:
array_name[array_index][row_index][column_index] = value; For example: arr[0][0][0] = 1;>
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr => new> int> [> 10> ][> 20> ][> 30> ];> > arr[> 0> ][> 0> ][> 0> ] => 1> ;> > System.out.println(> 'arr[0][0][0] = '> + arr[> 0> ][> 0> ][> 0> ]);> > }> }> |
>
タイガーライオンの違い
>出力
arr[0][0][0] = 1>
直接申告方法: 構文:
data_type[][][] array_name = { { {valueA1R1C1, valueA1R1C2, ....}, {valueA1R2C1, valueA1R2C2, ....} }, { {valueA2R1C1, valueA2R1C2, ....}, {valueA2R2C1, valueA2R2C2, ....} } }; For example: int[][][] arr = { {{1, 2}, {3, 4}}, {{5, 6}, {7, 8}} };>
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } }, { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > for> (> int> i => 0> ; i <> 2> ; i++)> > for> (> int> j => 0> ; j <> 2> ; j++)> > for> (> int> z => 0> ; z <> 2> ; z++)> > System.out.println(> 'arr['> + i> > +> ']['> > + j +> ']['> > + z +> '] = '> > + arr[i][j][z]);> > }> }> |
>
>出力
arr[0][0][0] = 1 arr[0][0][1] = 2 arr[0][1][0] = 3 arr[0][1][1] = 4 arr[1][0][0] = 5 arr[1][0][1] = 6 arr[1][1][0] = 7 arr[1][1][1] = 8>
3 次元配列の要素へのアクセス
3 次元配列の要素は通常、次のように参照されます。 x[i][j][k] ここで、「i」は配列番号、「j」は行番号、「k」は列番号です。
構文:
x[array_index][row_index][column_index]>
例えば:
int[][][] arr = new int[10][20][30]; arr[0][0][0] = 1;>
上の例は、宣言された 3D 配列の最初の配列の最初の行と最初の列に存在する要素を表しています。
注記 : 配列のサイズが N の場合、配列内。そのインデックスは 0 から N-1 になります。したがって、row_index 2 の場合、実際の行番号は 2+1 = 3 になります。
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } }, { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > System.out.println(> 'arr[0][0][0] = '> + arr[> 0> ][> 0> ][> 0> ]);> > }> }> |
>
>出力
arr[0][0][0] = 1>
表形式での 3D 配列の表現:
3 次元配列は、行番号の範囲が 0 から (x-1)、列番号の範囲が 0 から (y-1) である「x」行と「y」列を含む配列のテーブルとして見ることができます。 3 行 3 列を含む 3 つの配列を含む 3 次元配列を以下に示します。
3D 配列を表形式で出力します。
3 次元配列のすべての要素を出力するには、ネストされた for ループを使用します。このためには、3 つの for ループが必要です。1 つは配列を走査するため、2 つ目は行を走査するため、もう 1 つは列を走査するためです。
例:
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } },> > { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > for> (> int> i => 0> ; i <> 2> ; i++) {> > for> (> int> j => 0> ; j <> 2> ; j++) {> > for> (> int> k => 0> ; k <> 2> ; k++) {> > System.out.print(arr[i][j][k] +> ' '> );> > }> > System.out.println();> > }> > System.out.println();> > }> > }> }> |
>
>出力
1 2 3 4 5 6 7 8>
実行時の多次元配列の挿入:
このトピックでは、実行時にユーザー定義の入力を多次元配列に取り込むことが強制されます。これは、ユーザーが実行時に最初にプログラムにすべての入力を与え、すべての入力が入力された後、プログラムが各入力に応じて出力を与えることに重点を置いています。これは、ユーザーが最初に複数の異なる値を持つ複数のテストケースの入力を行い、それらの作業がすべて完了した後にプログラムが出力を開始する場合に便利です。例として、入力配列内の偶数と奇数の合計数を見つけてみましょう。ここでは 2 次元配列の概念を使用します。
ここでは、今後のコードでのさまざまな要素の使用法を説明するいくつかのポイントを示します。
- 行の整数はテスト ケースの数とみなされ、列の値は各テスト ケースの値とみなされます。
- 1 つの for() ループはテストケース番号の更新に使用され、もう 1 つの for() ループはそれぞれの配列値の取得に使用されます。
- すべての入力が完了すると、再度同じように 2 つの for() ループが使用され、指定された条件に従ってプログラムが実行されます。
- 入力の最初の行は、テストケースの合計数です。
- 2 行目は、最初の配列値の合計数を示します。
- 3 行目は配列値などを指定します。
実装:
ジャワ
import> java.io.*;> import> java.util.Scanner;> class> GFGTestCase {> > public> static> void> main(String[] args)> > {> > // Scanner class to take> > // values from console> > Scanner scanner => new> Scanner(System.in);> > // totalTestCases = total> > // number of TestCases> > // eachTestCaseValues => > // values in each TestCase as> > // an Array values> > int> totalTestCases, eachTestCaseValues;> > // takes total number of> > // TestCases as integer number> > totalTestCases = scanner.nextInt();> > // An array is formed as row> > // values for total testCases> > int> [][] arrayMain => new> int> [totalTestCases][];> > // for loop to take input of> > // values in each TestCase> > for> (> int> i => 0> ; i eachTestCaseValues = scanner.nextInt(); arrayMain[i] = new int[eachTestCaseValues]; for (int j = 0; j arrayMain[i][j] = scanner.nextInt(); } } // All input entry is done. // Start executing output // according to condition provided for (int i = 0; i // Initialize total number of // even & odd numbers to zero int nEvenNumbers = 0, nOddNumbers = 0; // prints TestCase number with // total number of its arguments System.out.println('TestCase ' + i + ' with ' + arrayMain[i].length + ' values:'); for (int j = 0; j System.out.print(arrayMain[i][j] + ' '); // even & odd counter updated as // eligible number is found if (arrayMain[i][j] % 2 == 0) { nEvenNumbers++; } else { nOddNumbers++; } } System.out.println(); // Prints total numbers of // even & odd System.out.println( 'Total Even numbers: ' + nEvenNumbers + ', Total Odd numbers: ' + nOddNumbers); } } } // This code is contributed by Udayan Kamble.> |
>
1 ~ 100 のローマ字番号
>
出力:
Input: 2 2 1 2 3 1 2 3 Output: TestCase 0 with 2 values: 1 2 Total Even numbers: 1, Total Odd numbers: 1 TestCase 1 with 3 values: 1 2 3 Total Even numbers: 1, Total Odd numbers: 2 Input: 3 8 1 2 3 4 5 11 55 66 5 100 101 55 35 108 6 3 80 11 2 1 5 Output: TestCase 0 with 8 values: 1 2 3 4 5 11 55 66 Total Even numbers: 3, Total Odd numbers: 5 TestCase 1 with 5 values: 100 101 55 35 108 Total Even numbers: 2, Total Odd numbers: 3 TestCase 2 with 6 values: 3 80 11 2 1 5 Total Even numbers: 2, Total Odd numbers: 4>