流程控制语句
(1) 双分支选择结构:if/else语句用来判定一个条件(布尔表达式),当条件为真(true)时执行一个操作,条件为假(false)时执行另一个操作。
(2) 单分支选择结构:省略了else的if语句在条件为真时执行一个操作,条件为假时则跳过该操作。
(3) 多分支选择结构:switch语句则是根据表达式的值来决定执行许多不同操作中的某一个操作。
一、选择结构
1.if语句的基本形式
if(布尔表达式) 语句1
else 语句2
其中:
(1)布尔表达式一般为关系表达式或逻辑表达式,其值为true或false.
(2)[]所括的else子句部分是可选的,它必须和if成对出现。
(3)语句1和语句2可以是单条语句,也可以是复合语句。
(4)if语句的执行过程为:如果布尔表达式值为真,则执行语句1; 否则就执行语句2。当不出现else子句且表达值为false时,则不执行if中包含的语句。
例如:案例中如下程序段:
if(i%4==0&&i%100!=0||i%400==0) Ospa3+=2;//(多分支选择结构)
else Ospa3++;
可以改写为:
Ospa3++;//平年加1(单分支选择结构)
if(i%4==0&&i%100!=0||i%400==0) Ospa3++;//若是闰年再加一天
2、if语句的嵌套:现生活中的条件是很复杂的,在一定的条件下,又需要满足其它的条件才能确定相应的操作。为此Java提供了if语句的嵌套功能即一个if语句能够出现在另一个if语句或if-else语句里。
注意:Java编译器是将else与离它最近且未配对的if组合在一起,除非用花括号{}指定不同的匹配方式。
例如:案例中判断某一年是否为闰年的代码还可以改写成如下形式
if(YEAR%4==0)
if(YEAR%100!=0)
leap=true;
else
if(YEAR%400==0)leap=true;
下面是输入成绩给出评语的成绩,成绩由键盘输入。
import java.util.Scanner;
public class IfDemo6 {
public static void main(String[] args) {
int score = 79;//输入成绩
Scanner input = new Scanner(System.in);//构造一个对象
System.out.println("请输入成绩");
int score=input.nextInt();//输入一个数据
if (score>80){
System.out.println("优秀");
}else if(score>70){
System.out.println("良好");
}else if (score>60){
System.out.println("中等");
}else {
System.out.println("差");
}
}
}
3、多分支选择结构switch语句
其格式如下:switch(表达式)
{ case 值1:语句区块1;[ break; ]//分支1
case 值2:语句区块2;[ break; ]//分支2
……
case 值n:语句区块n;[ break; ]//分支n
[default:语句区块n+1;]}
其中:(1) 表达式的值和case子句中的常量值的类型必须一致。
(2)各case子句中的常量值不能相同。
(3)语句可以是单条语句,也可以是复合语句。
switch语句的执行过程如下:首先对switch后面圆括号内表达式的值进行算,然后从上至下找出与表达式的值相匹配的case,以此作为入口,执行switch结构中后面的各语句块,若表达式的值与任何case均不匹配,则执行default后面的语句块。如果没有default部分,将不执行switch语句中的任何语句块,而直接转到switch语句后的语句执行。
注意:case子句只起到一个标号的作用,用来查找匹配的入口,并从些开始执行其后面的语句块,对后面的case子句不再进行匹配。因此,在每个case分支后用break语句来终止后面的case分支语句的执行。有一些特殊情况,如多个不同的case值要执行一组相同的语句块,在这种情况下,可以不用break语句。Case子句和default子句的次序是任意的,且case子句的次序也不要求按常量值的顺序排列
案例中使用switch语句设置每月1日的星期和每月总天数的代码如下:
switch(j/7)
{case 0: spa1=Ospa3%7;cou1=31; //1月 spa2=(spa1+cou1)%7;cou2=leap?29:28; //2月
spa3=(spa2+cou2)%7;cou3=31; //3月
Ospa3=spa3;break;
case 1: spa1=(Ospa3+cou3)%7;cou1=30; //4月
spa2=(spa1+cou1)%7;cou2=31; //5月
spa3=(spa2+cou2)%7;cou3=30; //6月
Ospa3=spa3; break;
case 2: spa1=(Ospa3+cou3)%7;cou1=31; //7月
spa2=(spa1+cou1)%7;cou2=31; //8月
spa3=(spa2+cou2)%7;cou3=30; //9月
Ospa3=spa3; break;
case 3: spa1=(Ospa3+cou3)%7;cou1=31; //10月
spa2=(spa1+cou1)%7;cou2=30; //11月
spa3=(spa2+cou2)%7;cou3=31; //12月
break;
}//switch语句结束
二、循环结构
Java语言提供的循环语句有:
while语句、do-while语句和for语句。
1、while语句
while语句的一般形式为:
while(布尔表达式){循环体语句区块}
执行过程:首先计算表达式的值,若表达式的值为true时执行循环体内的语句块,执行完后再次计算表达式的值,重复上述过程。直到表达式的值为false时退出循环。
while语句的特点是:先计算表达式的值,然后执行语句,因此当表达式的值一开始就为false时,循环体将一次也不执行
注意:为了避免产生“死循环”,循环控制变量要动态变化或在循环体中有使循环趋向于结束的语句。
例如:案例中在屏幕上输出星期列表程序段可以采用while循环
i=1; //循环变量赋初值
while(i<=3) {System.out.print(Weeks);i++;}
//每行输出三个星期列表
2、do-while语句
do-while语句的一般形式为:
do{ 循环体语句区块
}while(布尔表达式);
执行过程:首先执行作为循环体的语句,然后再计算表达式的值,当表达式的值为true时,再执行循环体中的语句,重复上述过程,直到表达式的值为false时结束循环。
特点:先执行循环体,然后计算表达式的值,因此即使一开始条件就不成立,循环体也执行一次。
注意:结尾处while(布尔表达式)后的分号不能省略。
例如:前面案例中在屏幕上输出星期列表程序段也可以改写成如下形式
i=1; //循环变量赋初值
do
{System.out.print(Weeks);i++;
} while(i<3) ;//每行输出三个星期列表
do-while语句的一般形式为:
do{ 循环体语句区块
}while(布尔表达式);
执行过程:首先执行作为循环体的语句,然后再计算表达式的值,当表达式的值为true时,再执行循环体中的语句,重复上述过程,直到表达式的值为false时结束循环。
特点:先执行循环体,然后计算表达式的值,因此即使一开始条件就不成立,循环体也执行一次。
注意:结尾处while(布尔表达式)后的分号不能省略。
例如:前面案例中在屏幕上输出星期列表程序段也可以改写成如下形式
i=1; //循环变量赋初值
do
{System.out.print(Weeks);i++;
} while(i<3) ;//每行输出三个星期列表
3、for语句
for语句的一般形式为:
for([表达式1];[表达式2];[表达式3]) 语句
说明:表达式1通常用于变量的初始化,表达式2是一个布尔表达式,一般用来判断循环是否继续执行,表达式3通常用于更新循环控制变量的值。语句又称循环体,是for语句重复执行的部分。
执行过程:(1)求解表达式1.(2)求解表达式2,若其值为true执行语句,否则退出循环。(3)求解表达式3,转2
特点:表达式2一开始就为flase时,循环体将一次也不执行。
注意:
Ø 语句可以是简单语句也可以是复合语句。
Ø 三个表达式均可以省略,但作为分隔符的分号一定要保留。当表达式2省略时相当于无限循环,这时就要在循环体中设置相应的语句我,以结束循环。
Ø for语句中表达式1和表达式3可以是简单表达式,也可以是逗号表达式
例如:案例中输出星期列表的程序段如下:
for(i=1;i<=3;i++) System.out.print(Weeks);
4、循环嵌套
循环嵌套是指在循环体内包含循环语句的情形。Java语言提供的三种循环结构可以自身嵌套,也可以相互嵌套。循环嵌套时应该注意的是:无论哪种嵌套关系都必须保证每一个循环结构的完整性,不能出现交叉。
三跳转控制语句
• break语句 :退出循环结构
• continue语句 :退出本次循环
• return语句 :用于方法的返回
1、break语句
break语句通常有不带标号(break;)和带标号(break Lab;)两种形式.其中:break是关键字;Lab是用户定义的标号。
break语句主要用于switch结构和循环结构中,控制程序的执行流程转移。其应用主要有以下三种情况:
Ø 用在switch语句中,作用是强制退出switch结构。
Ø 用在单层循环结构中作用是强制退出循环结构。
Ø 带标号的switch语句用在多层循环结构中,用于一次性退出多重循环。前提是标号必须写在多层循环体中外层循环入口上方。
2、continue语句
continue语句只能用于循环结构中,其作用是跳出本次循环。它有下述两种形式:
continue;
continue lab;
其中:continue是关键字;lab为标号。
1.continue语句也称为循环的短路语句。在循环结构中,当程序执行到continue语句时就结束本次循环返回到循环的入口处,执行下一次循环,而使循环体内写在continue语句后的语句不执行。
3、return语句
return语句用于方法的返回上,当程序执行到return语句时,终止当前方法的执行,返回到调用这个方法的语句。return语句通常位于一个方法体的最后一行,有带参数的和不带参数的两种形式,带参数形式的return语句退出该方法时并返回一个值。