Javaで多次元配列を使って2つの行列を加算するプログラムの書き方
この記事では、多次元配列(2次元配列)を使用して、Javaで2つの行列を加算する方法を詳しく解説します。
行列とは、要素を行と列の形式で配置したものです。m行n列の行列は「m × n 行列」と呼ばれます。行列内の個々の要素は a[i][j] のように表現でき、これは「aという行列のi行j列目に存在する要素」を意味します。
行列の加算とは
2つの行列を加算するには、同じサイズ(行数・列数が一致)である必要があります。計算は非常にシンプルで、1つ目の行列の [i][j] 位置にある要素と、2つ目の行列の同じ [i][j] 位置にある要素を足し合わせ、その結果を結果行列の [i][j] 位置に格納します。
以下に具体例を示します。
入力:
1つ目の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5
期待される出力:
2つの行列の和: 3 8 7 10 8 6 12 7 14
アルゴリズム
Step 1 - 開始 Step 2 - 3つの整数型行列(input_matrix_1、input_matrix_2、resultant_matrix)を宣言する Step 3 - 各行列の値を定義する Step 4 - forループで両方の行列の各要素を走査し、1つ目の行列の [i][j] 位置の要素と2つ目の行列の [i][j] 位置の要素を加算し、結果を resultant_matrix の [i][j] 位置に格納する Step 5 - 結果の行列を表示する Step 6 - 終了
例1:mainメソッドにすべての処理を記述する方法
この例では、すべての操作を「main」関数内にまとめて記述します。
public class AddMatrices {
public static void main(String[] args) {
int matrix_size = 3;
int[][] input_matrix_1 = {
{2, 3, 4},
{5, 2, 3},
{4, 6, 9}
};
System.out.println("最初の行列:\n");
for (int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
System.out.print(input_matrix_1[i][j] + " ");
}
System.out.println();
}
int[][] input_matrix_2 = {
{1, 5, 3},
{5, 6, 3},
{8, 1, 5}
};
System.out.println("2つ目の行列:\n");
for (int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
System.out.print(input_matrix_2[i][j] + " ");
}
System.out.println();
}
int[][] resultant_matrix = new int[matrix_size][matrix_size];
for(int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
resultant_matrix[i][j] = input_matrix_1[i][j] + input_matrix_2[i][j];
}
}
System.out.println("2つの行列の和は以下の通りです: ");
for(int[] row : resultant_matrix) {
for (int column : row) {
System.out.print(column + " ");
}
System.out.println();
}
}
}
出力結果
最初の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5 2つの行列の和は以下の通りです: 3 8 7 10 8 6 12 7 14
例2:オブジェクト指向プログラミングで関数化する方法
この例では、処理を関数としてカプセル化し、オブジェクト指向プログラミングのスタイルで実装します。
public class AddMatrices {
static int matrix_size = 3;
static void add(int input_matrix_1[][], int input_matrix_2[][]){
for (int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
System.out.print(input_matrix_2[i][j] + " ");
}
System.out.println();
}
int[][] resultant_matrix = new int[matrix_size][matrix_size];
for(int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
resultant_matrix[i][j] = input_matrix_1[i][j] + input_matrix_2[i][j];
}
}
System.out.println("\n2つの行列の和は以下の通りです: ");
for(int[] row : resultant_matrix) {
for (int column : row) {
System.out.print(column + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] input_matrix_1 = {
{2, 3, 4},
{5, 2, 3},
{4, 6, 9}
};
System.out.println("最初の行列:");
for (int i = 0; i < matrix_size; i++) {
for (int j = 0; j < matrix_size; j++) {
System.out.print(input_matrix_1[i][j] + " ");
}
System.out.println();
}
int[][] input_matrix_2 = { {1, 5, 3},
{5, 6, 3},
{8, 1, 5}
};
System.out.println("\n2つ目の行列: ");
add(input_matrix_1, input_matrix_2);
}
}
出力結果
最初の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5 2つの行列の和は以下の通りです: 3 8 7 10 8 6 12 7 14
まとめ
Javaで2つの行列を加算する処理は、2重のforループを使って対応する位置の要素同士を足し合わせるだけで実現できます。例1のようにmainメソッドに直接記述する方法は手軽ですが、例2のように処理を独立したメソッドに分離することで、コードの再利用性や可読性が向上し、より保守しやすいプログラムになります。ぜひ実際にコードを実行して、動作を確認してみてください。
-
【Java】ソートされていない2つの配列をマージしてソート済み配列を作成する方法
この記事では、ソートされていない2つの配列を1つにマージし、最終的に昇順にソートされた配列を作成するJavaプログラムを解説します。 処理の流れ ソートされていない2つの配列を用意する 両方の配列の要素数の合計と同じサイズの結果配列を作成する ループ処理で各配列の要素を結果配列へコピーする Arrays.sort() メソッドで結果配列を昇順にソートする まず、ソートされていない2つの配列を用意しましょう。 int[] arr1 = new int[] {50, 22, 15, 40, 65, 75}; int[] arr2 = new int[] {60, 45, 10, 20, 35,
-
Javaは多次元配列をサポートしている?実態は「配列の配列」
結論:Javaに真の多次元配列は存在しない 結論から言うと、Javaは厳密な意味での多次元配列をサポートしていません。その代わりにJavaが提供しているのは、「配列の配列(array of arrays)」という仕組みです。 Javaで扱えるのは、あくまで「配列の配列」です。 Javaにおける二次元配列とは、実体としては一次元配列を要素として持つ配列にすぎません。 二次元配列の宣言例 int[][] arr = new int[2][4]; このコードは、長さ4のint型一次元配列への参照を2つ持つ配列を生成します。見た目上は2行4列の表のように扱えますが、内部的には独立した配列が入れ子