2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】アスタリスクのピラミッド

Last updated at Posted at 2020-11-25

アスタリスクのピラミッド

Javaを使って入力した数の団だけアスタリスクでピラミッドを作成する、「 アスタリスクのピラミッド 」プログラムを作ったメモ。

完成品はこちら

【10段分のピラミッド】
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************

共通点を探す

このピラミッドがどのように作られているかを考えるために、「ピラミッドが何段になっても変わらない共通点」や、どういう規則で作られているかを考えるため、上記の10段のものに加え、3段で作ったピラミッドを作成して比較してみます。

【3段分のピラミッド】
  *
 ***
*****

ピラミッドの段数が10段でも、3段でも変わらない部分を考えてみると

  • アスタリスクの数は何段になっても奇数
  • 最上段は アスタリスク が必ず1個になる
  • 最下段は 空白 が必ず0になる
  • 一段増えるごとにアスタリスクの数は2つずつ増える
  • 一段増えるごとに 空白 の数は 1つずつ減る。
  • 一段に入力される空白の数は、(段数 - 1)

という部分が考えられます。

【3段の場合のピラミッドの場合】

  *    ← 最上段 ( "*" が必ず1個になる)
 ***   ← (一段増えるごとに 空白は1つずつ減り、アスタリスクは2つずつ増える)
*****  ← 最下段 ( " " が必ず0になる)
12345  ← 横マスの数 

やりたいことを文章化

やるべきことが見えたら、それを文章化して

  1. 空白の数を ( 段数 - 1 ) 個表示させる
  2. その横に アスタリスクを ( 段数 * 2 - 1 )個表示させる
  3. 改行する
  4. 1〜3の流れを段数分繰り返す ※(ただし、段数は前回のループに1つずつ足した数にする。)

これらを実現するために ループ文 を使いました。
つまり上記のリストの 1~3の処理を、段数の数だけループしてあげれば実現できそうです。
またループ内の処理も for文を使うことで効率良く書くことができそうなので、そちらの処理も 「多重for文」を使うと良さそうです。

つまり、4のfor文で、1~3の処理をくるむ形で作ることが出来ます。

①. ②~③の処理を 段の数だけループさせるためのループ分を作る。

  • n段のピラミッドを作る場合、iは 0から1段のため「 i < n 」と記述。
  • ①~②の処理 を内側に入れてループさせる。
for (int i = 0; i < lineCount; i++) {
	// ①~②の処理...
	....
	....
	}

②. 空白の数を ( 段数 - 1 ) 個表示させる

見るとピラミッドは 余白( 以下: space ) の数が、上から1つずつ減っていってます。
space は先程の3段ピラミッドを見てみると、**「( 段数 - 1 )個出力されている」**ことが見えてきます。
上のコードで使用した 「ループを重ねるごとに一つづつ増えていく i 」を使ってやれば、1ずつ減るというわけです。

  • space の初期値は 0 のため、予め1を足しておく。
  • 空白 (" ")は上から一つずつ減る

【Javaでのコード】

for (int space = 0; space < dan - i ; space++) {
    System.out.print(" ");
}

③. その横に アスタリスクを ( 段数 * 2 - 1 )個表示させ、改行する

【書き方】

  • その横に アスタリスクを ( 段数 * 2 - 1 )個表示させる
  • アスタリスクの数は何段になっても奇数
  • 一段増えるごとにアスタリスクの数は2つずつ増える

【Javaでのコード】

for (int j = 0; j <i * 2 - 1; j++) {
    System.out.print("*"); 
}

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

を段数分繰り返す ※(ただし、段数は前回のループに1つずつ足した数にする。)

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?