这是我的代码:
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
答案 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----
在这里演示:
答案 1 :(得分:0)
每行有3个部分。第一部分是从破折号创建的,第二部分是从字母字符创建的,第三部分是从破折号创建的。请注意,第二部分和第三部分是相同的。你可以在String变量中设置第一部分并将其重用于第三部分。所以你只能使用3个循环。