第3章.流程控制语句

流程概述

概念:流程是指程序步骤执行的先后顺序,先做什么,后做什么。

分类

  1. 顺序结构:从上到下,从前向后,顺序执行。

  2. 选择结构:执行路线分叉,做这个,或者做那个,也叫分支结构。

  3. 循环结构:重复做一些事情。

顺序结构

程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

总地来说:写在前面的先执行,写在后面的后执行。


流程图

选择结构

Java中主要通过if语句来实现选择分支流程,if语句的格式有常用的三种:

  • 单if语句:执行某些步骤,或者不执行它们。

  • 标准的if-else语句:在2套步骤方案中选择一种执行。

  • 扩展的if-else语句:在3套或更多步骤方案中选择一种执行。

单if语句

效果:根据条件判断,成立则执行一些代码,不成立则不执行这些代码。

格式:

if (布尔表达式) {

语句体

}

执行流程:

  1. 首先判断小括号之内的条件是true还是false。

  2. 如果是true,则执行大括号之内的语句体,即一些代码。

  3. 如果是false,则不执行大括号之内的语句体。

流程图

标准的if-else语句

效果:根据条件判断,成立则执行if中的代码,不成立则执行else中的代码。

格式:

if (布尔表达式) {

语句体A

} else {

语句体B

}

执行流程:

  1. 首先判断小括号之内的条件是true还是false。

  2. 如果是true,那么执行if大括号内的语句体A,而else的内容将不再执行。

  3. 如果是false,那么执行else大括号内的语句体B,而if的内容将不再执行。

    流程图

扩展的if-else语句

作用:在N个语句体当中选择其中的一个执行。

格式:

if (条件判断1) {

语句体1

} else if (条件判断2) {

语句体2

}

...

else if (条件判断N) {

语句体N

} else {

语句体N+1

}

执行流程:

  1. 如果条件判断1成立,执行语句体1,后续代码不再执行。

  2. 如果条件判断1不成立,跳过语句体1,继续执行条件判断2。

  3. 如果条件判断2成立,执行语句体2,后续代码不再执行。

  4. 如果条件判断2不成立,跳过语句体2,继续执行条件判断N。

  5. 如果条件判断N成立,执行语句体N,后续代码不再执行。

  6. 如果条件判断N不成立,跳过语句体N,执行else中的代码。

流程图

练习1:考试成绩划分

提示:总共有5种情况,5者选其一。成绩划分的标准为:

l 优秀:90-100分

l 良好:80-89分

l 中等:70-79分

l 及格:60-69分

l 不及格:0-59分

System.out.println("请你输入你的成绩");
        Scanner sc = new Scanner(System.in);
        double d = sc.nextDouble();
        if(d>=90&&d<=100){
            System.out.println("你的等级是优秀");
        }else if(d>=80&&d<=89){
            System.out.println("你的等级是良好");
        }else if(d>=70&&d<=79){
            System.out.println("你的等级是中等");
        }else if(d>=60&&d<=69){
            System.out.println("你的等级是及格");
        }else if(d<=59&&d>=0){
            System.out.println("你的等级是不及格");
        }else if(d>100||d<0){
            System.out.println("输入不正确请重新输入");
        }

练习2:求两者最大值

提示:有两个数字a和b,要么a大,要么一定是b大,所以应该使用标准的if-else语句,二者选其一。对于a和b一样大的情况,可以归并为两种情况中的任何一种。

练习3:求三者最大值

提示:已经掌握了两者最大值,则可以将三个数字的大小比较,拆分为两两比较。

System.out.println("你好请你输入3个数");
        Scanner sc =new Scanner(System.in);
        int a =sc.nextInt();
        
        Scanner sc1 =new Scanner(System.in);
        int b =sc1.nextInt();
        
        Scanner sc2 =new Scanner(System.in);
        int c =sc2.nextInt();
        
        if(a>b&&a>c){
            System.out.println(a+"最大");
        }else if(b>a&&b>c){
            System.out.println(b+"最大");
        }else if(c>a&&c>b){
            System.out.println(c+"最大");
        }

循环结构

组成部分

一个循环结构的典型组成部分有:

  1. 初始化语句(准备工作)。这部分内容最先执行,而且仅执行一次。

  2. 条件判断(布尔结果)。如果成立,则循环继续;如果不成立,则循环退出。

  3. 循环体(重复的内容)。每次循环都将重复执行循环体的代码内容。

  4. 步进语句(扫尾工作)。每次循环体执行后,都会执行一次步进语句。

for循环

通常用于控制次数的场景,格式为:

for (①初始化语句; ②条件判断; ④步进语句) {

③循环体

}

执行顺序: ①②③④=>②③④=>②③④……直到②不满足为止。

①负责完成循环变量初始化

②负责判断是否满足循环条件,不满足则跳出循环

③具体执行的语句

④循环后,循环条件所涉及变量的变化情况

流程图

练习:求出1-100的偶数和

使用for循环,从1一直到100逐一判断,如果是偶数,则累加起来。最终输出结果。

while循环

通常用于控制条件的场景,格式有两种。

标准格式

while (①条件判断) {

②循环体

}

执行顺序: ①②=>①②=>①②……直到①不满足为止。

①负责判断是否满足循环条件,不满足则跳出循环

②具体执行的语句

流程图

扩展格式

①初始化语句

while (②条件判断) {

③循环体

④步进语句

}

执行顺序: ①②③④=>②③④=>②③④……直到②不满足为止。

①负责完成循环变量初始化

②负责判断是否满足循环条件,不满足则跳出循环

③具体执行的语句

④循环后,循环条件所涉及变量的变化情况

流程图

练习:求出1-100的奇数和

使用while循环,从1一直到100逐一判断,如果是偶数,则累加起来。最终输出结果。

for与while的区别

大多数时候,for循环与while循环可以等效替换。但是二者存在几点区别:

  1. for循环格式固定,控制次数更方便;而while循环格式灵活,不太在意循环次数。所以次数确定使用for较多;次数不确定,使用while较多。

  2. for循环小括号内定义的变量,循环内可用,循环外不可用;while循环的初始化表达式本来就在外面,仍然可用。

  3. 跳转语句continue的效果不同。(稍后介绍)

跳转控制语句

循环当中可以使用两种跳转控制语句:

  • break语句

  • continue语句

break语句

如果希望当前循环立刻结束,可以使用break语句:

break;

一旦执行这个语句,整个循环立刻结束。

continue语句

如果希望循环只是跳过当前次,后续还要继续,那么可以使用continue语句:

continue;

一旦执行这个语句,当前次循环剩余内容立刻跳过,马上开始下一次循环。

break与continue的区别

l break会将整个循环彻底打断,剩余多少次全都没有了;

l continue只是跳过当前次,剩余的更多次仍然还有。

死循环

概念:永远无法退出的循环,叫做死循环。

如果希望手写一个死循环,那么可以使用格式:

标准格式:

while (true) {

循环体

}

还有另外一种等效的格式:

for (;;) {

循环体

}

PS:死循环当中仍然可以根据实际需要使用break或continue语句。

循环嵌套

可以在一个循环的内部,套用又一个循环,行程内外层嵌套的结构。

在循环嵌套中,外层循环的每一次执行,都对应这内层循环的完整多次执行。

练习:打印一天的分钟时刻

提示:外层控制小时,内层控制分钟。

循环嵌套中的跳转语句

break或continue只能作用于当前所属层循环。如果希望作用于外层循环,可以使用标签的写法:

标签名称: for (...) { // 外层循环

for (...) { // 内层循环

break 标签名称;

}

}

知识总结

  1. 流程:也就是代码的若干个步骤,先做什么,后做什么。

  2. 流程分类:

a) 顺序结构

b) 选择结构

c) 循环结构

  1. 选择结构,if语句的格式三种:

a) 单if语句:执行代码,或者不执行;有或无

b) 标准的if-else语句:执行A或者执行B,二者选其一

c) 扩展的if-else语句:N者选其一

  1. 循环结构:

a) for循环:格式比较死,擅长控制次数

b) while循环:格式比较灵活,不太在意次数。

i. 标准格式

ii. 扩展格式

  1. 跳转控制语句:

a) break:一旦执行,整个循环立刻结束

b) continue:一旦执行,当前单次循环立刻结束,马上开始下一次。

  1. 循环嵌套。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359