我试着打印这样的东西:
+--------+
| /\ |
| /--\ |
| /====\ |
|<------>|
| \====/ |
| \--/ |
| \/ |
+--------+
到目前为止,我已成功打印出图中的第一部分,但第二部分却很难。
这是我打印图的第一部分的方式:
for (int fill = 0; fill <= ((2 * row - 1)); fill++) {
if ((row % 2) == 0) {
System.out.print("=");
} else {
System.out.print("-");
}
}
我的第二部分是
for (int fill = 0; fill <= (n - 2 * (row - 1)); fill++) { //This is where I need help
if ((row % 2) == 0) {
System.out.print("=");
} else {
System.out.print("-");
}
}
我的结果如下:
+--------+
| /\ |
| /--\ |
| /====\ |
|<------>|
| \=====/ |
| \---/ |
| \=/ |
+--------+
有关完整代码,请查看:http://pastebin.com/YyCJ6Cq3
正如您所看到的,您在钻石内打印了太多列。所以修复应该很简单 - 每次打印少一列,这可以通过减少循环运行的次数来实现。一般来说,你可以在条件的末尾添加一个- 1
,就像@samgak建议的那样,但这实际上并不适用于此。让我们试着理解为什么你会遇到这个问题。
你的第一个循环不依赖于n
;它仅使用当前行索引来确定要打印的字符数。
在第二个循环中你正确地需要包括n
以便开始大并减小fill
的值,但是你滥用它。 n
和row
具有相同的幅度(因为row
是用n
定义的)但你只能将row
乘以2
。相反,您应首先执行n-row
操作,然后通过2
缩放结果,以便在每行中打印2x个字符。由于2*(n-row)
不太正确,你将不得不进一步玩它,但希望这足以帮助你弄清楚你的问题。
这看起来像一个学校项目,因此我只会给出提示。条件语句看起来有一个太多的填充。
fill <= (n - 2 * (row - 1));
尝试:fill <=(n - (2 *(row -1)+1);或者:fill <(n - 2 *(row -1));