まず、出力結果を確認しましょう:

では、どうすればこのようにできるのでしょうか?

1、まず図形の構造を分析します

図形は全部で5行あることがわかります。では、forループ文を作成して、5行に制御できるでしょうか?答えは「はい」です。

for(int i = 1 ;i <= 5 ;i++ ){

}

これで、5回ループするforループコードブロックを作成しました。これが一番外側のループです。

2、次に、図形がどのように構成されているかを分析します。図形を以下の部分に分解できます:/p>

図形をこのような3つの三角形に分解できます。

3、1番の空白三角形を作成します

見てわかるように、1行目は4つのスペースを出力し、2行目は3つのスペース、3行目は2つ、4行目は1つ、5行目はありません。

この法則から、順に減少していく法則であることがわかります。では、どのように実現するのでしょうか?

1から5までには4つの数字があり、2から5までには3つの数字、3から5までは……と想像できます。

この原理を利用できるのではないでしょうか?答えはもちろん「はい」です。では、どのように実現するのでしょうか?コードを見てください:

for(int i = 1;i<=5 ;i++) {
    for(int j = 5; j >= i ; j--)//建立1号图形
        System.out.print(" ");
    System.out.println();
}

最初のfor文は、先ほど定義した5回のループ文です

2番目のforループを解析してみましょう:

まず、int型のj変数を定義し、jに5を代入します

そして考えます。距離を短くしたいので、ループのたびにjを-1すれば、ちょうど要件に合います:

1回目の外側ループ i=1、j=5なので、j>=iの条件を満たし、スペースを1つ出力します。その後j-1すると、jの値は4になり、j>=iを満たすので、さらに出力します

……

j=0になるまで続け、j>=iを満たさなくなったら、内側ループを抜け出します

次にSystem.out.println(); で改行します

外側ループに戻り i++ で、iは2になり、i<=5を満たすので、内側ループに入ります

j=5と定義し、j>=iを満たすので、スペースを1つ出力し、j-1します

jは現在4で、j>=iを満たすので、スペースを1つ出力し、j-1します

……

j=1になるまで続け、j>=iが成立しなくなり、内側ループを抜け出して、改行します

そしてi+1し、再び内側ループに入ります……

このようにループを繰り返すと、4行の逆三角形が形成され、1番の図形が完成します。

4、2番の図形を作成します。1番の図形と原理はまったく同じですが、ちょうど逆です

for(int i = 1 ;i<=5 ;i++){
    for(int j = 5; j >= i ; j--)//建立1号图形
        System.out.print(" ");
    for(int j = 1; j <= i; j++)//建立2号图形
        System.out.print("*");
    System.out.println();
}

1番の図形の作成と同じなので、皆さん自身で理解できます。これで2番が完成します

5、3番の図形を作成します

for(int i = 1; i <= 5; i++){
    for(int j = 5 ;i <= j; j--)//建立1号图形
        System.out.print(" ");
    for(int j = 1; j <= i; j++)//建立2号图形
        System.out.print("*");
    for(int j = 1; j < i; j ++)//建立3号图形
        System.out.print("*");

}

同様に、1番や2番と同じように、3番の図形も作成原理は同じです

ただし、皆さんが注意すべき点は、3番の図形は1行目に出力されないので、最初の外側ループでそれを遮断し、2回目の外側ループで出力させる必要があります

そのため、今回は判定条件を j < i として、等号を除きます。

完全なソースコード:

class Demo{ public static void main(String[] args){ for(int i=1;i<=5;i++){ for(int j=5; i<=j; j--) System.out.print(" "); for(int j=1; j<=i; j++) System.out.print("*"); for(int j=1; j<i; j++) System.out.print("*"); System.out.println(); } } }

投稿著者メール:[email protected]