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

您可以使用字符串数组来表示字母 D“像素”的各个行,并在 for 循环中对其进行迭代。如果您想真正花哨,可以将“像素”行编码为整数并使用按位运算符对其进行解码。

于 2012-05-30T12:20:17.523 回答
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

具有单循环的递归解决方案:

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 回答