打印本文 打印本文  关闭窗口 关闭窗口  
二级JAVA第四章辅导:流程控制分支语句
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:42:31  文章录入:杜斌  责任编辑:杜斌

§4.1分支语句

分支语句提供了一种控制机制,使得程序的执行可以跳过这些语句不执行,而转去执行特定的语句。

4.1.1条件语句if-else.

if-else语句根据判定条件的真假来执行两种操作中的一种,格式为:

if(boolean-expression)
statement1;
[else
statement2;]

1.布尔表达式boolean-expression是任意一个返回布尔型数据的达式(这比C、C++的限制要严格)。

2.每个单一的语句后都必须有分号。

3.语句statement1,statement2可以为复合语句,这时要用大括号{}括起。建议对单一的语句也用大括号括起,这样程序的可读性强,而且有利于程序的扩充(可以在其中填加新的语句)。{}外面不加分号。

4.else子句是任选的。

5.若布尔表达式的值为true,则程序执行statement1,否则执行statement2。

6.if-else语句的一种特殊形式为:

if(expression1){
statement1
}else if(expression2){
statement2
}......
}else if(expressionM){
statementM
}else{
statementN
}

else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。

7.举例:

例4.1比较两个数的大小,并按从小到大的次序输出。

public class CompareTwo{
public static void main(Stringargs[]){
double d1=23.4;
double d2=35.1;
if(d2>=d1)
System.out.println(d2+">="+d1);
else
System.out.println(d1+">="+d2);
} }

运行结果为:

C:\>java CompareTwo
35.1>=23.4

例4.2判断某一年是否为闰年。

闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除;②能被4整除,又能被100整除。

public class LeapYear{
public static void main(String args[]){
int year=1989;//method1
if((year%4==0&&year%100!=0)||(year%400==0))
System.out.println(year+"isaleapyear.");
else
System.out.println(year+"isnotaleapyear.");
year=2000;//method2
boolean leap;
if(year%4!=0)
leap=false;
else if(year%100!=0)
leap=true;
else if(year%400!=0)
leap=false;
else
leap=true;
if(leap==true)
System.out.println(year+"isaleapyear.");
else
System.out.println(year+"isnotaleapyear.");
year=2050;//method3
if(year%4==0){
if(year%100==0){
if(year%400==0)
leap=true;
else
leap=false;
}else
leap=false;
}else
leap=false;
if(leap==true)
System.out.println(year+" is a leap year.");
else
System.out.println(year+" is not a leap year.");
}
}

运行结果为

C:\>java LeapYear

1989 is not a leap year.
2000 is a leap year.
2050 is not a leap year.

该例中,方法1用一个逻辑表达式包含了所有的闰年条件,方法2使用了if-else语句的特殊形式,方法3则通过使用大括号{}对if-else进行匹配来实现闰年的判断。大家可以根据程序来对比这三种方法,体会其中的联系和区别,在不同的场合选用适当的方法。

4.1.2多分支语句switch

switch语句根据表达式的值来执行多个操作中的一个,它的般格式如下:

switch (expression){
case value1:statement1;
break;
case value2:statement2;
break;
…………
case valueN:statemendN;
break;
[default:defaultStatement;]
}

1.表达式expression可以返回任一简单类型的值(如整型、实型、字符型),多分支语句把表达式返回的值与每个case子句中的值相比。如果匹配成功,则执行该case子句后的语句序列。

2.case子句中的值valueI必须是常量,而且所有case子句中的值是不同的。

3.default子句是任选的。当表达式的值与任一case子句中的?都不匹配时,程序执行default后面的语句。如果表达式的值与任一case子句中的值都不?配且没有default子句,则程序不作任何操作,而是直接跳出switch语句。

4.break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。因为case子句只是起到一个标号的作用,用来查找匹配的入口并从此处开始执行,对后面的case子句不再进行匹配,而是直接执行其后的语句序列,因此该在每个case分支后,要用break来终止后面的case分支语句的执行。在一些特殊情况下,多个不同的case值要执行一组相同的操,这时可以不用break。

5.case分支中包括多个执行语句时,可以不用大括号{}括起。

6.switch语句的功能可以用if-else来实现,但在某些情况下,使switch语句更简炼,可读性强,而且程序的执行效率提高。

7.举例:

例4.3.根据考试成绩的等级打印出百分制分数段。

public class GradeLevel{
public static void main(String args[]){
System.out.println("\n**firstsituation**");
char grade='C';//normaluse
switch(grade){
case 'A':System.out.println(grade+" is 85~100");
break; case 'B':System.out.println(grade+" is 70~84");
break; case 'C':System.out.println(grade+" is 60~69");
break; case 'D':System.out.println(grade+" is <60");


break; default:System.out.println("input error");
} System.out.println("\n**secondsituation**");
grade='A';∥creat error without break statement
switch(grade){
case 'A':System.out.println(grade+"is85~100");
case 'B':System.out.println(grade+"is70~84");
case 'C':System.out.println(grade+"is60~69");
case 'D':System.out.println(grade+"is<60");
default:System.out.println("inputerror");
} System.out.println("\n**thirdsituation**");
grade='B';∥severalcasewithsameoperation
switch(grade){
case 'A':
case 'B':
case 'C':System.out.println(grade+"is>=60");
break; case 'D':System.out.println(grade+"is<60");
break; default:System.out.println("inputerror");
}
}
}

运行结果为

C:\>java GradeLevel

****first situation****
C is 60~69
****second situation****
A is 85~100
A is 70~84
A is 60~69
A is <60
input error
****third situation****
B is >=60

从该例中我们可以看到break语句的作用。

4.1.3break语句

1.在switch语中,break语句用来终止switch语句的执行。使程序switch语句后的第一个语句开始执行。

2.在Java中,可以为每个代码块加一个括号,一个代码块通常用大括号{}括起来的一段代码。加标号的格式如下:

BlockLabel:{codeBlock}

break语句的第二种使用情况就是跳出它所指定的块,并从紧?该块的第一条语句处执行。其格式为:

break BlockLabel;

例如:

a:{......//标记代码块a
b:{......//标记代码块b
c:{......//标记代码块c
breakb;
……//willnotbeexecuted
}
……//willnotbeexecuted
}
……//willnotbeexecuted
}
……/executefromhere
}

3.与C、C++不同,Java中没有goto语句来实现任意的跳转,因为goto语句破坏程序的可读性,而且影响编译的优化。但是从上例可以看出,Java用break来实现goto语句所特有的一些优点。如果break后所指定的标号不是一个代码块的标号,而是一个语句,则这时break完全实现goto的功能。不过应该避免这种方式的使用。

4.1.4返回语句return

return语句从当前方法中退出,返回到调用该方法的语句处,继续程序的执行。(有关方法的内容,我们将在第六章详细讲)。返回语句有两种格式:

1.return expression

返回一个值给调用该方法的语句,返回值的数据类型必须与方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致。

2.return

当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。

return语句通常用在一个方法体的最后,以退出该方法并返一个值。Java中,单独的return语句用在一个方法体的中间时,会产生编译错误,因为这时有一些语句执行不到。但可以通过把return语句嵌入某些语句(如if-else)来使程序在未执行完方法中的所有语句时退出,例如:

int method (int num){
∥return num;∥will cause compile time error
if(num>0)
return num;
…… ∥may or may not be executed
∥depending on the value of num

打印本文 打印本文  关闭窗口 关闭窗口