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

Javaで8の字パターンを出力するプログラムの作成方法

本記事では、Javaを使って数字の「8」の字を模したアスタリスク(*)パターンをコンソールに出力する方法を解説します。パターンの描画には、複数のforループとprint文を組み合わせます。ループ処理への理解を深めたい初心者の方に最適な題材です。

入出力のイメージ

入力

ユーザーが次のように数値を入力したとします。

Enter the number : 8

出力

すると、プログラムは次のような「8」の字パターンを出力します。

******
*    *
*    *
*    *
*    *
*    *
*    *
******
*    *
*    *
*    *
*    *
*    *
*    *
******

アルゴリズム

パターンを出力するための手順は以下のとおりです。

  1. 処理を開始します。
  2. 整数型の変数 i、j、k、my_input を宣言します。
  3. ユーザーから値を入力してもらうか、あらかじめ値を定義します。
  4. 「my_input × 2 − 1」の計算結果を変数 k に代入します。これがパターン全体の行数になります。
  5. 外側のforループで行を、内側のforループで列を制御しながら反復処理を行います。
  6. 現在の行が先頭・中央・末尾のいずれかに該当するかどうかを判定し、横線を描くか縦線を描くかを出し分けます。
  7. 1行分の出力が終わったら改行して、次の行へ移ります。
  8. すべての行を出力し終えたら、完成したパターンを表示して処理を終了します。

例1:ユーザーに入力させる場合

ここでは、Scannerクラスを使ってユーザーから数値を入力として受け取り、その値をもとにパターンを出力します。オンラインの実行環境などでも、実際に動作を確認できます。

import java.util.Scanner;
public class EightPattern{
   public static void main(String[] args){
      int my_input, k, i, j;
      System.out.println("Required packages have been imported");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("A reader object has been defined ");
      System.out.print("Enter the number : ");
      my_input = my_scanner.nextInt();
      System.out.println("The 8 pattern : ");
      // パターン全体の行数(2×n−1)
      k = my_input * 2 - 1;
      for(i = 1; i <= k; i++){
         // 最上部・中央・最下部の行は横線を描く
         if(i == 1 || i == my_input || i == k){
            for(j = 1; j <= my_input; j++){
               if(j == 1 || j == my_input)
                  System.out.print(" ");
               else
                  System.out.print("*");
            }
         }else{
            // それ以外の行は左右の縦線だけを描く
            for(j = 1; j <= my_input; j++){
               if(j == 1 || j == my_input)
                  System.out.print("*");
               else
                  System.out.print(" ");
            }
         }
         System.out.println();
      }
   }
}

実行結果

Required packages have been imported
A reader object has been defined
Enter the number : 8
The 8 pattern :
******
*    *
*    *
*    *
*    *
*    *
*    *
******
*    *
*    *
*    *
*    *
*    *
*    *
******

例2:値を事前に定義しておく場合

こちらの例では、入力値をプログラム内であらかじめ定義しています。ユーザーの入力が不要なため、ロジックの確認やテストを手軽に行えます。

public class EightPattern{
   public static void main(String[] args){
      int my_input, k, i, j;
      my_input = 8;
      System.out.println("The size is defined as " + my_input);
      System.out.println("The 8 pattern : ");
      // パターン全体の行数(2×n−1)
      k = my_input * 2 - 1;
      for(i = 1; i <= k; i++){
         if(i == 1 || i == my_input || i == k){
            for(j = 1; j <= my_input; j++){
               if(j == 1 || j == my_input)
                  System.out.print(" ");
               else
                  System.out.print("*");
            }
         }else{
            for(j = 1; j <= my_input; j++){
               if(j == 1 || j == my_input)
                  System.out.print("*");
               else
                  System.out.print(" ");
            }
         }
         System.out.println();
      }
   }
}

実行結果

The size is defined as 8
The 8 pattern :
******
*    *
*    *
*    *
*    *
*    *
*    *
******
*    *
*    *
*    *
*    *
*    *
*    *
******

仕組みのポイント

このプログラムの核となるのは、次の2点です。

  • 行数の計算:「8」の字は上下2つの四角形で構成されるため、全体の行数は「入力値 × 2 − 1」となります。中央の1行を上下の四角形が共有するイメージです。
  • 条件分岐による描き分け:外側のループ変数 i が 1、my_input、k のいずれかと一致する行(最上部・中央・最下部)では、両端を空白にして中間を「*」で埋めた横線を出力します。それ以外の行では、両端だけに「*」を置いた縦線を出力します。

このように、二重ループとif文による条件分岐を組み合わせるだけで、数字の「8」を模したパターンを簡単に描画できます。ぜひ入力値を変更して、さまざまな大きさのパターン生成にも挑戦してみてください。

  1. Javaで行列をZ字形に出力するプログラムの書き方

    行列(マトリックス)を「Z」の字形に沿って出力するには、1行目を左から右へ → 右端から左下への対角要素 → 最終行を左から右へ の順に要素を表示していきます。本記事では、その処理を実現するJavaプログラムをサンプルコードとともに解説します。 サンプルコード import java.lang.*; import java.io.*; public class Demo{ public static void z_shape(int my_arr[][], int n){ int i = 0, j, k; // 1行目を左から右へ出力 f

  2. Pythonで逆三角形の星形パターン(*)を出力するプログラム

    Pythonで星(アスタリスク)のパターンを逆順、つまり逆三角形の形に出力したい場合、「for」ループを使用するのが最もシンプルな方法です。forループを使えば、指定した範囲の数値を順番に繰り返し処理しながら、必要な文字を必要な回数だけ出力できます。ポイントは、ループが1回回るごとにカウント値を減算していくことです。以下に具体的な実装例を示します。サンプルコードN=6 print(変数Nを + str(N) + に初期化しました) print(逆順の星形パターンを表示します) for i in range(N, 0, -1): print((N-i) * + i * *)実行結果変