【Java】for文を使用してコンソールにピラミッドを出力する

■実装の概要

for文を使用して、コンソール上に「*」のピラミッドを作成する。

■制約事項・前提条件

  • 最初に何段のピラミッドを作成するか、ユーザに入力してもらう。
  • ユーザが入力した値が数字かどうかの判定は割愛する。
    ※例外エラー処理のみ実装する。

■実装のイメージ

▼ピラミッド部「*」の実装

ピラミッドを作成するにあたり、固定的な計算式は「N段目 x 2 – 1」で実装する。
N:ピラミッドの段数

例:3段目であれば、「*」の数は、3 x 2 – 1 = 5個

▼スペースの実装

中心にピラミッド「*」を出力する場合、必要に応じてスペースを出力する必要がある。
ピラミッドの段数が増えるにつれて、コンソールに出力するスペースの数も増加する。
スペースを実装する計算式は、「トータルの段数」 – 「現在の段数」とする。
なお、この計算式は、片側のスペース数である。

例:
ピラミッドの段数が全部で3段の場合

ピラミッドの段数が全部で4段の場合

■サンプルコード

package main;

import java.util.Scanner;

public class MakePyramidMain {
	
	// ピラミッドのマークとスペースをセット
	private static final String PYRAMID_MARK = "*";
	private static final String PYRAMID_SPACE = " ";
	
	// スペースをプロットする関数
	private static String PlotSpace(String input_str, int total_step, int now_step) {
		
		// 「トータルの段数」 - 「現在の段数」分、スペースを付与する
		for(int j = total_step - now_step; j > 0; j--) {
			input_str = input_str + PYRAMID_SPACE;
		}
		
		return input_str;
	}
	
	// ピラミッドマークをプロットする関数
	private static String PlotMark(String input_str, int now_step) {
		
		// 「現在の段数」x 2 - 1 個分、マークを付与する
		for(int k = 0; k < 2 * now_step - 1; k++) {
			input_str = input_str + PYRAMID_MARK;
		}
		
		return input_str;
	}
	
	
	// メイン処理
	public static void main(String[] args) {
		
		// スキャナーのインスタンス
		Scanner scan = new Scanner(System.in);
		
		try {
			
			// ユーザに段数を入力してもらう
			System.out.println("何段のピラミッドを作成しますか?:");
			int total_step = scan.nextInt();
			
			// 入力した段数分繰り返し
			for(int i = 1; i <= total_step; i++) {
				// 出力用の文字列初期化
				String output_step = "";
				
				// 左側のスペース部分を付与
				output_step = PlotSpace(output_step, total_step, i);
				
				// ピラミッドのマーク部分を付与
				output_step = PlotMark(output_step, i);
				
				// 右側のスペース部分を付与
				output_step = PlotSpace(output_step, total_step, i);
				
				// 作成したピラミッドの段を出力
				System.out.println(output_step);
			}
		
		// 例外処理
		}catch(Exception e) {
			System.out.println("例外エラー:" + e);
		
		// 終了処理
		}finally {
			// スキャナークローズ
			scan.close();
		}	
	}
}

■実行結果

・4段のピラミッド

何段のピラミッドを作成しますか?:
4
   *   
  ***  
 ***** 
*******

・10段のピラミッド

何段のピラミッドを作成しますか?:
10
         *         
        ***        
       *****       
      *******      
     *********     
    ***********    
   *************   
  ***************  
 ***************** 
*******************
タイトルとURLをコピーしました