从零开始学Java【09】

从零开始学Java【09】


​ 学习视频:https://www.bilibili.com/video/BV12J41137hu?p=38

循环结构

while循环

image-20220427094032325

需要循环停下来,可以使用break或者continue语句。

例子:输出1~100

image-20220427094455959

i<100时持续循环,i>100停止循环

例子:1+2+3+...+100

image-20220427095204206

do while循环

image-20220427095552197

例子:while和do...while的区别

image-20220427100223226

可以看到,在while循环体里面,由于不满足条件,没有执行循环体,而do...while循环体,则因为先执行了一次,a变成了1,到后面判定的时候不满足条件,后则跳出了do...while循环体。

for循环

image-20220427100433743

for循环快捷写成:100.for,则有两种循环方式,一种i++,一种i--

image-20220427104321964

image-20220427104636125

注意事项:

image-20220427104710157

第一步先检查初始化。初始化可以是空语句。

第二步开始检查布尔表达式 (如图上i<100),true则执行,false则跳出循环

第三步,当执行完一次循环后,自动更新迭代因子,即i++或者i--

练习1 计算0到100之间的奇数和及偶数和

image-20220427110224432

技巧:通过取模来分辨奇偶,for中嵌套if语句可以实现奇偶分离


练习2 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

image-20220427112235525

技巧:1.通过取模5来分辨可以被5整除的数,作为一级过滤。
2.通过对比5*3=15,可以观察,每行三个数的最后一个数恰好是15的整数倍(也可以这么理解:换行的标志是最后一个数既是5的倍数,也是3的倍数,才满足换行的要求),所以通过15来进行二级过滤,并单独成一行

代码解析:1.println函数是输出完换行

​ 2.print函数是输出完不换行

​ 3./t,/n都是转义字符,其中/t表示按一次table键,/n表示换行(具体可查询转义字符表查询)


练习3 打印九九乘法表

这个练习有难度,思路如下

首先,需要达到如下结果:

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

那么,初步思路为:用两个for循环进行嵌套,输出如下格式

for (int i = 1; i <=9; i++) {
            for (int j = 1; j <= 9; j++) {  
            }
            System.out.println();//在每个单个数字结束后换行,比如第一行的
        }

接着填充内容,观察可得,填入语句: System.out.print(i + " * "+j+"="+(i * j)+"\t");//\t为table按键

for (int i = 1; i <=9; i++) {
            for (int j = 1; j <= 9; j++) {  
                  System.out.print(i + "*"+j+"="+(i*j)+"\t");//\t为table按键
            }
        }

该结果为:

1*1=1	1*2=2	1*3=3	1*4=4	1*5=5	1*6=6	1*7=7	1*8=8	1*9=9	2*1=2...............................

观察发现,我们平时念口诀的时候,是习惯小的数放前边,大的数放后边,且由于需要改掉重复项,比如1 * 9,和9 * 1就是重复项

所以改进思路:外层for循环不变,内层for循环,把参数j <= 9,换成j <= i,且在表达式System.out.print中,i和j的输出位置变换一下

则代码改进如下:

for (int i = 1; i <=9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*"+i+"="+(i*j)+"\t");
            }
        }

结果为:

1*1=1	1*2=2	2*2=4	1*3=3	2*3=6	3*3=9	1*4=4	2*4=8	3*4=12	4*4=16	1*5=5	2*5=10	3*5=15	4*5=20	5*5=25.........

可以发现,每一个乘法都是前边小,后边大,满足了需求,可是并没有按规律顺序输出,所以现在考虑把换行添加进最外层for循环,代码如下:

for (int i = 1; i <=9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }

结果为:

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

达成了目标。

总结步骤:

①首先要有个总体的思路,用两个for循环来进行操作。

②根据输出的样式来写出for循环内的语句:

System.out.print(i + "*"+j+"="+(i*j)+"\t");

③根据观察,小数在前,大数在后,所以更改for内循环中的j<=i,同时也把System.out.print里面的变量也换一下。

④由于 小数*大数,所以每次 小数==大数的时候,就需要换行了,即第二个for循环结束了之后需要换行,所以在第一个for循环添加换行,即:

System.out.println();

则完整输出九九乘法表

image-20220427163908907

posted @ 2022-04-27 16:45  机智的小柴胡  阅读(32)  评论(0)    收藏  举报