Javaでのピラミッドパターンプログラム

パターンプログラムは、面接で面接者の論理的思考能力を理解するためによく使用されます。ピラミッドパターンは非常に人気があり、その作成方法のロジックを理解すれば、同じ結果を得るためのコードの記述は簡単なタスクです。

Javaにおけるピラミッドパターンプログラム

ここでは、数字や記号などを使用して異なるピラミッドパターンを作成するためのいくつかの例を提供します。また、Javaプログラムにおける逆ピラミッドパターンの作成例も見ていきます。コードをシンプルに保つことで、理解しやすくします。

数字のピラミッドパターン

最初のパターンを見ると、各行には同じ数が同じ回数印刷されています。ただし、各行には「行数-i」という数の先行する空白があります。このパターンを印刷するプログラムを見てみましょう。

package com.journaldev.patterns.pyramid;

import java.util.Scanner;

public class PyramidPattern {

	private static void printPattern1(int rows) {
		// 行のためのforループ
		for (int i = 1; i <= rows; i++) {
			// 数字の前のスペース
			int numberOfWhiteSpaces = rows - i;

			//先頭のスペースを印刷する
			printString(" ", numberOfWhiteSpaces);

			//数字を印刷する
			printString(i + " ", i);

			//次の行に移動する
			System.out.println("");
		}
	}

	//指定された回数だけ文字列を印刷するためのユーティリティ関数
	private static void printString(String s, int times) {
		for (int j = 0; j < times; j++) {
			System.out.print(s);
		}
	}

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		System.out.println("Please enter the rows to print:");
		int rows = scanner.nextInt();
		// System.out.println("Rows = "+rows);
		scanner.close();

		System.out.println("Printing Pattern 1\n");
		printPattern1(rows);

	}

}

上記のプログラムを実行すると、以下の出力が得られます。

Please enter the rows to print:
9
Printing Pattern 1

        1 
       2 2 
      3 3 3 
     4 4 4 4 
    5 5 5 5 5 
   6 6 6 6 6 6 
  7 7 7 7 7 7 7 
 8 8 8 8 8 8 8 8 
9 9 9 9 9 9 9 9 9 
Pyramid Pattern Java Program Output

増加する数字のピラミッドパターン

以下はパターン2を印刷する関数です。重要なポイントは、先頭のスペースの数と数字が増加する順序です。

/**
 * 
 * Program to print below pyramid structure
 *      1         
       1 2        
      1 2 3       
     1 2 3 4      
    1 2 3 4 5     
   1 2 3 4 5 6    
  1 2 3 4 5 6 7   
 1 2 3 4 5 6 7 8  
1 2 3 4 5 6 7 8 9 
*/
private static void printPattern2(int rows) {
	// 行のためのforループ
	for (int i = 1; i <= rows; i++) {
		// 数字の前のスペース
		int numberOfWhiteSpaces = rows - i;

		//先頭のスペースを印刷する
		printString(" ", numberOfWhiteSpaces);

		//数字を印刷する
		for(int x = 1; x<=i; x++) {
			System.out.print(x+" ");
		}

		//次の行に移動する
		System.out.println("");
	}
}

文字のピラミッド

これは非常にシンプルなもので、計算や操作なしに文字を印刷するだけです。

/**
 * Program to print following pyramid structure
        *         
       * *        
      * * *       
     * * * *      
    * * * * *     
   * * * * * *    
  * * * * * * *   
 * * * * * * * *  
* * * * * * * * * 

*/
private static void printPattern3(int rows) {
	// 行のためのforループ
	for (int i = 1; i <= rows; i++) {
		// 数字の前の空白スペース
		int numberOfWhiteSpaces = rows - i;

		// 先頭の空白スペースを印刷
		printString(" ", numberOfWhiteSpaces);

		// 文字を印刷
		printString("* ", i);

		// 改行
		System.out.println("");
	}
}

ピラミッドパターン4プログラム

/**
* 
*               1 
              1 2 1 
            1 2 3 2 1 
          1 2 3 4 3 2 1 
        1 2 3 4 5 4 3 2 1 
      1 2 3 4 5 6 5 4 3 2 1 
    1 2 3 4 5 6 7 6 5 4 3 2 1 
  1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 
*/

private static void printPattern4(int rows) {
	// 行のためのforループ
	for (int i = 1; i <= rows; i++) {
		// 数字の前の空白スペース
		int numberOfWhiteSpaces = (rows-i)*2;

		// 先頭の空白スペースを印刷
		printString(" ", numberOfWhiteSpaces);

		// 数字を印刷
		for(int x=1; x0; j--) {
			System.out.print(j+" ");
		}

		// 改行
		System.out.println("");
	}
}

注意: 各行には2*r-1個の数字があります。したがって、数字を印刷する前に(rows-i)*2個の空白スペースがあります。その後、数字は1から「i」まで、そして再び1まで始まります。この数字を印刷するための論理的な手順には、2つのforループが必要です。

Javaでのピラミッドパターン5プログラム

/**
 * 
 *                9 
                8 9 8 
              7 8 9 8 7 
            6 7 8 9 8 7 6 
          5 6 7 8 9 8 7 6 5 
        4 5 6 7 8 9 8 7 6 5 4 
      3 4 5 6 7 8 9 8 7 6 5 4 3 
    2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 
  1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 
*/
private static void printPattern5(int rows) {
	// 行のためのforループ
	for (int i = rows; i >= 1; i--) {
		// 数字の前の空白スペース
		int numberOfWhiteSpaces = i*2;

		// 先頭の空白スペースを印刷
		printString(" ", numberOfWhiteSpaces);

		// 数字を印刷
		for(int x=i; x=i; j--) {
			System.out.print(j+" ");
		}

		// 改行
		System.out.println("");
	}
}

文字の逆ピラミッドパターン

逆ピラミッドプログラムのコードスニペットを以下に示します。

/**
 * 
* * * * * * * * * 
 * * * * * * * * 
  * * * * * * * 
   * * * * * * 
    * * * * * 
     * * * * 
      * * * 
       * * 
        * 
 */
private static void printPattern6(int rows) {
	// 行のためのforループ
	for (int i = rows; i >= 1; i--) {
		// 数字の前にあるスペース
		int numberOfWhiteSpaces = rows - i;

		// 先頭のスペースを表示
		printString(" ", numberOfWhiteSpaces);

		// 文字を表示
		printString("* ", i);

		// 次の行に移動
		System.out.println("");
	}
}

数字の逆ピラミッドパターン

数字で作られた逆ピラミッドパターンの例を見てみましょう。

	/**
	 * 
9 9 9 9 9 9 9 9 9 
 8 8 8 8 8 8 8 8 
  7 7 7 7 7 7 7 
   6 6 6 6 6 6 
    5 5 5 5 5 
     4 4 4 4 
      3 3 3 
       2 2 
        1 
	 */
private static void printPattern7(int rows) {
	// 行のためのforループ
	for (int i = rows; i >= 1; i--) {
		// 数字の前にあるスペース
		int numberOfWhiteSpaces = rows - i;

		// 先頭のスペースを表示
		printString(" ", numberOfWhiteSpaces);

		// 文字を表示
		printString(i+" ", i);

		// 次の行に移動
		System.out.println("");
	}
}

結論

多種多様なピラミッドパターンがあります。最も重要なポイントは、数字と空白がどのように配置されるかのパターンを理解することです。パターンが明確になれば、Javaや他のプログラミング言語でも簡単にコードを書くことができます。特定のパターンのプログラムを探している場合は、教えていただければお手伝いします。

さらなる読み物

Javaにおける文字列プログラムおよびJavaプログラミングの面接質問

完全なコードや他のプログラミング例は、GitHubリポジトリから確認できます。

Source:
https://www.digitalocean.com/community/tutorials/pyramid-pattern-programs-in-java