首页 >> 大全

嵌套循环打印正三角形星星阵●学渣的自我救赎第一期(敬请期待后续)

2023-12-14 大全 26 作者:考证青年

嵌套循环打印正三角星星阵●学渣的自我救赎第一期(敬请期待后续) 老师是怎么做的? 我的想法真的行不通吗?

最开始的想法 为什么会出错呢?

一开始想的是先把空格存到empty里面去,然后再将empty和星星一起输出,废话不多说贴代码

		//用*打印一个奇数正三角形(最初的错误)for(int i = 0;i < 4;i++) {for(int j = 0;j < 2*i+1;j++) {String empty = null;		//用于计算每一行所需空格for(int k = 0;k < i;k++) {//左边i个,右边i个//再加上中间的*刚好2*i+1个字符empty = (empty == null?"  ":empty + "  ");//根据i的值循环加上空格}System.out.println(empty + "*" + empty);}System.out.println();}

输出结果惨不忍睹

太糗了,我自己实在是想不出来,只好先看看老师的做法

老师是怎么做的?

简单描述一下老师的思路:

1.数清楚每一行的空格和星星

2.开两个平行的内层循环先打空格再打星星(注意要去掉换行)

3.完成

我得到了些什么?

等下,**先把空格打出来!**我怎么没想到呢不好意思 冷汗 尴尬,我试试吧

		//用*打印一个奇数正三角形for(int i = 0;i < 4;i++) {			//行→0,1,2,3for(int k = 0;k < 3-i;k++) {	//列→3,2,1,0(空格数量)
//			for(int k = i+1;k < 4;k++) {	//老师的思路:i越大,k越小//1.先打空格(易发现i+k=3,所以k=3-i个空格)System.out.print(" ");}for(int j = 0;j < 2*i+1;j++) {//列→1,3,5,7(*的数量)//2.再打*System.out.print("*");}System.out.println();}

贴图贴图!!!

能打出来我是很开心的,但是又有些郁闷:为什么我的想法不行呢?我觉得没问题呀

于是我又转头研究之前那个乱七八糟的代码了

我的想法真的行不通吗?

带着这个问题,我好好地审视了自己的代码,倒真让我发现了几个问题:

我的发现1

每一行的空格数量都不一定,去发现它与行数的关系固然是最便捷的方式,谁让我一开始没想到呢笑哭 哭笑 笑出眼泪 破涕为笑 笑死 笑尿 笑cry

我一开始想到的是:无论每一行怎么变,有一个地方永远不会动,那就是中轴线(第四个字符的位置永远是星星),那我从中轴线开始数不就行了?

抱着这样的想法我发现了从中轴线往左数的空格是有规律的:i越大,空格越少,而且无论怎样**“i+空格”的数目永远是4**(也就是中轴线的位置),那空格的数目不就是4-i嘛!

话不多说代码敲起来!

		//用*打印一个奇数正三角形(我的想法调试版)for(int i = 0;i < 4;i++) {for(int j = 0;j < 2*i+1;j++) {String empty = null;		//用于计算每一行所需空格for(int k = 0;k < 4-i;k++) {//左边i个,右边i个//再加上中间的星星刚好2*i+1个字符(错误错误!!!)//光是星星就2*i+1了,加上空格就更不止了!!!//所以应该是.....我乱了~暴风哭泣//先试试4-i吧empty = (empty == null?" ":empty + " ");//根据i的值循环加上空格}System.out.print(empty + "*" + empty);}System.out.println();}

贴图贴图!!!

_生命线接近尾端形三角_三角乌鸦阵-反埋伏

有点头绪了,再看看哪里需要改进呢?

我的发现2

在和老师的讨论中我发现了,前面都是对的,就是后面的空格有点多,仔细想想是因为它

System.out.print(empty + "*" + empty);	//多余的empty

为了追求与图形一致的对称感,**我盲目地在后面也加入了空格,导致了每个星星的后面都有空格,间隙可不就变大了嘛!**于是我改了一下

System.out.print(empty + "*");			//删去了后面的empty

疯狂贴图!!!

em…好像好了点,但还是有问题

我的发现3

每个星星的前面也有空格不好意思 冷汗 尴尬事实上只需要第一个星星的前面挨着empty就行了

那咋办呢(摊手)继续造呗~

//用*打印一个奇数正三角形(我的想法完成版)for(int i = 0;i < 4;i++) {int virgin = 1;				//判断是否为第一次进入内层循环for(int j = 0;j < 2*i+1;j++) {//int virgin = 1;//不能定义在这里,否则每一次进入都初始化为1,无法判断是否第一次String empty = null;		//用于计算每一行所需空格for(int k = 0;k < 4-i;k++) {//左边i个,右边i个//再加上中间的星星刚好2*i+1个字符(错误错误!!!)//光是星星就2*i+1了,加上空格就不止了!!!//所以应该是.....我乱了~暴风哭泣empty = (empty == null?" ":empty + " ");//根据i的值循环加上空格}if(virgin == 1) {//请不要去百度virgin的意思谢谢(手动围笑)System.out.print(empty + "*");//如果是第一次,就接emptyvirgin = 0;}else {System.out.print("*");//如果不是第一次,就只打星星就好了}}System.out.println();}

把图给我贴上来!!!

搞定了,可把我累死了,费这么大力气打出来的代码还不如老师那几行简短有力…我哭了~你呢

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了