如果输入n=5输出,如何制作此图案:
* *
****
******
****
* *
这是我的密码
for(int i = 0; i < n + 1; i++) {
for(int j = 0; j < n + 1; j++) {
if ((j > i && j < n - i) || (j > (n-i) && j < i && i > n))
System.out.print(" ");
else
System.out.print("*");
}
System.out.println();
}
结果如下:
* *
****
******
******
******
******
我怎样才能解决这个问题?
3条答案
按热度按时间yiytaume1#
你用过或
||
合并“”的上下指向三角形和“”的下上指向三角形。好主意。你把上面的三角形描述为
(j > i && j < n - i)
,这是正确的。但是,您将下面的三角形描述为
(j > (n-i) && j < i && i > n)
.这就是问题所在。这个
i > n
对我来说永远不是真的i
从0到n
就像你的外环构造一样。为了描述模式的下半部分,应该使用i>n/2
. 但是,您可以完全删除条件的这一部分,因为第一部分中的计数器比较只适用于下半部分。所以呢
(j > (n-i) && j < i)
.这让你:
顺便说一句,
n
线,不是n+1
外环中的线。如您所见,“”的下三角形太小了。两边,右边和左边。
所以你需要让你的条件更宽松,也就是说“较低的平等”和“较高的平等”,而不是“较低的”和“较高的”。在代码中
(j >= (n-i) && j <= i)
.把它放在一起:
这段代码与您的尝试非常相似,可以获得所需的
wa7juj8i2#
通过将公共代码放在如下所示的方法中,可以大大简化它:
输出:
mftmpeh83#
您现有的尝试实际上非常接近这里是一个工作版本,它修复了第二个条件(您当前的尝试总是错误的):
输出:
相关差异: