第二章 流程控制合集

2.1 复合语句

        在Java语言中,语句是最小的组成单位,每条语句都必须使用分号作为结束符。如果想把多条语句看作单条语句,Java 提供的方法又是什么呢?答案就是复合语句。
        与C语言及其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。简而言之,复合语句是很多条语句的组合。在语法格式方面,复合语句由开括号“{”开始,闭括号“}”结束。

        在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。

2.2 if条件语句

        条件语句可以根据不同的条件执行不同的语句。条件语句包括if与switch多分支语句。

        2.2.1 简单的if条件语句

        if语句是一个重要的语句,它可以让程序在某个条件成立的情况下执行某段程序。

        关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行if语句中的语句组;若为false,则不执行语句组。if语句的语法如下

if (布尔表达式){

语句组;

}

        布尔表达式:必要参数,它最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是关系表达式。

        语句组:可以是一条或多条语句,当布尔表达式的值为true时执行这些语句。若语句组中仅有一行代码,则可以省略语句组前后的大括号。

        2.2.2 if...else语句

        if…else语句是判断语句中最常用的一种形式,它会针对某种条件有选择地作出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。if…else语句的语法如下

if(布尔表达式){

    语句组一;

}else {

    语句组二;

}

        同简单的if条件语句一样,如果if...else语句的语句序列中只有一条语句(不包括注释),则可以省略该数据序列外面的“{}”。有时为了编程的需要,else或者if后面的“{}”中可以没有语句。

        2.2.3 if…else if多分支语句

        if…else if多分支语句用于对某一事件进行多次判断的场景,每判断一次就缩小一定的检查范围。通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件则执行另一种处理。

if (布尔表达式1) {

    语句组1;

} else if (布尔表达式2) {

    语句组2;

}

…

else if (布尔表达式n) {

    语句组n;

} else {

语句组n+1;

}

        条件表达式1~条件表达式n:必要参数。可以由多个表达式组成,但最后返回的结果一定要为boolean类型。

        语句组1~n:可以是一条或多条语句,当布尔表达式1的值为true时,执行语句组1;当布尔表达式2的值为true时,执行语句组2,依此类推。

        2.2.4 if语句的嵌套

        if语句和if...else语句都可以嵌套判断语句,在if语句中嵌套if...else语句。

if(表达式1)

{

    if(表达式2)

        语句1;

    else

        语句2;

}

         在if...else语句中嵌套if...else语句。

if (表达式1) {

    if (表达式2)

        语句组1;

    else

        语句组2;

} else {

    if (表达式3)

        语句组3;

    else

        语句组4;

}

        判断语句嵌套方式非常灵活,可以根据具体需求进行设计,但一定要注意代码的逻辑关系要保持正确、清晰。

        使用判断语句嵌套时要注意else关键字要和if关键字成对出现,并且遵守临近原则,else关键字和自己最近的if语句构成一对。书写if…else语句要养成对齐缩进格式的良好习惯。

2.3switch多分支语句

        判断语句就是检测一个变量是否符合某个条件,如果不符合,再用另一个值来检测,依此类推。

        在Java中,可以用switch多分支语句将判断过程组织起来,以一个较简单明了的方式来实现“多选一”的选择。

        switch的语法如下:

switch(用于判断的值){

case 常量表达式1 : 语句1; [break;]

case 常量表达式2 : 语句2; [break;]

......

case 常量表达式n : 语句n; [break;]

[default : 语句n+1;]

}

        switch语句会将圆括号中的值与case后面的表达式一一匹配,如果有存在两者相等的情况,switch会执行此表达式冒号之后的语句。break是用来结束switch的,可以根据实际需求选择忽略。

        在不同的场景下,switch的流程稍显复杂。

        (1)switch语句中不是所有case语句都会被执行,所以这里使用两种颜色的区域进行划分,如图1所示,绿色区域是会执行的区域,红色区域是不会执行的区域,也就是红框中的代码会被switch略过。

       (2)最简单switch语句中,如果圆括号内值与第一个case匹配上了,按照代码顺序依次执行。

        (3)如果case语句中包含break关键字,遇到break关键字整个switch语句就结束了,不会再继续执行后面的case了,过程如图3所示。

        (4)switch进行匹配时,如果第一个case匹配不成功则会跳过,直到与某一个case匹配成功为止,过程如图4所示。

        (5)如果没有任何一个case可以匹配成功,switch则会跳过所有case,直接运行default中的代码,过程如图5所示。如果此时switch语句中没有default,则会直接结束switch语句。

 2.4 while循环语句

        程序中最简单的循环是while循环,while循环语句的语法如下:

while(布尔表达式){

    语句组;

}

        布尔表达式的值是一个逻辑值(true和false),当布尔表达式的值为true时开始循环执行语句组,当表达式的值为false时则停止循环。循环每次执行完语句组后,都会重新判断布尔表达式值。 

 2.5 do...while 循环语句

        如果使用while循环实现此场景,需要在循环外对用户的输入信息做一次判断,在循环内还要做一次判断,这样就出现了重复代码。但是do…while循环可以很好地解决这个问题。

        do…while循环的语法如下:

do{

    语句组;

}while(布尔表达式);

        do是Java关键字,必须与while配对使用。循环语句中的布尔表达式与while语句中布尔表达式相同,但特别值得注意的是do…while语句后要有分号“;”。

        do…while循环语句执行的过程是:先执行一次语句组,然后再判断条件表达式,如果条件表达式的值为true,则重复执行语句组,否则退出循环。也就是说,do…while循环语句中的循环体至少被执行一次。

2.6 for循环语句

        for循环是开发语言中最常用的循环语句,使用的频率比while循环还要频繁。for循环有着while循环所不能比拟的灵活性,让for循环可以胜任任何场景。Java中的for循环有两种形式:一种是传统的、灵活性强、代码量大的for语句,另一种是“全自动化”、灵活性较弱的foreach语句。

        2.6.1 传统的for语句

        for循环语句的语法如下:

for(表达式1; 表达式2; 表达式3) {

语句组;

}

        表达式1:该表达式通常是一个赋值表达式。

        表达式2:该表达式是一个布尔表达式,作为循环的条件。

        表达式3:该表达式在每次循环结束之后执行。

        语句组:语句组可以是一行或多行语句。

        for循环语句的执行过程如下:

        (1)先执行表达式1,表达式1在整个循环过程中只会执行一次。

        (2)判断表达式2,若其值为true,则执行语句组,若其值为false,则结束循环。

        (3)执行表达式3。

        (4)返回第(2)步继续执行。

        2.6.2 foreach语句

        foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而任何foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为foreach语句。foreach语句在遍历数组等方面为程序员提供了很大的便利。语法如下:

for(循环变量x : 遍历对象obj){

    引用了x的java语句;

}

        遍历对象obj:依次去读obj中元素的值。

        循环变量x:将obj遍历读取出的值赋给x。

        遍历,在数据结构中是指沿着某条路线,依次对树中每个节点均做一次且仅做一次访问。我们可以简单的理解为,对数组或集合中的所有元素,逐一访问,依次读取一遍。数组,就是相同数据类型的元素按一定顺序排列的集合。

        foreach语句不需对循环变量x进行初始化,x会自动获取obj中的值。下面通过简单的例子来介绍foreach语句是如何遍历一维数组的。

2.7 循环嵌套

        循环有for、while、do…while 3种方式,这3种循环可以相互嵌套。例如,在for循环中套用for循环,代码如下:

for(...) {

    for(...) {

        ...

    }

}

        在while循环中套用while循环,代码如下:

while(...) {

    while(...) {

        ...

    }

}

        在while循环中套用for循环,代码如下:

while(...) {

    for(...) {

        ...

    }

}

        利用循环嵌套可以写出很多复杂、有趣的算法。 

 2.8 循环控制

        开发者有两种方法可以对循环进行控制:一种方法是控制循环变量,让循环变量变成某个值时结束循环;另一种方法就是使用控制循环的关键字。控制循环的关键字有两个:即break和continue。这两个关键字可以实现不同的效果,break是结束循环,也可以称为跳出循环;continue是直接执行下一次循环,也就是跳过本次循环。

        2.8.1 break语句

        break关键字可以提前结束switch语句。在循环结构中,同样也可用break语句提前结束循环。

        如果遇到循环嵌套的情况,break关键字只能结束当前正在执行的、包含此break的内层的循环,外层循环不会受此影响。

        内层循环中使用了一个if语句,当j等于4时执行break,这样就停止了内层循环,j值最大值到3为止,不会出现4以上的值。但是外层的循环没有受任何影响。

        如果想要让break结束外层循环,需要给外层循环添加标签。给循环添加标签,并使用break结束该循环的语法如下:

标签名: 循环体{

break 标签名;

}

        标签名:任意标识符,定义在循环体之前。

        循环体:任意循环语句。

        break标签名:break结束指定的循环,此循环的标签名必须与break的标签名一致。

        给break添加标签之后,就可以结束指定的循环,该循环可以是内层循环,也可以是外层循环。

        2.8.2 continue 语句

        continue语句是针对break语句的补充。continue不是立即结束循环体,而是停止执行本次循环内容,直接执行下一次的循环内容。for语句遇到continue后,会直接进入计算表达式3的步骤。while语句和do…while循环遇到continue后,会直接回到校验布尔表达式的步骤。

        与break语句一样,continue也支持标签功能,可以让continue跳过指定的循环。continue使用标签的语法如下:

标签名: 循环体{

    continue 标签名;

}

        标签名:任意标识符,定义在循环体之前。

        循环体:任意循环语句。

        continue标签名:continue跳出指定的循环体,此循环体的标签名必须与continue的标签名一致。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值