一打印菱形代码,请教!
public class Test
{
public static void main(String args[])
{
int line = Integer.parseInt(args[0]);
int n = -line;
do {
show(Math.abs(n), ' ');
show((line-Math.abs(n))*2+1, '* ');
System.out.println();
n++;
}while (n <=line);
}
public static void show(int i,char c)
{
for (int n = 0;n <i;n++)
{
System.out.print(c);
}
}
}
------解决方案--------------------args[0] 只是初始的, 打印 '* '的个数就是 (line-Math.abs(n))*2+1, 也就是i
------解决方案--------------------不是啊 args[0] 就是你的要打印的菱形的行数,其实它的值 x * 2 + 1=你菱形的最大行的*个数
你可以看一下你的程序
他是这样的,如果你输入了10
1==〉先打10 个空格 (show(Math.abs(n), ' ');) , 然后打一个*( show((line-Math.abs(n))*2+1, '* ');), 再换行(System.out.println();),所以它不是对称打印,只是打印,每行的最后一个* 后面不是和同一行第一个*前面同样个数的空格,而是一个回车换行符
2==〉你的n = -line 所以空格会越来越少,因为abs(n+1) < abs(n),但是当n 〉=0之后 abs(n+1) > abs(n) 此时 空格越来越多
3==〉再看你的星号公式 (line-Math.abs(n)) * 2 + 1 ,首先你的(abs(n))递减,所以*越来越多,当n为非负时,此时 * 会减小。正好在[-n,n]的区间内完成了上下两个对称的三角形,而不是左右对称