Javaマルチループ印刷グラフィック

Javaマルチループ印刷グラフィック

Javaの複数のループを使用してグラフィックを印刷する場合、外側のループを使用してターゲットシェイプの行数を制御すると思います。最も重要なことは、内側のループのループ条件を記述して、ターゲットシェイプができるようにすることです。描画されます。

例:直角三角形
コードは次のとおりです。

//外循环——控制输出行数
for (int i = 1;i <= 5;i++){
    
    
			//内循环——控制每行输出的*号个数
            for (int j = 1;j <= i;j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }

コンソールの出力結果は次のとおりです。
直角三角形




同様に、逆直角三角形を取得でき、コードは次のとおりです。

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

コンソールの出力は次のとおりです
逆直角三角形




。三角形を印刷する方法がわかったので、二等辺三角形をどのように印刷する必要がありますか?
二等辺三角形



三角形が印刷されていて、各行の最初の列にどれだけのスペースを残しておくかによって、二等辺三角形を実現できます。

したがって、各行のインデントを実現するために、内側のループにループを追加します。
コードは次のように表示されます。

for (int i=1;i <=5;i++){
    
    
			//输出空格,实现行缩进
            for (int j=1;j <= 5-i;j++){
    
    
                System.out.print(" ");
            }
            //输出*号,打印图形
            for (int j=1;j <= 2*i-1;j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }

上記のコードでは、内側のループの2つのループのループ条件は、二等辺三角形の形状に基づいて計算されます。

アイデア:
最初の行は*記号を出力し、2番目の行は3つの*記号を出力し、3番目の行は5つの*記号を...算術増分で出力し、許容誤差Dは2です。
したがって、式X + i * D = Yを使用してループ条件の範囲を計算でき、Yは出力*符号の数を表します。
Xが未知数の場合、iが1に等しい場合、式に代入してX + 2 = 1、次にX = -1を取得し、この式はY = 2 * i-1になるため、制御のループ条件*の数は
j <= 2 * i-1です。
二等辺三角形を実現するには、計算サイクル条件の範囲を計算する式Xi * D = Yを導入する必要もあり、Yは「ブランク」出力の数を表します。このとき、「スペース」の各行の許容誤差Dは1です。ここで、Xは不明な数です。iが1に等しい場合、式を代入してX-1 = 4、X = 5、この式を取得します。はY = 5-iであるため、制御「ブランク」の数のループ条件は
j <= 5-iです。



上記の2つの式を理解すると、ひし形を印刷できます。
ダイヤモンド
これは、2つの三角形をつなぎ合わせて形成されたひし形です。コードは次のとおりです。

		//打印上半部分三角形
		for (int i=1;i <=5;i++){
    
    
            for (int j=1;j <= 5-i;j++){
    
    
                System.out.print(" ");
            }
            for (int j=1;j <= 2*i-1;j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }
        //打印下半部分三角形
        for (int i=1;i <=4;i++){
    
    
            for (int j =1;j <= i;j++){
    
    
                System.out.print(" ");
            }
            for (int j =1;j <= 9-2*i;j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }




明らかに、この方法は、2つの三角形を使用してひし形を結合するには面倒であり、循環の利点を反映していません。

ダイヤモンドが上半分の印刷を終了したときに下半分のループ変更を制御するために、別のループ変数kを追加するだけで済みます。

for (int i = 1,k = 1;k <= 9;i = (k++<5 ? ++i : --i)){
    
    
            for (int j = 1;j <= 5-i;j++){
    
    
                System.out.print(" ");
            }
            for (int j = 1;j <= 2*i-1;j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }

または、ループ変数に固定範囲を指定し、絶対値を追加してループ変更の下半分を制御します。

for (int i = -4;i <= 4;i++){
    
    
            for (int j = 1;j <= Math.abs(i);j++){
    
    
                System.out.print(" ");
            }
            for (int j = 1;j <=9-2*Math.abs(i);j++){
    
    
                System.out.print("*");
            }
            System.out.println();
        }





上で紹介した方法を使用して、砂時計の図を印刷することもできます。これは、2つの三角形の頂点を単純につなぎ合わせたものです。
コードは次のように表示されます。

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

コンソール出力の結果は次のとおりです。
砂時計





グラフィックをくり抜く
ここに画像の説明を挿入
これは砂時計のグラフィックスの中央をくり抜くことです。原則は、各行の最初の行、最後の行、最初の列、およびそれぞれの最後の列のみを出力することです。 *記号を印刷するときの行。コードは次のように表示されます。

for (int i = -4;i <= 4;i++){
    
    
            for (int j = 1;j <= 4-Math.abs(i);j++){
    
    
                System.out.print(" ");
            }
            for (int j = 1;j <= 1+2*Math.abs(i);j++){
    
    
                boolean is = i==-4 || i ==4 || j==1 || j==1+2*Math.abs(i);
                System.out.print(is ? "*":" ");

            }
            System.out.println();
        }

ブール値を追加して決定します。これを実現できます。

おすすめ

転載: blog.csdn.net/weixin_48482704/article/details/108854226