我写了一些会打印钻石的代码
static void printDiamond(int size) {
for (int i = 0; i < size; i++) {
for (int a = 0; a < (size - (i + 1)); a++) {
System.out.print(" ");
}
System.out.print("X");
for (int b = 0; b < (i * 2); b++) {
System.out.print(" ");
}
System.out.print("X");
System.out.println();
}
for (int i = size-1; i >= 0; i--) {
for (int a = 0; a < (size - (i + 1)); a++) {
System.out.print(" ");
}
System.out.print("X");
for (int b = 0; b < (i * 2); b++) {
System.out.print(" ");
}
System.out.print("X");
System.out.println();
}
}
我对钻石的问题在于,无论我输入什么,它都会打印出来。因此,如果用户要为钻石输入6,它应该如下所示:
XX
X X
X X
X X
X X
XX
使用我的代码,如果用户输入5,则会打印出以下内容:
XX
X X
X X
X X
X X
X X
X X
X X
X X
XX
而不是打印5行,它打印出10.如果我输入3,它将打印出6行而不是3.看来,对于我的钻石,它输出的是从用户收到的数字,但是然后打印出那个数量的时间2.有没有一种方法,我可以输出printDiamond
方法输出的一半,所以它有正确的行数?
答案 0 :(得分:3)
我能够通过调整循环边界条件来纠正您的代码。首先,您正在打印高度为size
的钻石的顶部部分,而您还打印高度为{{1}的底部药水},总高度为size
。
另一个大问题是你没有处理奇数输入,因为所有的钻石都是偶数高度。我也纠正了这个问题。看看下面的代码。
2*size
<强>输出:强>
static void printDiamond(int size) {
for (int i = 0; i < (int)Math.ceil(size/2.0); i++) {
for (int a = 0; a < (int)Math.ceil(size/2.0) - (i + 1); a++) {
System.out.print(" ");
}
System.out.print("X");
for (int b = 0; b < (i * 2); b++) {
System.out.print(" ");
}
System.out.print("X");
System.out.println();
}
for (int i = (int)Math.floor(size/2.0)-1; i >= 0; i--) {
for (int a = 0; a < (int)Math.ceil(size/2.0) - (i + 1); a++) {
System.out.print(" ");
}
System.out.print("X");
for (int b = 0; b < (i * 2); b++) {
System.out.print(" ");
}
System.out.print("X");
System.out.println();
}
}
printDiamond(5);
System.out.print("\n");
printDiamond(6);