用Java打印ASCII Diamond图

时间:2016-07-06 00:02:22

标签: java algorithm function ascii

我试图打印这样的东西:

+--------+
|   /\   |
|  /--\  |
| /====\ |
|<------>|
| \====/ |
|  \--/  |
|   \/   |
+--------+

到目前为止,我已经成功地打印了图中的第一部分但是第二部分很难。

这是我打印图的第一部分的方式:

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

3 个答案:

答案 0 :(得分:0)

这看起来像是一个学校项目,因此我只会给出提示。条件语句看起来有一个太多的填充。

fill <= (n - 2 * (row - 1));

答案 1 :(得分:0)

正如您所看到的,您在钻石内打印了太多列。所以修复应该很简单 - 每次打印少一列,这可以通过减少循环运行的次数来实现。一般来说,你可以在条件的末尾添加一个- 1,就像@samgak建议的那样,但这实际上并不适用于此。让我们试着理解为什么你遇到了这个问题。

你的第一个循环不依赖于n;它只使用当前行索引来确定要打印的字符数。

在第二个循环中,您还需要包含n才能开始大并减少fill的值,但是您会误用它。 nrow具有相同的幅度(因为row是根据n定义的),但您只需将row乘以2。相反,您应首先执行n-row操作,然后2缩放结果,以便在每行中打印2x个字符。由于2*(n-row)不太正确,你将不得不进一步玩它,但希望这足以帮助你弄清楚你的问题。

答案 2 :(得分:0)

尝试:fill&lt; =(n - (2 *(row -1)+1); 或者:填写&lt; (n - 2 *(第-1行));