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

目录

1.问题引入

2.简单分析:

3.总结


1.问题引入

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6YCK55qE5ZWm,size_13,color_FFFFFF,t_70,g_se,x_16

即这个图形

5a7878ce4fb841e79a0c333b3b38a0d7.png

看着好像挺简单,如果要用 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();//一行结束换行
		}
	}

}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6YCK55qE5ZWm,size_15,color_FFFFFF,t_70,g_se,x_16

3.总结

1.可以看出,此对称只针对奇数情况下,若想偶数满足,则按照相同思路利用 if 语句再处理就行

2.要注意数据间的交互,而非手动输入具体的数据造成更改繁索;但是要合理利用,防止一子落下,满盘皆输

3.有对称要求时,可先找对称中心,再用Math方法(比如   Math.abs()   取绝对值)处理。

希望能对你有所启发

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超逊的啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值