用Java打印ASCII Diamond图

thu*_*zle 6 java algorithm ascii function

我试着打印这样的东西:

+--------+
|   /\   |
|  /--\  |
| /====\ |
|<------>|
| \====/ |
|  \--/  |
|   \/   |
+--------+
Run Code Online (Sandbox Code Playgroud)

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

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

for (int fill = 0; fill <= ((2 * row - 1)); fill++) {

    if ((row % 2) == 0) {
     System.out.print("=");
    } else {
     System.out.print("-");
    }
   }
Run Code Online (Sandbox Code Playgroud)

我的第二部分是

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("-");
    }
   }
Run Code Online (Sandbox Code Playgroud)

我的结果如下:

+--------+                                                                                                                                                                                                                     
|   /\   |                                                                                                                                                                                                                     
|  /--\  |                                                                                                                                                                                                                     
| /====\ |                                                                                                                                                                                                                     
|<------>|                                                                                                                                                                                                                     
| \=====/ |                                                                                                                                                                                                                    
|  \---/  |                                                                                                                                                                                                                    
|   \=/   |                                                                                                                                                                                                                    
+--------+ 
Run Code Online (Sandbox Code Playgroud)

有关完整代码,请查看:http://pastebin.com/YyCJ6Cq3

dim*_*414 0

正如您所看到的,您在钻石内打印了太多的列。因此解决方法应该很简单 - 每次少打印一列,这是通过将循环运行的次数减少一次来实现的。一般来说,您可以- 1像 @samgak 建议的那样在条件末尾添加 a ,但这实际上在这里不起作用。让我们尝试了解您为何会遇到此问题。

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

在第二个循环中,您正确地还需要包含n以便从大值开始并减少 的值fill,但您滥用了它。nrow的量级相同(因为row是根据 定义的n),但只需row乘以2。相反,您应该先执行该n-row操作,然后按比例缩放结果,2以便在每行中打印 2x 个字符。2*(n-row)由于不太正确,您将不得不进一步尝试它,但希望这足以帮助您解决问题。