目录
1.问题引入
即这个图形
看着好像挺简单,如果要用 for 循环输出应该怎么实现呢?
2.简单分析:
按照行数增加:
行数 | 1 | 2 | 3 | 4 | 5 |
前方空白数 | 2 | 1 | 0 | 1 | 2 |
星号数 | 1 | 3 | 5 | 3 | 1 |
后方空白数 | 2 | 1 | 0 | 1 | 2 |
似乎具有对称性,但是简单的 for 循环只能递增或递减输出,该怎么实现对称性呢?
不妨这样想:以中间的一行为 参考参数(本题以3为例) 每行分别减它(或被减)
就可得到:-2 -1 0 1 2 是不是快成功了?现在只要利用取绝对值函数就行了
具体代码及例子如下:
package first_class_study;
public class Drawing {
public static void main(String args[]) {
drawing(5);
System.out.println("--------------");
drawing(6);
System.out.println("--------------");
drawing(7);
System.out.println("--------------");
drawing(8);
}
public static void drawing(int Line) {
for(int i = 1;i <= Line ;i++ ) {//控制行数
for(int j=Math.abs((Line+1)/2-i);j > 0;j--) {//打印前方空白段
System.out.print(" ");
}
for(int starsNums = Line-2*Math.abs((Line+1)/2-i);starsNums > 0;starsNums-- ) {
System.out.print("*");//打印中间星号
}
for(int j=Math.abs((Line+1)/2-i);j > 0;j--) {//打印后方空白段
System.out.print(" ");
}
System.out.println();//一行结束换行
}
}
}
3.总结
1.可以看出,此对称只针对奇数情况下,若想偶数满足,则按照相同思路利用 if 语句再处理就行
2.要注意数据间的交互,而非手动输入具体的数据造成更改繁索;但是要合理利用,防止一子落下,满盘皆输
3.有对称要求时,可先找对称中心,再用Math方法(比如 Math.abs() 取绝对值)处理。
希望能对你有所启发