[英]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----
演示在這里:
每行包含3個部分。 第一部分由破折號創建,第二部分由字母字符創建,第三部分又由破折號創建。 請注意,第二部分和第三部分相同。 您可以在String變量中設置第一部分,然后將其重用於第三部分。 因此,您只能使用3個循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.