张小飞的Java之路——第五章

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?


1. 流程控制语句

诸小亮:“接下来,我们就需要学习一下 Java 中的流程控制语句了”

张小飞:“什么是流程控制语句?”

“就是用来控制代码执行的,用文字不是很好表达,但是写代码一看,你就明白了”

1. 条件判断语句

诸小亮:“来,我们先看第一种:条件判断语句,在 Java 中使用 if 作为条件判断”

格式:

if(条件表达式){
    //如果 条件表达式的值为true,就执行 {} 中的代码
}

1. 初体验

“师弟,你先看看这段代码:”

在这里插入图片描述

结果:

在这里插入图片描述

“原来这就是条件判断啊,很简单啊,如果 a<b = false,就不执行 {} 中的代码了吧

“是的,不过这只是 if 的最基本用法,我们继续看其他用法”

2. if…else…

诸小亮:“if 可以配合 else 使用,比如:”

image.png

结果:
image.png

“太简单了,还有其他用法吗?”

“还有最后一种”

3. else if

“也可以配合 else if 使用,比如:”

image.png

结果:
image.png

“有点儿意思,师兄,我总结一下,您看看这样理解对吗?”

使用 if{}...else if{}...else{},最终肯定只有一对 {} 中的代码能够执行

“确实是这样的,不过需要注意一点:else if 可以在代码中写多个,比如:”

image.png
“原来还可以这样,我知道了”

4. 简写方式

诸小亮:“if 还有一种简写方式,来我们也看看吧:”

在这里插入图片描述

张小飞:“真的可以吗?我也来试试”

“拜托,把 ‘吗?’换成 ‘!!’,就这么不想相信我?”

“怎么会不相信您呢?只是…,师兄,不对吧,我这里编译代码时报错了”

image.png
“怎么可能,让我看看你的代码”

“跟你的一模一样,您看看”
image.png

“。。。,哪里一样了,你在仔细看看:只有在 {} 中的代码只有一句的时候,才能省略大括号

“噢噢,不好意思,是我看错了”

“另外,虽然可以省略大括号,但是,阿里的编码规范规定,使用 if 必须得有 {}

“这是为什么呢?”

“应该是为了增强代码的可阅读性吧,你以后写的多了就明白了”

“好的,好的”

2. switch 语句

诸小亮:“来,我们接着看 switch 语句,其实准确来说应该是 swith case 语句”

张小飞:“这又是干什么的?”

“跟 if 类似,但又不一样,是一种选择结构语句

“。。。,什么叫类似,又不一样”

“我也不知道该怎么描述,还是看代码吧(注意看代码中的注释)

public static void main(String[] args){
    int num = 1;
    switch(num){
        case 1:// case 后面的数,如果跟num一样,就执行对应case里面的代码
            System.out.println("A");
            break;//代码执行到这里,会跳出 swith(跳出switch的大括号)
        case 2:
            System.out.println("B");
            break;
        case 3:
            System.out.println("C");
            break;
    }
    System.out.println("switch结束");
}

结果:

image.png

“原来是这样,执行到 break; 后就跳出 switch 的大括号了

“是的,其实 switch 并不是很重要,工作中也很少使用”

“那还讲它干嘛?”张小飞问道

“虽然很少用,但还是有人用,别看到了,不明白什么意思就糟了”

“哦,原来是这样”

“师兄,如果把 break 去掉会怎么样呢?就像这样”

image.png

“这个,我就建议你自己跑一下,会让你大吃一惊的”

“好,我来试试…,结果竟然是这个样子”
image.png

“为什么会输出 B 呢,是不是我哪里写的错了”

诸小亮:“你没有写错,我给你解释一下吧”

switch 中的值与 case 的值相等时,开始执行 case 后面的代码,执行到 break时,跳出 switch
	语法上,break; 并不是必须的,就像你写的那样
	输出 B 的原因:第一个 case 匹配上后输出 A,因为没有 break,所以继续往下执行第二个 case 中的代码,直到遇上break,如果所有case都没有break,那么代码执行到switch语句结束

张小飞:“原来如此”

“但是,一般人为规定,每个 case 中都要有 break

“如果没有一个 case 可以匹配上呢?”

“那就要加上 default 语句了,就像这样:”

image.png

结果:
image.png一般人为规定,switch中必须有一个default语句

“好的,我记下了”

“不不不不不不不不不不不不不…”

“哎,这是踩电线上了?”张小飞一边问,一边拉一下诸小亮

“我的意思是,这个东西不用记,只需要看到后能明白什么意思就行”

“好的,好的”

诸小亮:“既然说到了这里,那就再给你说两个规则,这也不用记”

  • case后面的值不能重复,比如:

在这里插入图片描述

上图代码,编译会报错

  • switch 中的值可以是: byte、short、int、char、Enum、String 等类型

张小飞:“这个 Enum、String 是什么?”

“Enum是枚举,String是字符串,这两个东西我们会在之后的课程中说到”

3. 循环语句

诸小亮:“接着来看:循环语句(非常重要),开发中经常用到”

张小飞:“那,具体什么是循环语句呢?”

诸小亮:“就是可以让代码重复执行的语句

1. while

诸小亮:“我们先看第一种:while”

语法:

while(条件表达式){
    //当 条件表达式 为ture时,执行 {} 中的代码
}

张小飞:“这看着倒是跟 if 很像”

“是的,只不过,while的 { } 中的代码会重复执行”

1. 初体验

在这里插入图片描述

“师弟,上图代码的执行过程:”

  • 先判断 num >0 的结果,是否为 true
    • 为 true,则执行 { }中的代码
  • 然后再判断num >0 结果,是否为true。。。。。。,一直这样循环
    • 如果num>0一直为 true ,则 { } 中的代码就一直循环执行,所以 { } 中的代码又称为:循环体
  • 当 num >0 =false时,循环结束

张小飞:“按照您的说法,上图中 while 的代码会一直执行啊,永远停不下来”

诸小亮:“是的,这被称为:死循环,也是禁止出现的”

2. 死循环

诸小亮:“上图代码中 num > 0永远是true,所以循环体会一直运行,这种情况称为:死循环

在实际开发中,死循环是禁忌,不允许出现

张小飞:“那,怎么才能避免死循环呢?”

“这就需要我们在循环体中修改 num 的值,从而可以让 num>0 为 false,比如:”

在这里插入图片描述

结果:

在这里插入图片描述

“原来如此,我明白了”

3. 一个小练习

诸小亮:“既然你明白了,就做一个小练习吧,需求:计算1…100的连续自然数之和”

张小飞:“。。。。。。”

“我们先分析一下这个需求,它的计算逻辑应该是这样的:”

  • 先计算1+2=3,得到一个和(假设用 sum 表示这个和)
  • 然后计算 sum+3,得到一个新的和(可以这样写:sum = sum + 3)
  • 然后计算 sum + 4,。。。。。。。
  • 然后计算 sum + 5,。。。。。。。

“我明白了,其实一直都是 sum 加上下一个数,这是在重复运行” 张小飞惊喜道

“是的,那么它的代码应该是。。。。”

“我来,我来” 张小飞抢着说

public static void main(String[] args){
    int sum = 0;
    int n = 1;
    while(n <= 100){
        sum += n;
        n++;//得到下一个数,同时保证不会死循环
    }
    System.out.println(sum);
}

结果:

在这里插入图片描述

诸小亮:“没错,不得不说你还是很有天赋的”

“那是” 张小飞骄傲的说到

2. do while

张小飞:“这个 do while 也是循环?”

诸小亮:“是的,它跟 while 类似,只是写法上有些不同,比如:”

在这里插入图片描述

结果:

在这里插入图片描述

“它的执行过程,跟 while 还是有些差别的”

  • 从 do 开始,先执行循环体中的代码
  • 然后判断 n > 0 是否为 true,为 true 就继续执行循环体
  • 当 n >0 =false时,循环结束

“师兄,我知道差别在哪里了,do while中,循环体的代码最少会执行一次,比如:”

public static void main(String[] args){
    int n = 0;
    
    do{//虽然 n 为0,并不满足 while 中的条件,但是循环体的代码还是会执行
        System.out.println("执行 do while 循环体中的代码");
    }while(n > 0)
    System.out.println("do while 结束");
}

结果:

image.png

“没错,它跟 while 的区别就是:while 先判断条件,do while 先执行循环体再判断条件

3. for(重要)

诸小亮:“下面,就介绍最后一个for 循环了,这是循环语句中最最最最最最最最最最重要的”

张小飞无奈道:“。。。,师兄,麻烦你正常点儿好不好?”

诸小亮:“这不是为了让你知道 for 的重要性嘛,不识好人心”

“好好好,我错了,您接着说”

1. 初体验

“首先,看一下 for 的语法格式:”

for(初始化表达式; 循环条件; 操作表达式){
    循环体
}

张小飞:“嗯…,额…,完全没有看懂”

“没关系,跑个代码你就明白了,比如:”

public static void main(String[] args){
    for(int i = 0;i<3;i++){
        System.out.println("执行 for 循环中的代码");
    }
}

结果:

在这里插入图片描述

“大致可以看明白,但是详细过程还得请您说一下” 张小飞说到

“它的执行过程其实也不难”

1. 首先执行——初始化表达式
	一般都是定义一个变量的初始值
	注意:在 for 循环中,初始化表达式只执行一次
2. 接着判断循环条件,也就是执行 i<3 这句代码,如果为ture,就执行循环体中的代码
3. 然后执行:操作表达式,紧接着从第 2 步开始重复
4. 当 i < 3 为 false 时,循环结束

“原来是这样的,还挺简单”

“确实不难,不过使用 for 时需要注意一点,看下图:”

在这里插入图片描述

结果:

在这里插入图片描述

“这是为什么呢” 张小飞问道

诸小亮:“这是因为:变量都是有作用域(作用范围)的,for中定义的 i 变量,作用范围仅限于for循环内部

2. 过 7

诸小亮:“师弟,听说你酒量不错啊”

张小飞:“???师兄,怎么突然说喝酒的事情了,难道你要请我喝酒?”

“屁,想得美,你请我喝酒才是,我是想说,喝酒时你是不是经常玩一个游戏,叫:过 7”

“是啊,但它已经过时了,现在流行‘金陵十三钗’,这个游戏。。。”说起喝酒,张小飞就滔滔不绝起来

“停停停,扯远了,回到代码这里,我是想说根据目前的知识,能否写段代码, 找出1-100 中 7 的倍数?”

“这个…,是用 for 循环吗?”

“没错,就用这个,给你提供个思路:如果数字除以7,余数是0,那么它就是7的倍数”

“好的,我琢磨一下”

3分钟后。

“师兄,我写出来了,你看看”

public static void main(String[] args){
    for(int i = 1;i<=100;i++){
        if(i % 7 == 0){
            System.out.println(i);	
        }
    }
}

“嗯嗯,不错不错,早说你有天赋了” 诸小亮赞扬道

“过奖,过奖,其实还好啦,也就是比诸葛亮先生多读了本《三国演义》而已!”

“嗯?怎么感觉你在 cue 我,我还比林黛玉多看了本《红楼梦》呢!” 诸小亮反驳道

“不敢不敢,不过师兄,你真的看过红楼梦?”

“怎么我看什么书还得跟你说一声?” 诸小亮狠狠的瞪了张小飞一眼回答道

“那你知道金陵十二钗正册都有谁?” 张小飞问道

“。。。。。。,就你话多”

3. for循环嵌套

张小飞:“这个 循环嵌套 是什么意思?”

诸小亮:“就是说:for 循环中还有 for 循环,也称为:双层 for 循环 或者 多层 for 循环”

“师兄,是这样吗?”

public static void main(String[] args){
    for(int i = 0;i<3;i++){
        for(int y = 0;y<3;y++){
            System.out.println("执行 for 循环中的代码");
        }
    }
}

“没错,使用双层 for 循环时,最重要的是:得明白循环体执行了多少次,来看看下面的代码”

public static void main(String[] args){
    //使用双层for循环,或者多层for循环时,最重要的是要知道,每个循环体都执行了多少次
    for(int x = 0;x<3;x++){
        System.out.println("x ===== " + x);
        for(int y = 0;y<4;y++){
            System.out.println("y = " + y);
        }
    }
}

结果:

在这里插入图片描述

张小飞:“上图中,x 输出了 3 次,y 输出了 12 次,我大概明白什么意思了”

诸小亮:“很好,那我们就继续了”

4. println() 和 print();

诸小亮:“来,我们讲点儿跟 for 无关的东西,System.out.print() ”

张小飞:“这个不就是输出语句吗?”

“你仔细看,咱们之前用的是 println() ,而现在是 print()”

“哦,还真是,这俩有什么区别?”

“很简单:println():打印后换行,print():打印后不换行,给你演示一下就明白了”

public static void main(String[] args){
    // println
    System.out.println("打印后换行");
    System.out.println("上面打印后换行,所以这是新的一行");
    
    // println 中不写东西,就是单纯的换行
    System.out.println("");
    
    // print
    System.out.print("打印后不换行--");
    System.out.print("不换行我就跟在你后面");
}

结果:

在这里插入图片描述

“师弟,这个输出结果能看明白吗?”

“当然可以了,只是不明白为什么突然说起这个东西”

5. 打印 * 号

诸小亮:“因为,接下来我就要让你看个编程题了”

张小飞:“编程题?什么意思?”

“给你一个任务:每一行打印 5 个 * 号,打印 3 行,要用双层 for 循环实现”

“好的,我来试试”张小飞说到

“不,这个我来写,你先看看”

public static void main(String[] args){
    for(int x = 0;x<3;x++){
        for(int y = 0;y<5;y++){
            System.out.print("*");
        }
        System.out.println("");
    }
}

在这里插入图片描述

“师弟,从结果中可以看出,一共是 3 行 5 列,对吧”

“嗯,是的,不过您具体是想表达什么意思呢?”

“其实是想让你明白,代码中:外层 for 控制的是行数,内层 for 控制的是每行打印的内容

“这样啊,我明白了”

6. 练习一下

诸小亮:“既然你明白了,就尝试下吧,写代码打印出下面的图形”

张小飞:“这两图形挺有意思的,我就来试一下”


10分钟后。

“师兄我已经写出来, 你看看,第一个图形的代码:”

public static void main(String[] args){
    for(int x = 0; x<5; x++){
        for(int y = x; y<5; y++){
            System.out.print("*");
        }
        System.out.println("");
    }
}

“第二个图形的代码”

public static void main(String[] args){
    for(int x = 1; x<=5; x++){
        for(int y = 0; y<x; y++){
            System.out.print("*");
        }
        System.out.println("");
    }
}
7. break

诸小亮:“下面讲一下 break 语句 ”

张小飞:“是 switch case 中的 break 吗?不是已经说过了吗?”

“是的 ,不过它也常常用在循环语句中”

break 的使用范围:switch、循环语句(while、do while、for)
作用:跳出 switch 或 循环语句

“师兄,举个例子吧”

“没问题,你看看下面的代码”

public static void main(String[] args){
    for(int i = 0;i<5;i++){
        if(i == 3){
            break;//执行break后,跳出for循环
        }
        System.out.println("i = " + i);
    }
    System.out.println("for循环结束");
}

image.png在 i=3 的时候,就跳出循环了,所以后面的就不输出了

“原来是这样用的,我明白了”

“但是,需要注意一种情况:”

在这里插入图片描述

结果:
image.png

“您是想说,break 语句后面不能在写其他语句,因为无法执行到,是这样吗?”

“聪明,另外,使用多层 for 的时候需要注意:break只能跳出一个循环,比如:”

public static void main(String[] args){
    for(int i = 0;i<5;i++){
        for(int j = 0;j<5;j++){
            System.out.println("i = " + i);
            break;//执行后,跳出当前for循环
        }
    }
}

结果:
image.png
“明白,明白”

8. continue

张小飞:“这个 continue 是做什么的?”

诸小亮:“continue 也经常在 循环语句 中用到,作用: 结束本次循环,继续下一次循环

示例:(注意看代码中的注释)

public static void main(String[] args){
    for(int i = 0; i<10; i++){
        if(i % 2 == 0){
            continue;//执行continue后,继续下一次循环(走 i++ 这句代码)
        }
        System.out.println("i = " + i);
    }
}

结果:
在这里插入图片描述

“原来是这样” 张小飞说到

“好了,我们今天就先到这里吧,剩下的时间,你练习一下?”

“好的,虽然不难,但是东西确实挺多的,我再看看”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值