Java
 Computer >> コンピューター >  >> プログラミング >> Java

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) のシンプルな二重ループで構成されており、任意のサイズの正方行列・長方行列のどちらにも対応可能です。内部要素を空白で置き換えることで、境界部分だけを目視的に強調して表示できる点も実用的です。

  1. Pythonで2次元行列の要素を螺旋状(スパイラル順)に出力するプログラム

    プログラミングの定番問題のひとつに、「2次元行列(マトリクス)の要素を螺旋状(スパイラル順)に出力する」というものがあります。本記事では、Pythonを使ってこの問題を解くためのアルゴリズムの考え方と実装例を、初心者の方にもわかりやすく解説します。スパイラル順の出力とは?2次元行列 mat が与えられたとき、その要素を渦を巻くようにたどりながら出力します。具体的には、まず最初の行(mat[0][0]から)を左から右へすべて出力し、続いて最右列を上から下へ、次に最下行を右から左へ、さらに最左列を下から上へと訪問します。これを内側に向かって繰り返すことで、行列全体を一筆書きのように走査できます。入

  2. Pythonで行列をZ字形に出力するプログラムの解説

    本記事では、n×n の正方行列の要素を「Z」の字形に沿って出力する方法について、その考え方と実装の手順をわかりやすく解説します。 問題の概要 次数 n×n の正方行列が与えられたとき、その要素を Z 字形に従って順番に表示することが求められます。 Z 字形の走査は、以下の3つのステップで構成されます。 まず、最初の行(1行目)を左から右へ走査する 次に、主対角線(左上から右下へ向かう対角成分)を走査する 最後に、最終行(最後の行)を左から右へ走査する ここでは説明のため、あらかじめ用意した入力行列を使用して、コードの流れを示します。 サンプルコード arr = [[1, 2, 6, 9],