0

コンソールに文字 D を出力しようとしましたが、コードが予想よりも長くなってしまいました。私を助けてもらえますか....このコードを減らす別の方法はありますか? ありがとうございました。これは私のコードです:

public class LetterD {
    public static void main(String[] args) {
      for(int i = 1;i<=14;i++){
         for(int j = 1;j<=4;j++) System.out.print("*");
         if(i == 1 || i==14) for(int k = 1;k<=7;k++) System.out.print("*");
         if(i == 2 || i==13) for(int k = 1;k<=9;k++) System.out.print("*");
         if(i == 3 || i==12){
             for(int k = 1;k<=6;k++) System.out.print(" ");
             for(int l = 7;l<=10;l++) System.out.print("*");
         }
         if(i==4||i==11){
             for(int k = 1;k<=7;k++) System.out.print(" ");
             for(int l = 8;l<=11;l++) System.out.print("*");
         }
         if(i==5||i==10){
             for(int k = 1;k<=8;k++) System.out.print(" ");
             for(int l = 9;l<=12;l++) System.out.print("*");
         }
         if(i==6||i==9){
             for(int k = 1;k<=9;k++) System.out.print(" ");
             for(int l = 10;l<=13;l++) System.out.print("*");
         }
         if(i==7||i==8){
             for(int k = 1;k<=10;k++) System.out.print(" ");
             for(int l = 11;l<=14;l++) System.out.print("*");
         }
         System.out.println();
      }
    }
}

出力は次のようになります。

***********
*************
****      ****
****       ****
****        ****
****         ****
****          ****
****          ****
****         ****
****        ****
****       ****
****      ****
*************
***********
4

5 に答える 5

2

コードを短くする最も明白な方法は、次のように文字の中央部分をループで描画することだと思います。

public class LetterD {
    public static void main(String[] args) {

        for(int i = 1;i<=14;i++) {
            for(int j = 1;j<=4;j++) System.out.print("*");
            if(i == 1 || i==14) for(int k = 1;k<=7;k++) System.out.print("*");
            if(i == 2 || i==13) for(int k = 1;k<=9;k++) System.out.print("*");
            if (i > 2 && i < 13) {
                for (int j = 0; j < 10 - Math.abs(i - 7.5); j++) System.out.print(" ");
                for (int j = 0; j < 4; j++) System.out.print("*");
            }
            System.out.println();
        }
    }
}
于 2012-05-30T12:38:56.347 に答える
2

ヘルパー メソッドはコードを単純化します。

public static void main(String[] args) {
    printAsterisks(11, true);
    printAsterisks(13, true);
    for(int i = 6; i < 10; i++){
        printSpaced(i);
    }
    for(int i = 10; i > 5; i--){
        printSpaced(i);
    }
    printAsterisks(13, true);
    printAsterisks(11, true);
}

static void printSpaced(int spaces){
    printAsterisks(4, false);
    for(int i = 0; i < spaces; i++){
        System.out.print(" ");
    }
    printAsterisks(4, true);
}

static void printAsterisks(int n, boolean newLine){
    for(int i = 0; i < n; i++){
        System.out.print('*');
    }
    if(newLine){
        System.out.println("");
    }
}
于 2012-05-30T12:42:31.483 に答える
1

単一ループの再帰的ソリューション:

public static void printD(int size, int currentStep, boolean dir) {
    for (int i = 0; i < size + currentStep; i++) {
        if (currentStep > size / 10) {
            if (i > size / 3 && i < size + currentStep - (size / 3)) {
                System.out.print("-");
            } else {
                System.out.print("*");
            }
        } else {
            System.out.print("*");
        }
    }
    System.out.println();
    if (currentStep < size / 2 && dir) {
        printD(size, currentStep + 1, true);
    } else {
        if (currentStep > 0) {
            printD(size, currentStep - 1, false);
        }
    }
}

そして、結果呼び出しに似たものを出力するにはprintD(12, 0, true);

于 2012-05-30T12:34:35.740 に答える
1

ループを使用しませんか?

System.out.println("***********"
               + "\n*************"
               + "\n****      ****"
               + "\n****       ****"
               + "\n****        ****"
               + "\n****         ****"
               + "\n****          ****"
               + "\n****          ****"
               + "\n****         ****"
               + "\n****        ****"
               + "\n****       ****"
               + "\n****      ****"
               + "\n*************"
               + "\n***********")

こんなHello Worldのプログラムは見当たりませんよね?

for(int i = 0; i < 12; i++) {
    if(i == 0)       System.out.print("H");
    else if(i == 1)  System.out.print("e");
    else if(i == 2 || i == 3 || i == 9)
                     System.out.print("l");
    else if(i == 4 || i == 7)
                     System.out.print("o");
    else if(i == 5)  System.out.print(" ");
    else if(i == 6)  System.out.print("w");
    else if(i == 8)  System.out.print("r");
    else if(i == 10) System.out.print("d");
    else             System.out.print("!");
}
于 2012-05-30T12:23:53.520 に答える
1

文字列の配列を使用して、文字 D の個々の行を「ピクセル」で表し、for ループで反復処理することができます。本当に凝ったものにしたい場合は、「ピクセル」行を整数としてエンコードし、ビットごとの演算子を使用してデコードできます。

于 2012-05-30T12:20:17.523 に答える