簡體   English   中英

Diamond形狀Java使用for循環

[英]Diamond Shape Java using 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 loops在菱形的另一側也添加“-”? 像這樣:

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

代替:

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

正如@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

每行包含3個部分。 第一部分由破折號創建,第二部分由字母字符創建,第三部分又由破折號創建。 請注意,第二部分和第三部分相同。 您可以在String變量中設置第一部分,然后將其重用於第三部分。 因此,您只能使用3個循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM