Javaで多次元配列を使って行列の掛け算(積)を計算するプログラム
この記事では、多次元配列(2次元配列)を使用して、Javaで2つの行列の積を計算する方法を解説します。行列とは、要素が行と列の形式で配置されたものであり、m行n列の行列は「m × n 行列」と呼ばれます。
行列内の個々の値は「要素」と呼ばれ、a[i][j] のように表されます。これは、要素 a が i行目・j列目の位置に存在することを意味します。
実際の動作例を見てみましょう。
入力例:
1つ目の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5
期待される出力:
2つの行列の積は以下の通りです: 49 32 35 39 40 36 106 65 75
アルゴリズム
ステップ1 − 開始する ステップ2 − input_matrix_1、input_matrix_2、resultant_matrix の3つの整数型行列を宣言する ステップ3 − 値を定義する ステップ4 − forループで両方の行列の各要素を反復処理し、1つ目の行列の [i][j] 位置の要素と、2つ目の行列の行の各要素を掛け合わせて合計し、その値を結果行列の [i][j] 位置に格納する。これを1つ目の行列のすべての要素に対して繰り返す ステップ5 − 結果を表示する ステップ6 − 終了する
例1:main関数ですべての処理をまとめる場合
ここでは、すべての操作を main 関数の中にまとめて記述します。
public class MultiplyMatrices {
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("1つ目の行列:");
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つ目の行列:");
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++) {
for (int k = 0; k < matrix_size; k++) {
resultant_matrix[i][j] += input_matrix_1[i][k] * input_matrix_2[k][j];
}
}
}
System.out.println("\n 2つの行列の積は以下の通りです:");
for(int[] row : resultant_matrix) {
for (int column : row) {
System.out.print(column + " ");
}
System.out.println();
}
}
}
出力
1つ目の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5 2つの行列の積は以下の通りです: 49 32 35 39 40 36 106 65 75
例2:オブジェクト指向で関数に分割する場合
ここでは、行列の掛け算の処理を独立したメソッドとしてカプセル化し、オブジェクト指向プログラミングのスタイルで記述します。
public class MultiplyMatrices {
static int matrix_size = 3;
static void multiply(int input_matrix_1[][], int input_matrix_2[][]){
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++) {
for (int k = 0; k < matrix_size; k++) {
resultant_matrix[i][j] += input_matrix_1[i][k] * input_matrix_2[k][j];
}
}
}
System.out.println("\n 2つの行列の積は以下の通りです:");
for(int[] row : resultant_matrix) {
for (int column : row) {
System.out.print(column + " ");
}
System.out.println();
}
}
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("1つ目の行列:");
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つ目の行列:");
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();
}
multiply(input_matrix_1, input_matrix_2);
}
}
出力
1つ目の行列: 2 3 4 5 2 3 4 6 9 2つ目の行列: 1 5 3 5 6 3 8 1 5 2つの行列の積は以下の通りです: 49 32 35 39 40 36 106 65 75
-
Javaのsplitメソッドを使ってマトリックス(行列)内の文字列を検索する方法
Javaのsplitメソッドを活用すると、マトリックス(行列)の中に特定の文字列が存在するかどうかを効率的に判定できます。この記事では、水平方向(行)だけでなく垂直方向(列)にも対応した文字列検索の実装例を紹介します。サンプルコードimport java.util.*; public class Demo { public static int search_string(String[] my_matrix, String search_string){ for (String input : my_matrix){ &nb
-
Javaは多次元配列をサポートしている?実態は「配列の配列」
結論:Javaに真の多次元配列は存在しない 結論から言うと、Javaは厳密な意味での多次元配列をサポートしていません。その代わりにJavaが提供しているのは、「配列の配列(array of arrays)」という仕組みです。 Javaで扱えるのは、あくまで「配列の配列」です。 Javaにおける二次元配列とは、実体としては一次元配列を要素として持つ配列にすぎません。 二次元配列の宣言例 int[][] arr = new int[2][4]; このコードは、長さ4のint型一次元配列への参照を2つ持つ配列を生成します。見た目上は2行4列の表のように扱えますが、内部的には独立した配列が入れ子