Java学习笔记:流程控制之分支语句
流程控制
流程控制(flowof control)是程序执行动作的顺序。Java和其他大多数其他编程语言,都使用了两种语句来规范控制流程:分支语句(branchingstatement)会从两个或多个可能的动作列表中选择一个动作;循环语句(loopstatement)会不断地重复一个动作,直到满足某种停止条件为止。
1、布尔表达式
在介绍流程控制之前,有必要介绍下布尔表达式
Boolean_Expression,布尔表达式,顾名思义,这是一个表达式,但结果是一个布尔值,也就是说这个表达式的值非真即假(必须是true或false,与C++/C不同,Java中不认为0是假)。这个真假是通过逻辑运算符计算得到的,关于逻辑运算符,请参考这篇文章。
如income >=1000;这就是一个布尔表达式。如果income的值为2000,2000大于1000,那么这个布尔表达式的值为true,如果income的值为800,800不大于1000,那么这个布尔表达式的值为false。也就是说,布尔表达式是一个判断式。在不同的情况下得出真或假的结果。
布尔表达式要用括号括起来。由于单一的布尔表达式是一个布尔值。针对布尔值可以用逻辑运算符进行操作。
例如,需要同时满足两个条件,那么就可以用以下的表达方式:
((sub_Boolean_Expression1)&&(sub_Boolean_Expression1));
注意括号的使用。
&&
运算符是表达“与”,当这两个子表达式都为真的时候,整个大的表达式才为真。具体示例:
((income>=1000)&&(income <= 5000));
这就是限定
income必须在
1000至
5000之间。
注意:
Java
不允许连续的判断,如
5000<= income <= 1000
。只能将小的判断式(布尔表达式)用逻辑运算符和括号组织起来,组成大的布尔表达式。
如果有两个条件,只需要满足其中一个条件,那么可以用||运算符,用来表示“或”。如((income>=5000)||(income <= 1000));表示income大于5000或小于1000。
如果想取一个条件的相反值,比如想得到income不大于1000的情况下,可以选择布尔表达式
(income< 1000)或 !(income >=1000);
If-else分支语句
对分支语句的讨论,将以一种能在两种可能的备选动作中进行选择的Java语句作为开始。分支语句中必须有条件判断式(布尔表达式),当程序运行到分支语句时,会选择符合相应的判断式,并执行其分支语句。
If-else语句
if-else语句根据判定条件的真假来执行两种操作中的一种,基本语法为:
If (Boolean_Expression)
Statement_1;
Else
Statement_2;
如果
Boolean_Expression为真,就执行
Statement_1;否则,执行
Statement_2。
举例:
If (time < limit)
System.out.printlin(“Youmade it.”);
Else
System.out.println(“Youmissed the deadline.”);
If语句(省略else部分):
If(Boolean_Expression)
Action_Statement;
如果
Boolean_Expression为真,就执行
Action_Statement,否则什么也不会发生,程序跳过该
if语句执行下一条语句。
复合语句
如果要在一个选择中包含多条语句,就要像下面的例子这样用花括号将这些句子组织起来:
if(Boolean_Expression)
{
statement1 ;
statement2
}
else
{
statement3 ;
statement4 ;
}
当条件
Boolean_Expression为真时,执行
statement1和
statement2(注意当一个选择分支中有多条语句需要执行时,需要将这些语句用大括号括起来形成一个整体)。当
Boolean_Expression为假时,执行
statement3和
statement4。
嵌套语句
上述中介绍的只能选择两种情况:income大于等于1000和income小于1000两种情况。
如果在income大于1000的情况下,又要考虑income在1000和5000之间和income大于5000两种情况怎么办?这就要用到了嵌套语句。就是在一条if-else语句中使用另一条if-else语句。如下:
if(Boolean_Expression1)
{
if(Boolean_Expression2)
{
statement1 ;
}
else
{
Statement2 ;
}
}
else
{
statement3 ;
}
这里,先判断表达式
Boolean_Expression1的真假,如果为真,执行
if里面的语句块;如果为假,执行
else里面的语句块。假设
Boolean_Expression1为真,那么将要执行第一层
if的语句块,这个语句块里是另一个
if-else语句块。所以判断
Boolean_Expression2的真假,当为真时,执行
statement1 ;。为假时,执行
statement2 ;然后这整个
if-else语句就执行结束了。
注意:嵌套语句中的if和else要一一对应:外层的对应外层的,内层的对应内层的。
多条件选择
如果选择情况不止两种,那么可以用elseif来添加选择条件,基本格式如下:
if(Boolean_Expression1)
{
statement1;
}
elseif(Boolean_Expression2)
{
statement2;
}
.
.
.
elseif(Boolean_ExpressionM)
{
statementM;
}
Else
{
statementN;
}
这里执行的时候,任意两个Boolean_Expression不能同时为真。程序会执行当时条件下,Boolean_Expression为真的那个语句块下的语句。
需要注意的地方:缩进不是必须的,但为了阅读的方便,强烈建议每一个对应的if和else具有相同的缩进。如果每个分支语句中需要执行的语句超过一条,必须用花括号将语句组织起来。(嵌套的内部if-else语句中如果只有一条执行语句,如嵌套语句那一节介绍的例子一样,虽然可以不用花括号,但从方便阅读代码的角度来看,依然建议使用)。
如这一系列文章的第一篇的开头所述,Java中每个单一的语句后都必须以分号结尾。
else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。
2.switch语句
分支语句不仅可以根据布尔表达式进行分支选择,还可以根据具体的值来选择分支。假设一种情景,测验中得到A的是90分以上,得到B的是80——90分。得到C的是70-80分。那么就可以根据这些具体的值来使用switch语句。(当然,也可以判断得到的成绩是不是A、B、C的布尔表达式加多分支if-else语句来实现,但是用switch语句更简单,等会会有一个例子来进行对比)。
Switch语句是分分支语句,它会根据一个整数或字符表达式的值来决定进入哪条分支。基本语法:
switch(control_expression)
{
case value1:
statement1;
break;
case value2:
statement2;
break;
…………
case valueN:
statemendN;
break;
[default:defaultStatement;]
}
解释:
跟在关键字switch后面,以括号括起来的部分称为控制表达式(control_expression),这个表达式必须返回某种简单类型的值(如整型、实型、字符型),执行switch语句时,先将控制表达式返回的某个值,将这个值与每个case子句中的值相比。如果匹配成功,则执行该case子句后的语句序列。
每一个case分支就是一个选择分支,case分支可以有任意个。跟在关键字case后面的是一个常量值,如value1,每个case分支中的值必须是不同的。
Default分支是任选的(可以有default语句,也可以没有)。当表达式的值与任一case分支中的值都不匹配时,程序执行default后面的语句。如果表达式的值与任一case子句中的值都不匹配且没有default子句,则程序不作任何操作,而是直接跳出switch语句。
注意:break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。因为case分支只是起到一个标号的作用,用来查找匹配的入口并从此处开始执行,对后面的case分支不再进行询问是否匹配,而是直接执行其后的语句序列,因此该在每个case分支后,要用break来终止后面的case分支语句的执行。在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break。
因为每一个case分支后面,都有一个冒号,所以case分支中包括多个执行语句时,可以不用大括号{}括起。
编程示例:
int code = 2;
switch(code)
{
case 1:
System.out.println(“code is 1.”);
Break;
case 2:
System.out.println(“code is2.”);
Break;
case 3:
System.out.println(“code is 3.”);
Break;
}
如果用
if-else语句,会有点麻烦。如下:
int code = 2;
If(code ==1)
{
System.out.println(“code is 1.”);
}
Else if(code == 2)
{
System.out.println(“code is 2.”);
}
Else f(code == 3)
{
System.out.println(“code is 3.”);
}
这还是最简单的情况下,复杂情况下,
switch语句会比
if-else语句简洁许多。
注意:
1、在switch语句中使用break语句:如果只期望执行一条case分支,那么就要在那个case分支结束的地方加上break语句。不然当程序找到匹配的分支后,该分支后面的分支将不进行判断,而是直接执行。
2、在if-else语句中,判断连个值是否相等,使用的是Java中的等于号“==”,而不是赋值号“=”。
3、在任何两个大括号之间声明的变量只能在这个大括号内部使用。所以,若在一个分支内部声明了一个变量,那只能在这个分支内部使用。如果想在分支外部使用这个变量,那么就要在分支外部先声明好这个变量。