Javaで8の字パターンを出力するプログラムの作成方法
本記事では、Javaを使って数字の「8」の字を模したアスタリスク(*)パターンをコンソールに出力する方法を解説します。パターンの描画には、複数のforループとprint文を組み合わせます。ループ処理への理解を深めたい初心者の方に最適な題材です。
入出力のイメージ
入力
ユーザーが次のように数値を入力したとします。
Enter the number : 8
出力
すると、プログラムは次のような「8」の字パターンを出力します。
****** * * * * * * * * * * * * ****** * * * * * * * * * * * * ******
アルゴリズム
パターンを出力するための手順は以下のとおりです。
- 処理を開始します。
- 整数型の変数 i、j、k、my_input を宣言します。
- ユーザーから値を入力してもらうか、あらかじめ値を定義します。
- 「my_input × 2 − 1」の計算結果を変数 k に代入します。これがパターン全体の行数になります。
- 外側のforループで行を、内側のforループで列を制御しながら反復処理を行います。
- 現在の行が先頭・中央・末尾のいずれかに該当するかどうかを判定し、横線を描くか縦線を描くかを出し分けます。
- 1行分の出力が終わったら改行して、次の行へ移ります。
- すべての行を出力し終えたら、完成したパターンを表示して処理を終了します。
例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」を模したパターンを簡単に描画できます。ぜひ入力値を変更して、さまざまな大きさのパターン生成にも挑戦してみてください。
-
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
-
Pythonで逆三角形の星形パターン(*)を出力するプログラム
Pythonで星(アスタリスク)のパターンを逆順、つまり逆三角形の形に出力したい場合、「for」ループを使用するのが最もシンプルな方法です。forループを使えば、指定した範囲の数値を順番に繰り返し処理しながら、必要な文字を必要な回数だけ出力できます。ポイントは、ループが1回回るごとにカウント値を減算していくことです。以下に具体的な実装例を示します。サンプルコードN=6 print(変数Nを + str(N) + に初期化しました) print(逆順の星形パターンを表示します) for i in range(N, 0, -1): print((N-i) * + i * *)実行結果変