对称图像输出问题(for循环 ,取绝对值的利用)

时间: 2023-10-04 admin IT培训

对称图像输出问题(for循环 ,取绝对值的利用)

对称图像输出问题(for循环 ,取绝对值的利用)

目录

1.问题引入

2.简单分析:

3.总结


1.问题引入

即这个图形

看着好像挺简单,如果要用 for 循环输出应该怎么实现呢?

2.简单分析:

按照行数增加:

 行数12345
前方空白数21012
星号数13531
后方空白数21012

似乎具有对称性,但是简单的 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()   取绝对值)处理。

希望能对你有所启发