当前位置:课程学习>>第三章 运算符与流程控制>>文本学习>>知识点二
if语句是根据条件来执行相应的语句,主要格式有以下三种:
(1) if(条件表达式) { 语句序列; }
(2) if(条件表达式) { 语句序列1;}
else { 语句序列2; }
(3) if(条件表达式1){
语句序列1;
}
else if (条件表达式2){
语句序列2;
}
else if(条件表达式3) {
语句序列3;
}
……
else {
语句序列n;
}
此外if语句还可以嵌套使用,例如
if(条件表达式1){
……
if(条件表达式2){
……
}
……
}
【例3.4】if语句的用法实例:利用if语句来判断给定的年份是否为闰年(满足“能被400整除或者能被4整除但不能被100整除”的条件的年份就是闰年)
1 //IsLeapYear.java
2 public class IsLeapYear
3 {
4 public static void main(String[] args)
5 {
6 //使用if...else 语句实现
7 int year=2000;
8 if((year%4==0 && year%100!=0) || (year%400==0))
9 System.out.println(year+" is a leap year.");
10 else
11 System.out.println(year+" is not a leap year.");
12 //使用if ... else if ... else 语句实现
13 year=2007;
14 if(year%4!=0)
15 System.out.println(year+" is not a leap year.");
16 else if(year %100 !=0)
17 System.out.println(year+" is a leap year.");
18 else if(year%400!=0)
19 System.out.println(year+" is not a leap year.");
20 else
21 System.out.println(year+" is a leap year.");
22 }
23 };
序运行结果为:
2000 is a leap year.
2007 is not a leap year.
二. switch……case语句
switch……case语句是一种多分支语句,其语法结构如下([ ]表示是可选项):
switch(变量a)
{
case n1:
[语句序列1;]
[break;]
case n2:
[语句序列2;]
[break;]
……
case nn:
[语句序列n;]
[break;]
[default:]
[语句序列n+1;]
}
在switch……case语句中,变量a可以是int型,也可以是char型,而不能为其他数据类型。而case后面的n1、n2…nn必须是与int型或char型的常量,而不能是变量,此外n1、n2……nn之间不能相同。default语句是可选的。break语句是用来退出switch结构的,若无break,程序将会从满足条件的case开始依次执行后面的所有语句序列。switch语句应以{ }括起来。switch语句可以转换为相应的if语句结构,不过程序就会显得很臃肿。
【例3.5】switch……case语句的用法实例:利用switch……case语句来判断给定的成绩等级(90~100为优秀,80~89为良好,70~79为中等,60~69为及格,60分以下为不及格)。
1 //SwitchCase.java
2 public class SwitchCase
3 {
4 public static void main(String args[])
5 {
6 int mygrade=91;
7 int grade=mygrade/10;
8 switch(grade)
9 {
10 case 10:
11 case 9:
12 System.out.println("优秀!");
13 break;
14 case 8:
15 System.out.println("良好!");
16 break;
17 case 7:
18 System.out.println("中等!");
19 break;
20 case 6:
21 System.out.println("及格!");
22 break;
23 default:
24 System.out.println("不及格!");
25 }
26 }
27 }
程序运行结果为:
优秀!
提示:去掉【例3.5】中第13行、第16行、第19行、第22行的break语句,试着编译运行,比较一下修改前后的结果。把第20行的6改为8,试着编译运行看看结果。
三. while语句、do while语句
1. while语句
while语句是循环结构中的一种,其语法格式为:
初始化语句;
while(循环条件表达式)
{
语句序列;
迭代语句; //用于变更循环条件
}
当循环条件表达式为true时,就循环执行语句序列和迭代语句,具体结构图如图3.1。
图3.1 while循环结构示意图 图3.2 do……while循环结构示意图
2. do while语句
do……while语句也是循环结构中的一种语句,和while循环非常类似,格式为:
初始化语句;
do
{
语句序列;
迭代语句;
} while(条件表达式);
首先执行一遍循环体内的语句序列和迭代语句,然后判断条件表达式,若为true则继续执行循环体,否则终止循环,其结构图如图3.2所示。
相对while循环来说,do……while至少执行循环语句一次。
【例3.6】while循环和do……while循环的用法。
1 //WhileAndDoWhile.java
2 public class WhileAndDoWhile
3 {
4 public static void main(String[] args)
5 {
6 int a=1,b=1;
7 while(a<1)
8 a++;
9 do
10 {
11 b++;
12 }while(b<1);
13 System.out.println("a="+a+",b="+b);
14 }
15 }
程序的输出结果为: a=1,b=2
从上面这个例子的运行结果就可以看出do……while至少要执行一次循环体。
提示:如果把【例3.6】中第7行改为while(a<10),第13行改为while(b<10);编译运行看看程序的输出结果会是什么。
四.for语句
for语句是Java语言中提供的另一种循环语句,它的语法结构如下:
for (循环初始化语句;循环条件表达式;迭代语句){ 循环体语句序列; }
首先执行循环初始化语句,然后判断循环条件表达式,如果为true,则执行循环体,然后执行迭代语句。然后再去判断循环条件表达式,一直循环直到循环条件表达式的值为false时结束。其结构示意图如图3.3所示。
图3.3 for循环示意图
for循环中的初始化语句和循环条件表达式以及迭代语句均可以为空,但它们之间的分号不能省略。如for(;;);它等价于一个无限循环语句。
对于初始化语句和迭代语句还可以使用逗号表达式,以进行多个操作。如:
for(int i=0,int j=10;i<j;i++,j――)
【例3.7】for循环的用法,利用for循环结构输出一个九九乘法表。
1 //ForStatement.java
2 public class ForStatement
3 {
4 public static void main(String[] args)
5 {
6 for (int i=1;i<=9 ;i++ )
7 {
8 for (int j=1;j<=9;j++ )
9 {
10 System.out.print(j+"*"+i+"="+j*i+" ");
11 if (i==j)
12 {
13 System.out.print("\n");
14 j=9;
15 }
16 }
17 }
18 }
19 };
程序输出结果如图3.4所示。
图3.4 for循环打印出来的九九乘法口诀表
五. 程序运行结束语句
1. break语句
break语句可以用在switch语句、while循环、do……while循环和for循环结构中。switch语句中的break语句是用来中断下一个case的比较,转到紧跟switch语句的下一条语句继续执行。循环结构中的break语句有两种用法:
break;
单独的break语句是用来终止break语句所在的循环体,转到循环结构后的下一条语句执行,而break标签,则是终止标签所指的代码段,转到标签所指代码段后的下一条语句继续执行。
在Java中可以对一段代码命名,用{ }把这段代码括起来,形成代码段,在最前面设置一个标签来代表该代码段。格式为:
标签名:{
代码段;
}
【例3.8】break语句的用法,输出一个九九乘法表。
1 //BreakUsage.java
2 public class BreakUsage
3 {
4 public static void main(String[] args)
5 {
6 int i,j;
7 //label:
8 for (i=1;i<=9;i++)
9 {
10 System.out.print(i+": ");
11 for (j=1;j<=9;j++)
12 {
13 System.out.print(i+"*"+j+"="+i*j+" ");
14 if(i==j)
15 break;
16 //break label;
17 }
18 System.out.print("\n");
19 }
20 }
21 };
程序的运行结果如图3.5所示。
图3.5 break语句运行结果
如果把第14行和第15行加上注释,重新编译运行,则运行结果如图3.6所示。
图3.6 没有break语句时运行结果
如果把第7行中的注释//去掉,第15行的break加上注释,第16行的注释//去掉,重新编译,修改后的程序的运行结果如图3.7所示,请注意对比修改前后运行结果的不同。
图3.7 加break标签后程序的运行结果
2. continue语句
continue语句和break语句的作用非常类似,不过continue语句只能用在循环结构中,此外break语句是终止循环体而转到循环体后的下一条语句执行,而continue只是终止当前这一轮循环,转到下一轮循环继续执行循环体语句。continue语句也可以象break语句一样和标签一起使用,格式为:continue 标签;
【例3.8】break语句和continue语句的区别。
1 //BreakAndContinue.java
2 public class BreakAndContinue
3 {
4 public static void main(String[] args)
5 {
6 System.out.println("break statement start:");
7 for(int i=1;i<=9;i++)
8 {
9 if(i==5)
10 break;
11 System.out.print("i="+i+" ");
12 }
13 System.out.println("\n");
14 System.out.println("continue statement start:");
15 for(int i=1;i<=9;i++)
16 {
17 if(i==5)
18 continue;
19 System.out.print("i="+i+" ");
20 }
21 }
22 };
程序的运行结果如图3.8所示,在break语句中只能输出1,2,3,4,到5时由于break语句所以后面的循环(5,6,7,8,9轮)都被终止掉了,而在continue语句中到5时遇到continue语句时只是终止了5这一轮的循环,6,7,8,9轮循环则能继续执行。
图3.8 break语句和continue语句的对比
3. return语句
return语句一般只用在方法体中,用于退出该方法,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续执行。return语句有两种格式:
return 表达式或变量或常量; //方法需要具体的返回值
return; //方法无返回值,即用void声明的方法