Javaで行列の境界要素を出力するプログラムの書き方
本記事では、行列(マトリックス)の境界要素を出力する方法について解説します。行列とは、要素を行と列の形式で表現したものです。境界要素とは、上下左右の4方向すべてが他の要素に囲まれていない要素、すなわち1行目・最終行・1列目・最終列に位置する要素のことを指します。
以下に具体例を示します。
入力例
入力行列: 9 8 9 8 8 7 8 7 7 6 7 6 6 5 6 5
出力例
行列の境界要素: 9 8 9 8 8 7 7 6 6 5 6 5
アルゴリズム
ステップ1 - 処理を開始する ステップ2 - 整数型の行列 input_matrix と、BoundaryElements クラスのオブジェクト border_values を宣言する ステップ3 - 行列の値を定義する ステップ4 - 二重のforループで行列の各要素を走査し、論理OR条件を使ってその要素が境界要素かどうかを判定する ステップ5 - 境界要素を表示する ステップ6 - 処理を終了する
例1:mainメソッド内で直接処理する場合
この例では、行列の値はあらかじめコード内で定義されており、mainメソッドの中で直接出力処理を行います。
public class BoundaryElements {
public static void main(String[] args) {
int input_matrix[][] = new int[][] {
{ 9, 8, 9, 8 },
{ 8, 7, 8, 7 },
{ 7, 6, 7, 6 },
{ 6, 5, 6, 5 }
};
System.out.println("定義された行列:");
for (int x = 0; x < input_matrix.length; x++) {
for (int y = 0; y < input_matrix[x].length; y++) {
System.out.print(input_matrix[x][y] + " ");
}
System.out.println();
}
BoundaryElements border_values = new BoundaryElements();
System.out.println("行列の境界要素:");
for (int x = 0; x < input_matrix.length; x++) {
for (int y = 0; y < input_matrix[x].length; y++) {
if (x == 0 || y == 0 || x == input_matrix.length - 1
|| y == input_matrix[x].length - 1) {
System.out.print(input_matrix[x][y] + " ");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}実行結果
定義された行列: 9 8 9 8 8 7 8 7 7 6 7 6 6 5 6 5 行列の境界要素: 9 8 9 8 8 7 7 6 6 5 6 5
例2:メソッドとして切り出して処理する場合
この例では、境界要素の出力処理を独立したメソッドとして定義し、mainメソッドから呼び出しています。処理を部品化することで、コードの再利用性と可読性が向上します。
public class BoundryElements {
public void Boundary_Elements(int input_matrix[][]) {
System.out.println("定義された行列:");
for (int x = 0; x < input_matrix.length; x++) {
for (int y = 0; y < input_matrix[x].length; y++) {
System.out.print(input_matrix[x][y] + " ");
}
System.out.println();
}
System.out.println("行列の境界要素:");
for (int x = 0; x < input_matrix.length; x++) {
for (int y = 0; y < input_matrix[x].length; y++) {
if (x == 0 || y == 0 || x == input_matrix.length - 1
|| y == input_matrix[x].length - 1) {
System.out.print(input_matrix[x][y] + " ");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
int input_matrix[][] = new int[][] {
{ 9, 8, 9, 8 },
{ 8, 7, 8, 7 },
{ 7, 6, 7, 6 },
{ 6, 5, 6, 5 }
};
BoundryElements border_values = new BoundryElements();
border_values.Boundary_Elements(input_matrix);
}
}実行結果
定義された行列: 9 8 9 8 8 7 8 7 7 6 7 6 6 5 6 5 行列の境界要素: 9 8 9 8 8 7 7 6 6 5 6 5
まとめ
境界要素の判定は、行インデックス x または列インデックス y が 0(先頭)もしくは length - 1(末尾)と一致するかどうかを論理OR演算子で確認するだけで実現できます。この手法は計算量 O(n×m) のシンプルな二重ループで構成されており、任意のサイズの正方行列・長方行列のどちらにも対応可能です。内部要素を空白で置き換えることで、境界部分だけを目視的に強調して表示できる点も実用的です。
-
Pythonで2次元行列の要素を螺旋状(スパイラル順)に出力するプログラム
プログラミングの定番問題のひとつに、「2次元行列(マトリクス)の要素を螺旋状(スパイラル順)に出力する」というものがあります。本記事では、Pythonを使ってこの問題を解くためのアルゴリズムの考え方と実装例を、初心者の方にもわかりやすく解説します。スパイラル順の出力とは?2次元行列 mat が与えられたとき、その要素を渦を巻くようにたどりながら出力します。具体的には、まず最初の行(mat[0][0]から)を左から右へすべて出力し、続いて最右列を上から下へ、次に最下行を右から左へ、さらに最左列を下から上へと訪問します。これを内側に向かって繰り返すことで、行列全体を一筆書きのように走査できます。入
-
Pythonで行列をZ字形に出力するプログラムの解説
本記事では、n×n の正方行列の要素を「Z」の字形に沿って出力する方法について、その考え方と実装の手順をわかりやすく解説します。 問題の概要 次数 n×n の正方行列が与えられたとき、その要素を Z 字形に従って順番に表示することが求められます。 Z 字形の走査は、以下の3つのステップで構成されます。 まず、最初の行(1行目)を左から右へ走査する 次に、主対角線(左上から右下へ向かう対角成分)を走査する 最後に、最終行(最後の行)を左から右へ走査する ここでは説明のため、あらかじめ用意した入力行列を使用して、コードの流れを示します。 サンプルコード arr = [[1, 2, 6, 9],