繰り返し処理を使って図形を描く方法 〜Javaでピラミッドを作る基礎〜
目次
はじめに
Javaの繰り返し処理を使って、特定のパターンや図形を描くことは、プログラミング学習の中でよく出てくる練習です。図形を描く際に重要な考え方の一つが「出力回数を制御する」ことです。この記事では、繰り返し処理の条件が出力回数にどのように影響するかを解説し、ピラミッドや富士山のような図形を描く方法を具体的に説明します。
基本構造:出力回数を決めるループ
図形を描くときに、「行(縦方向)」と「列(横方向)」の2つの方向に対して繰り返しを行います。以下のような二重ループ構造で、縦方向に行のループ、横方向に列のループを作ります。
for (int i = 1; i <= height; i++) { // 行のループ
for (int j = 0; j < 出力回数; j++) { // 列のループ
// ここに出力処理を入れる
}
System.out.println(); // 行の終わりで改行
}
この中で、出力回数を制御する部分(上の例ではj < 出力回数)が、図形の形を作るポイントになります。
例:ピラミッドを描くプログラム
実際に、Javaでピラミッドを描くプログラムを見てみましょう。富士山の形を描くコードを例にして、どのように出力回数を制御しているかを解説します。
public class Fujiyama {
public static void main(String[] args) {
int height = 5; // ピラミッドの高さ
for (int i = 1; i <= height; i++) { // 各行に対するループ
// 空白を出力してピラミッドの形を整える
for (int j = 0; j < height - i; j++) {
System.out.print(" "); // 全角スペース
}
// ■を出力してピラミッドの本体を作る
for (int k = 0; k < (2 * i - 1); k++) {
System.out.print("■");
}
// 行の終わりで改行
System.out.println();
}
}
}各部分の解説
1. 行のループ
for (int i = 1; i <= height; i++) { ... }- これは縦方向(行)のループです。
heightの回数だけループを繰り返します。 iは行番号を表し、1からheightまでの値を持ちます。このiを基にして、各行での出力回数や空白の数が決定されます。
2. 空白を出力するループ
for (int j = 0; j < height - i; j++) {
System.out.print(" ");
}- 各行の左側に空白を出力する部分です。
height - iの数だけ空白(全角スペース)を出力します。 iが増えるごとに空白の数が減っていくので、■が中央に寄ってピラミッドの形ができます。
3. ピラミッドの本体を出力するループ
for (int k = 0; k < (2 * i - 1); k++) {
System.out.print("■");
}- このループが「ピラミッドの本体」となる
■を出力しています。 k < (2 * i - 1)という条件が、■の出力回数を制御しています。iが1のとき →2 * 1 - 1 = 1個の■iが2のとき →2 * 2 - 1 = 3個の■iが3のとき →2 * 3 - 1 = 5個の■
- 各行の
■の数が1、3、5、7、9…と奇数で増えていくため、ピラミッドの形が作られます。
4. 行の終わりで改行
System.out.println();- 各行の出力が終わったら改行することで、次の行の出力が新しい行に移ります。これによって、縦方向に積み重なったピラミッドが形成されます。
なぜピラミッドの形になるのか
ピラミッドの形になる理由は、行ごとに空白の数が減り、■の数が増えるからです。この構造がピラミッドや富士山の形状を作る鍵です。
- 空白の数が減る:
height - iにより、行が進むごとに空白が1つずつ減っていきます。 ■の数が奇数で増加する:2 * i - 1により、行ごとに■が奇数(1、3、5、7…)で増えていき、ピラミッドが中央に集まる形を作ります。
応用練習
この考え方を応用して、以下の練習問題にもチャレンジしてみましょう。
1. 逆ピラミッド
ピラミッドを逆にして表示するには、空白と■の出力回数をどのように変えれば良いでしょうか?
2. ダイヤモンド形
空白と■の出力回数を工夫し、ピラミッドを上下に並べることでダイヤモンド形を描いてみましょう。
まとめ
- 出力回数の制御は、図形を描く上で非常に重要なポイントです。
- 行番号
iに基づき、空白や■の出力回数を動的に計算することで、複雑な形もシンプルなコードで描くことができます。

2009年那覇でホームレスになるも沖縄の方々に助けられ、2010年からNPOで地域密着で困窮支援。2016-2024年まで株式会社FM那覇代表取締役。沖縄の支援団体情報ポータルサイト「カケハシオキナワ」設立運営。防災士。コンサル・エンジニア。


