空心金字塔详解(锻炼for循环思维能力)
1. 打印一个矩形以高度5为例 输出*
(1)最简单的方法 ,单层循环实现
For(int i = 1;i<=5;i++){
System.out.print(“*****”);
}
(2) 双层循环的使用
正确代码:
第一位同学也有自己的想法
可是打印出来的结果却是错误的:
为什么呢?
首先呢我们要有一个双重循环的思维,如上图例子,有两重循环i和j,他们的程序运行顺序应该是:当i=1时,进入内层j循环,然后j不断地自增,直到j达到最大的时候,内层的第一层j就结束了,并同时开始了i的自增,i就自增为2,这个时候再次进入内层循环j,j再从1自增到最大后,i才可以继续自增成3,以此类推。
图中的System.out.print(“*”);语句的意思就是不换行的打印输出*,于是就会出现一横排*,
他其实就是分为了五个部分,分别代表了i=1——5的情况。
主要原因就是在print 和println的区别上,前边网课我们大家都学习过print 和println的用法,print是正常打印输出,println则是换行输出。
第二位同学想,刚刚我只是因为没有换行,那我将print换成println不就可以啦吗,于是他又写了以下代码:
这个时候我们又发现,为什么从一个横着的变成了一个竖着的*,这与我们要的矩形完全不达边。其实他与之前一样由红色线分为了五个部分,分别代表i从1到5,这“五层”,只不过println是每用内部循环j输出一个*就会进行换行操作,所以就会出现这种结果。
于是我们该如何改良呢?
我们就在第一位同学的代码基础上修改吧。
第一位同学输出不了矩形的原因就是他的行都连在一起了,我们需要把每一行都分清楚,那我们就可以想到了个办法:在每一行j结束之后进行换行操作不就可以了吗。
就像这样,我们把System.out.println(“”); 写在外层循环里面不就可以吗,每当j循环从1到5打印完成之后,System.out.println(“”); 都会执行一遍,这样就做到了换行的操作。
于是我们就打印出来了矩形。
Ps:当你打印输出的时候,矩形的长和宽都可以通过自己输入来进行调节,有兴趣的同学自己使用Scanner试一下。
2、 打印半个金字塔
还是老方法,先用
for(int i = 1;i<=5;i++){
}
来把金字塔整体的高度先确定好
然后镶入内层循环j:
这个时候我们就开始找规律
观察半个金字塔图形发现:
第一行 是1个*
第二行 是2个*
第三行 是3个*
第四行 是4个*
第五行 是5个*
每一层的*数量都与他的层数相等,就代表j需要打印到i个*
于是我们:
注意:千万不能忘记刚刚所学的换行。否则仍然是一条横着的*。
3、 打印一个全金字塔
首先呢,我们仍然是从图形中找规律。而全金字塔和半金字塔就不同了,半金字塔因为输出的都是*,所以不需要考虑其他符号,但是你观察图就会发现,每一行都比下一行少了*,那空余的地方我们该怎么办?可以用“ ”(空格)来表示,这个时候我们就可以在外层循环i和内层循环j的基础上,再加一个内层循环k来实现空格的打印输出,让j只负责打印输出*就可以啦。
这个时候我们就发现 :
第一层1个* 空格数 4
第二层3个* 空格数 3
第三层5个* 空格数 2
第四层7个* 空格数 1
第五层9个* 空格数 0
也就是说,我们可以看出全金字塔每一层*的个数 j与他层数 i的关系可以表达为 j=2 x i - 1
而他空格的数量k 和层数的关系就是 k=5-i
于是我们就可以这样写代码:
4、 打印一个空心金字塔
还是老办法,先上图,看规律。
我们可以看出他与全金字塔的哪些不同?
空心金字塔:只有外壳 ,内部没有*,底部*不变,每一行的第一个*和最后一个*打印输出。
这个时候我们想打印出空心金字塔的关键是就是*的打印,于是我们就看内层j循环,
for(int j=1;j<=2*i-1;j++){
}
由上面我们观察到每一行的第一个*和最后一个*都打印输出,而第一个*就是就j=1,最后一个*就是j=2*i-1。
于是我们可以在内层循环j中套一个if语句,来让每一行的第一个j和最后一个j输出*,而其他的j都输出“ ”(空格)
if(j==1||j==(2*i-1)){
System.out.print("*");
}else{
System.out.print("*");
}
这个时候我们打印输出:
这个时候我们就发现,这跟我们要得出来的空心金字塔还有一点不一样,就是他的底部没有*,这个时候我们就可以在if语句里面再添加一个条件:当层数i等于最后一层时候,输出*。
用语句表达就是:
if(j==1||i==5||j==(i*2-1)){
System.out.print("*");
}else{
System.out.print(" ");
}
这个时候我们再运行会发现,得到了我们想要的空心金字塔。
5、 总结
以上就是关于循环打印输出金字塔的所有内容,这部分主要就是锻炼我们的循环逻辑能力,知道外循环和内循环的顺序关系,并通过对题目的分析来寻找规律,从而用代码来解决实际问题。这部分内容非常重要,一定要捋清楚外循环是在内循环自增完成之后再自增,然后内循环继续自增,以此类推。