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

では、どうすればこのようにできるのでしょうか?
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 として、等号を除きます。
完全なソースコード:
投稿著者メール:[email protected]