分支结构提供了这样一种控制机制;他根据条件值的不同选择执行不同的语句序列,其他与条件值不匹配的语句序列则被跳过不执行。这对应实现生活中“如果明天是雨天,我们做XX;如果明天是晴天,我们做YY”这样的句子。
1.if…else分支结构
Java语言中,最简单的分支结构是if结构,采用格式如下:
if(条件表达式) 语句1; 后续语句序列;
说明:如果条件表达式的值为true,就执行语句1,接下来顺序执行后续语句序列;否则,不执行语句1,直接执行后续语句序列。
例如:
if(x>y) x=y;
如果x大于y,就把y的值赋给x;
当条件为ture时,切要执行的语句不只一条语句时,将这些语句用花括号{}括起来,形成一条复合语句。
例如,如果x的值大于y,将x和y的值交换,可以用以下语句实现:
if(x>y) { t=x; x=y; y=t; }
if语句的执行流程如下图所示:
注意:if语句后合法的条件值是布尔类型,if语句后的条件,不管是简单还是复杂,都应使用小括号包含起来。
思考:在已有语句“int i = 0;”的前提下,下面哪一个是正确的语句?
A. if(i!=2){}
B.if(!i){}
C.if(i){}
D.if(i=2){}
学过C++的读者看了之后会觉得前三项都是正确的。而在Java中,if后面的部分,必须是一个布尔值。因此,只有A选择是正确的if语句。
简单的if语句只能处理一部分问题,如果条件表达式的值为假也能进行相应操作,此时就要用到if…else语句
if…else语句的格式如下:
if(条件表达式) {语句序列1} else {语句序列2} 后续语句序列
2.if…else嵌套
有时候,简单的if…else分支情况还不足以用来描述现实生活中的问题。以闰年为例,闰年的年份可被4整除且不能被100整除,或能被400整除。这样的问题,就需要用if…else嵌套。语法与前面类似,指示需要注意:在嵌套使用if…else语句时,if和else一定要配对使用,else总是与他上面最近的if配对。记住,一个else语句总是和他在同一个块的最近的if语句匹配,并且该if语句没有和其他的else关联。
if(条件表达式) if(条件表达式1-1) {语句序列1-1} else {语句序列1-2} else if(条件表达式2) {语句序列2} else {语句序列3}
3.switch语句
if和if…else语句只有两个分支可供选择执行,而实际问题中却经常遇到多分支选择执行的情况,虽然可以使用嵌套的if和if…else语句来处理。但是多重嵌套的if语句会造成代码冗长而降低程序的可读性。在Java语言中,使用switch语句实现多分支条件选择。他根据一个变量或表达式来执行不同的操作语句:
switch语句的格式如下:
switch(表达式) { case value1: 语句序列1; break; case value2: 语句序列2 break; default: 语句序列3 }
使用switch语句需要注意以下几点:
(1)表达式的值只能是int、byte、short或char类型中的一种。
(2)case子句中的值value必须是上述4种类型的常量,而且所有case子句中的值应该不相同。
(3)break语句用来执行完一个case分支后,使程序跳出switch结构。因为case子句只起到一个标号作用,用来查找匹配的程序入口并从此处开始执行。如果没有break语句,当程序执行完匹配的case语句序列后,还会继续执行后面的case语句中的语句序列。
(4)在一些特殊的情况下,多个相邻的case分支执行一组相同的操作。为了简化程序的编写,想那个的程序段只需出现一次,即出现在最后一个case分支中。为了保证这组case分支都能执行正确的操作,只在这组case分支的最后一个case分支后加break语句。
public static void main(String[] args) { char ch; ch = 'a'; switch(ch) { case 'a': case 'b': case 'c': System.out.println(ch); break; } }
输出:
a