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

阅读: 评论:0

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

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

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

  • 最开始的想法
    • 为什么会出错呢?
  • 老师是怎么做的?
    • 我得到了些什么?
  • 我的想法真的行不通吗?
    • 我的发现1
    • 我的发现2
    • 我的发现3

最开始的想法

为什么会出错呢?

一开始想的是先把空格存到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();}

把图给我贴上来!!!

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

本文发布于:2024-02-02 19:14:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170687247245870.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:嵌套   第一期   敬请期待   星星   自我
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23