钻石形状Java用于循环

时间:2017-04-23 12:30:57

标签: java for-loop

这是我的代码:

public static void drawNumDiamond(int h) {


    char c= 'A';
    if(h!=0) {
        if (h % 2 == 1) {


            for (int i = h/2; i >= -(h/2); i--) {

                for (int j = 1; j <= Math.abs(i); j++) {
                    System.out.print("-");
                }
                for (int j = 0; j <= 2 * ((h/2) - Math.abs(i)); j++) {
                    System.out.print(c);
                }

                System.out.println();
                if (i > 0) {
                    c++;
                } else {
                    c--;
                }
            }
        } else {
            System.out.println("NO VALID INPUT");
        }
    }

}

它使用字符返回菱形,“ - ”是空格。例:   drawNumDiamond(9)

我的问题是,是否可以通过使用max 3 for循环在钻石的另一侧添加“ - ”?像这样:

----A----
---BBB---
--CCCCC--
-DDDDDDD-
EEEEEEEEE
-DDDDDDD-
--CCCCC--
---BBB---
----A----

而不是:

----A
---BBB
--CCCCC
-DDDDDDD
EEEEEEEEE
-DDDDDDD
--CCCCC
---BBB
----A

2 个答案:

答案 0 :(得分:2)

正如@HighPerformanceMark所提到的,您只需复制当前的for循环,该循环以连字符为前缀,并在打印字母后添加:

for (int i=h/2; i >= -(h/2); i--) {
    StringBuilder prefix = new StringBuilder("");
    // you only need one loop for the hyphens
    for (int j=1; j <= Math.abs(i); j++) {
        prefix.append("-");
    }
    System.out.print(prefix);
    // and you only need one loop for the letters
    for (int j=0; j <= 2 * ((h/2) - Math.abs(i)); j++) {
        System.out.print(c);
    }
    // ADD THIS CODE
    System.out.println(prefix);

    if (i > 0) {
        c++;
    } else {
        c--;
    }
}

public static void main(String[] args) {
    drawNumDiamond(9);
}

请注意,我们甚至可以使用无循环生成输出,但这会使代码更难以阅读。

<强>输出:

----A----
---BBB---
--CCCCC--
-DDDDDDD-
EEEEEEEEE
-DDDDDDD-
--CCCCC--
---BBB---
----A----

在这里演示:

Rextester

答案 1 :(得分:0)

每行有3个部分。第一部分是从破折号创建的,第二部分是从字母字符创建的,第三部分是从破折号创建的。请注意,第二部分和第三部分是相同的。你可以在String变量中设置第一部分并将其重用于第三部分。所以你只能使用3个循环。