2.0流程控制
Posted L1nus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.0流程控制相关的知识,希望对你有一定的参考价值。
流程控制对于任何一门语言来说都至关重要,它提供了控制程序步骤的基本手段。如果没有流程控制,整个程序将安卓线性的顺序来执行,不能根据用户的输入决定执行的序列。
复合语句
(概念)同C语言或其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。复合语句由开括号“{”和闭括号“}”开始及结束。(举例)在定义一个类或方法时,类体就是以“{}”作为开始和结束的标记,方法体同样是以“{}”作为标记。对于复合语句中的每个语句都是从上到下地执行。复合语句以整个块为单位,可以用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句。
在主方法中定义复合语句块,其中包含另一个复合语句块。
在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。
条件语句
条件语句可根据不同的条件执行不同的语句。条件语句包括if条件语句与switch多分支语句。
if条件语句
if条件语句用于告诉程序某个条件成立的情况下执行某段程序,而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if语句、if……else语句和if……else if 多分支语句。
1)简单的if条件语句
语法格式:if(布尔表达式){
语句序列
}
布尔表达式:必要参数,表示它最后返回的结果必须是一个布尔值。它可以使一个单纯的布尔变量或者常量,或者使用关系或布尔运算符的表达式。
语句序列:可选参数。可以使一条或多条语句,当表达式的值为true时执行这些语句。如语句序列中仅有一条语句,则可以省略条件语句中的大括号。
注意:虽然if和else语句后面的复合语句块只有一条语句,省略“{}”并无语法错误,但为了增强程序的可读性,最好不要省略。
2)if……else语句
if……else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地作出处理。表现为“如果满足某种条件,就进行某种处理,否则进行另外一种处理”。语法格式:
if(表达式){
若干语句
}
else{
若干语句
}
if后面()内的表达式的值必须是Boolean型的。如果表达式的值为true,则执行紧跟if语句的符合语句;如果表达式的值为false,则执行else后面的复合语句。if……else的执行过程如图:
同简单的if条件语句一样,如果if……else语句的语句序列中只有一条语句(不包括注释),则可以省略该语句序列外面的大括号。有时为了编程的需要,else或if后面的大括号里可以没有语句。
3)if……else if 多分支语句
if……else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件”,就进行某种处理,否则,如果满足另一种则执行另一种处理。语法格式:
if(条件表达式1){
语句序列1
}else if(条件表达式2){
语句序列2
}
……
else if(条件表达式n){
语句序列n
}
条件表达式1~条件表达式n:必要参数。可以由多个表达式组成,但最后返回的结果一定要为Boolean类型。语句序列:可以使一条或多条语句,当表达式1的值为true时,执行语句序列1;当条件表达式2的值为true时,执行语句序列2,以此类推。当省略任意一组语句序列时,可以保留其外面的大括号,也可以将大括号替换为“;”。
注意:if语句只执行条件为真的命令语句,其他语句都不会执行。
switch多分支语句
在编程中一个常见的问题就是检测一个变量是否符合某个条件,如果不匹配,再用另一个值来检测它,依次类推。当然,这种问题使用if条件语句也可以完成。
有时使用if语句会显得比较笨重,程序员需要测试不同的值来给出输出语句。在Java语言中,可以用switch语句将动作组织起来,就能以一个较简单明了的方式来实现“多选一”的选择。语法格式:
switch(表达式)
{case 常量值1;
语句块1;
[break;]
……
case 常量值n;
语句块n
[break;]
default;
语句块n+1;
[break;]
}
switch语句中表达式的值必须是整型或字符型,常量值1~常量值n必须也是整型或字符型。switch语句首先计算表达式的值,如果表达式的值和某个case后面变量值相同,则执行该case语句后的若干个语句直到break语句为止。如果此时该case语句没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句为可选的,如果它不存在,而且switch语句中表达式的值不与任何case的常量值相同,switch则不作任何处理。
注意:同一个switch语句,case的常量值必须互不相同。
switch语句的执行过程:
注意:在switch语句中,case语句后常量表达式的值可以为整数,但绝不可以为实数。例如下面的代码时不合法的case 1.1;常量表达式的值可以是字符,但一定不可以是字符串。例如下面的代码时非法的。case “ok”;
循环语句
(概念)循环语句就是在满足一定条件的情况下反复执行某一个操作。在Java中提供了3种常用的循环语句,分别是while循环语句、do……while循环语句和for循环语句。
while循环语句
while循环语句也称为条件判断语句它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法格式:
while(条件表达式)
{
执行语句
}
当条件表达式的返回值为真时,则执行“{}”中的语句,当执行完“{}”中的语句后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,推出循环。while循环语句的执行过程:
注意:初学者常犯的一个错就是在while表达式的括号后面加上“;”。这时程序会认为要执行一条空语句,而进入无限循环,Java编译器又不会报错,会浪费很多时间去调试,应该注意这个问题。
do……while循环语句
do……while循环语句与while循环语句类似,他们之间的区别是while循环语句为先判断条件是否成立再执行循环体,而do……while村换语句则先执行一次循环后,再判断条件是否成立。也就是说,do……while循环语句中大括中的程序段至少要被执行一次。语法格式:
do
{
执行语句
}
while(条件表达式);
与while语句的一个明显区别是do……while循环语句在结尾处多了一个分号(;)。根据do……while循环语句的语法特点总结出do……while循环语句的执行过程:
for循环语句
for语句
for循环语句是Java程序设计中最有用的循环语句之一。一个for循环语句可以用来重复执行某条语句,直到某个条件得到满足。在Java5以后新增了foreach语法。
语法格式:
for(表达式1,;表达式2;表达式3)
{
语句序列
}
表达式1:初始化表达式,负责完成变量的初始化。
表达式2:循环条件表达式
表达式3:循环后操作表达式,负责修整变量,改变循环条件。
在执行for循环时,首先执行表达式1,完成某一变量的初始化工作;下一步判断表达式2的值,若表达式2的值为true,则进入循环体;在执行完循环体后紧接着计算表达式3,这部分通常是增加或减少循环循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算表达式2开始,若表达式2返回true,则继续执行,否则跳出整个for循环语句。执行过程如图:
foreach语句
foreach语句是for语句的特殊简化版本,foreach语句并不能完全取代for语句,然而任何foreach语句都可以改变为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为foreach语句。foreach语句在遍历数组等方面提供了很大的方便。语法格式:
for(元素变量x:遍历对象obj){
引用了x的Java语句;
}
foreach语句中的元素变量x,不必对其进行初始化。
跳转语句
Java语言提供了3中跳转语句,分别是break语句、continue语句和return语句。
break语句
在switch语句中,break语句用于中止下面case语句的比较。实际上,break语句还可以应用在for、while和do……while循环语句中,用于强行退出循环,也就是忽略循环体中任何其他语句和循环条件的限制。
虽然设计代码,for循环被设计为计算从1~100之间所有连续整数的和,但是由于当累加和大于1000时使用break语句中止了for循环语句,所以当循环结束时i的值并不等于100,而是等于45。需要说明的是,使用了break语句 ,只能退出当前循环。
continue语句
continue语句只能应用在for、while和do……while循环语句中,用于让程序直接跳过其后面的语句,直接进行下一次循环。
注意:当使用continue语句中止本次循环后,如果循环条件的结果为false,则退出循环,否则继续下一次循环。
return语句
return语句可以从一个方法返回,并把控制权交给调用它的语句。语法格式:
return[表达式];
表达式:可选参数,表示要返回的值。它的数据类型必须与方法声明中的返回值类型一致,可以通过强制类型转换实现。
return语句通常被放在被调用方法的最后,用于退出当前方法并返回一个值。当把单独的return语句放在一个方法的中间时,会产生UNreachable code编译错误。但是可以通过把return语句用if语句括起来的方法,将return语句放在一个方法中间,用来实现在程序未执行完方法中的全部语句时推出。
终止循环体
循环体用于复杂的业务处理,可以提高程序的性能和代码的可读性,但是循环中也有特殊情况,如由于某些原因需要立刻中断循环去执行下面的业务逻辑,在某类的主方法中创建一个字符串数组,在使用foreach语句遍历时判断如果发现数组中包含字符串“老鹰”则立刻中断循环。然后创建一个整数类型二维数组,使用双层foreach循环遍历,当发现第一个小于60的数组元素时,则立刻中断整个双层循环,而不是内层循环。
循环体的过滤器
循环体中可以通过break语句中断整个循环,这增加了循环的控制能力,但是对于特殊情况还是不够,例如某些条件下需要放弃部分循环处理,而不是整体循环。Java提供了continue语句来实现这一功能,continue可以放弃本次循环体的剩余代码,不执行它们而开始下一轮循环。
本章小结
流程控制语句(复合语句、条件语句和循环语句)。使用复合语句可以为变量定义一个有效区域。通过使用if与switch语句,可以基于布尔类型的测试,将一个程序分成不同的部分。通过while、do……while循环语句和for循环语句,可以让程序的一部分重复地执行,直到满足某个终止循环的条件。应该在程序中灵活地使用流程控制语句。
以上是关于2.0流程控制的主要内容,如果未能解决你的问题,请参考以下文章