第
3
章
程序流程控制 
计算机程序中,有些代码在满足条件时执行,有些代码需要反复执行,程序设
计语言通过程序流程控制语句完成这些任务。Java语言提供了选择结构和循环
结构实现程序流程控制。Java程序流程控制的语法结构是否与C/C++一样? 它
有哪些新特点? 编程实践中,该如何选择流程控制语句? 本章将为读者一一解答
这些问题。
本章内容
(1)if语句、switch语句和条件运算符等3种选择结构。
(2)while语句、do…while语句和for语句等3种循环结构。
(3)break语句和continue语句。
选择结构
.. 3.1 选择结构
现实生活中,常常需要根据具体情况做出不同决定。例如,交通警察查酒驾,如
果驾驶人每100mL血液中,20mg≤酒精含量<80mg的情况下驾驶机动车属于饮酒
驾车,如果酒精含量≥80mg的情况下驾驶机动车属于醉酒驾车,饮酒驾车和醉酒驾
车的处罚标准不同;教师根据课程考试分数赋成绩等级,分数≥90为优秀,80≤分数
<90为良好等。这些情况需要使用Java提供的选择结构语句完成任务。
与C/C++等语言一样,Java语言提供了if和switch两种选择结构语句,这两
种语句根据条件决定执行的代码块。
if语句
3.1.1 if语句
if语句是选择结构的基本语句,根据判断条件执行代码块,包括简单if、if… 
else和if…elseif…else等3种。
1.简单if语句
【语法格式3-1】 if语句。 
if(判断条件){ 
语句块 //语句主体
}
简单if语句的执行流程如图3-1所示,如果判断条件结果为true,执行语句

40 Java编程基础(微课版) 
块,否则不执行语句块。如果语句块仅有一条语句,可省略花括号。
图3-1 简单if语句的执行流程
程序案例3-1演示输入一个整数,判断该整数是否小于、大于或等于0。例如,输入-25, 
输出“-25小于0”;输入38,输出“38大于0”。
【程序案例3-1】 简单if语句。 
1 package chapter03; 
2 import java.util.Scanner; 
3 public class Demo0301 { 
4 public static void main(String[] args) { 
5 //声明输入流,从标准输入设备(键盘)输入数据
6 Scanner scan = new Scanner(System.in); 
7 int aInt; 
8 System.out.println("请输入一个整数:"); 
9 aInt = scan.nextInt(); //输入一个整数
10 if (aInt > 0) { //如果输入的整数大于0 
11 System.out.println(aInt + "大于0!"); 
12 } 
13 if (aInt == 0) { //如果输入的整数等于0 
14 System.out.println(aInt + "等于0!"); 
15 } 
16 if (aInt < 0) { //如果输入的整数小于0 
17 System.out.println(aInt + "小于0!"); 
18 } 
19 } 
20 } 
简单if语句执行,判断条件为true时执行if语句块,该语句只能实现一种分支。实际
问题中还存在判断条件为false的情况,这时需要使用if…else语句。
if…else语句
2.if…else语句
为了解决简单if语句不能在判断条件为false时执行语句块问题,Java提供了if…else 
语句。判断条件为true时,执行if后面的语句块;判断条件为false时,执行else后面的语
句块,执行流程如图3-2所示。
【语法格式3-2】 if…else语句。 
if(判断条件){ 
语句块1; 
}else{ 
语句块2; 
}

第3章 程序流程控制 41 
图3-2 if…else语句的执行流程
程序案例3-2演示if…else语句的使用方法。判断学生成绩是否及格,如果成绩≥60 
分,输出成绩及格的提示信息;如果成绩<60分,输出成绩不及格的提示信息。第5行满足
score>=60时执行第6行的语句,否则执行第9行的语句。
【程序案例3-2】 if…else语句。 
1 package chapter03; 
2 public class Demo0302 { 
3 public static void main(String[] args) { 
4 double score=55; 
5 if(score>=60) { //如果成绩大于或等于60 
6 System.out.println("恭喜你,你的成绩及格了"); 
7 } 
8 else { //如果成绩小于60 
9 System.out.println("很遗憾,你的成绩不及格!"); 
10 } 
11 } 
12 } 
if…else 
if…else语句
3.if…elseif…else语句
实际应用中,有些场景使用if…else语句就能解决,但在涉及多条件判断的复杂场景
时,if…else的能力有些不足。例如,水果店销售水果,春、夏、秋、冬四季销售的主要时令水
果不同。这些场景需要根据多个不同条件执行不同操作,采用if…elseif…else语句比较适
合。该语句的执行流程如图3-3所示。如果判断条件1为true,执行语句块1;否则执行判
断条件2,如果为true,执行语句块2;以此类推,否则执行判断条件n。
【语法格式3-3】 if…elseif…else语句。 
if(判断条件1){ 
语句块1; 
}else if(判断条件2){ 
语句块2; 
}else if(判断条件3){ 
语句块3; 
}
…//n 个else if 语句
else{ 
语句块n+1; 
}

42 Java编程基础(微课版) 
图3-3 if…elseif…else语句的执行流程
程序案例3-3演示了if…elseif…else多条件选择结构语句。输入季节序号,输出对应
季节出产的主要水果。第6行建立输入流,键盘作为输入设备;第8行接收从键盘输入的
int数据;第9~18行是if…elseif…else语句。
【程序案例3-3】 if…elseif…else语句。 
1 package chapter03; 
2 import java.util.Scanner; 
3 public class Demo0303 { 
4 public static void main(String[] args) { 
5 int season; //季节
6 Scanner scan = new Scanner(System.in); //键盘作为输入设备
7 System.out.println("请输入季节(1~4:春夏秋冬)"); 
8 season = scan.nextInt(); //输入季节
9 if (1 == season) //春季
10 System.out.println("春季主要水果:荔枝、枇杷、青枣等!"); 
11 else if (2 == season) //夏季
12 System.out.println("夏季主要水果:杧果、西瓜、葡萄等!"); 
13 else if (3 == season) //秋季
14 System.out.println("秋季主要水果:石榴、无花果、菠萝等!"); 
15 else if (4 == season) //冬季
16 System.out.println("冬季主要水果: 橙子、草莓、牛奶蕉等!"); 
17 else //没按要求输入
18 System.out.println("输入错误,请重新输入!"); 
19 } 
20 } 
程序运行结果如图3-4所示。
图3-4 程序案例3-3运行结果
3.1.2 switch语句
if…elseif…else语句能处理多条件分支,如果条件分支比较多,这种处理方式比较烦

第3章 程序流程控制 43 
琐。例如,根据月份输出该月的主要水果则要写11条elseif语句,这种方式使程序显得比
较复杂。Java语言提供了便捷的开关语句switch实现多分支选择,该语句使程序的多重条
件判断结构清晰,容易阅读。switch语句的执行流程如图3-5所示。如果表达式的值等于
选择值1,执行语句块1,break语句退出该switch。否则,如果表达式的值等于选择值2,执
行语句块2,break语句退出switch;如果表达式的值不等于选择值n,执行default中的语
句块。
【语法格式3-4】 switch语句。 
switch(表达式){ 
case 选择值1: 语句块1; 
break; 
case 选择值2: 语句块2; 
break; 
… 
case 选择值n: 语句块n; 
break; 
default: 语句块; 
} 
图3-5 switch语句的执行流程
使用switch语句需要注意3个问题:①switch语句的选择表达式包括byte、char、
short、int、String和枚举等类型,不能是浮点数或者long类型;②switch语句先计算表达
式,然后根据表达式的值检测是否匹配case后面的选择值,若不匹配所有case的选择值,则
执行default语句块,执行完毕后离开switch语句;③如果某个case的选择值匹配表达式
的结果,执行该case的语句块,一直遇到break语句后才退出switch语句,若case语句块中
图3-6 程序案例3-4运行结果
没有break 语句,则程序一直执行到switch 语
句尾。程
序案例3-4 演示了switch 语句的使用方
法。第9行week是byte类型,第13、17、21、25和
29行是break语句,作用是退出switch语句。程
序运行结果如图3-6所示。

44 Java编程基础(微课版) 
【程序案例3-4】 switch语句。 
1 package chapter03; 
2 import java.util.Scanner; 
3 public class Demo0304 { 
4 public static void main(String[] args) { 
5 byte week; //星期几
6 Scanner scan = new Scanner(System.in); //键盘作为输入设备
7 System.out.println("请输入数字(1~7)"); 
8 week = scan.nextByte(); //输入星期几
9 switch (week) { 
10 case 1: //星期一
11 System.out.print("星期一:"); 
12 System.out.println("华为成长史讲座!"); 
13 break; //退出switch 语句
14 case 2: //星期二
15 System.out.print("星期二:"); 
16 System.out.println("优秀传统文化讲座!"); 
17 break; //退出switch 语句
18 case 3: //星期三
19 System.out.print("星期三:"); 
20 System.out.println("软件需求工程!"); 
21 break; //退出switch 语句
22 case 4: //星期四
23 System.out.print("星期四:"); 
24 System.out.println("软件测试!"); 
25 break; //退出switch 语句
26 case 5: //星期五
27 System.out.print("星期五:"); 
28 System.out.println("劳动教育!"); 
29 break; //退出switch 语句
30 case 6: //星期六
31 case 7: //星期日
32 System.out.println("周末了,应该休息哟!"); 
33 break; //退出switch 语句
34 default: //没有按要求输入
35 System.out.println("输入错误!"); 
36 } 
37 } 
38 } 
switch语句
程序案例3-5演示了输入一个简单四则表达式(例如,a+b),输出计算结果。第13行接
图3-7 程序案例3-5运行结果
收输入的一个四则运算表达式(字符串),第15、17、
19、21 行获得运算符的位置,第26 行expression. 
charAt(operationLocation)取出运算符,第28、30行从
字符串取得两个操作数并转换为double类型,第31 
行使用switch语句匹配运算符并进行相应计算。程
序运行结果如图3-7所示。
【程序案例3-5】 switch语句的应用。 
1 package chapter03; 
2 import java.util.Scanner; 
3 public class Demo0305 {

第3章 程序流程控制 45 
4 public static void main(String args[]) { 
5 String expression; //四则运算表达式为字符串
6 double firstNum; //第一个数
7 double secondNum; //第二个数
8 char operation; //操作符
9 double result = 0.0; //运算结果
10 int operationLocation = -2; //运算符的位置
11 Scanner scan = new Scanner(System.in); //键盘作为输入设备
12 System.out.println("请输入四则运算表达式:"); 
13 expression = scan.nextLine(); //输入一个四则运算表达式
14 if (expression.indexOf("+") >= 1) //判断加号的位置
15 operationLocation = expression.indexOf("+"); 
16 else if (expression.indexOf("-") > 0) //判断减号的位置
17 operationLocation = expression.indexOf("-"); 
18 else if (expression.indexOf("*") >= 1) //判断乘号的位置
19 operationLocation = expression.indexOf("*"); 
20 else if (expression.indexOf("/") >= 1) //判断除号的位置
21 operationLocation = expression.indexOf("/"); 
22 else { //没有输入所要求的四则运算表达式
23 System.out.println("输入错误,请输入正确的四则运算表达式!"); 
24 System.exit(0); //退出系统
25 } 
26 operation = expression.charAt(operationLocation); //取出运算符
27 //取得第一个数
28 firstNum = Double.parseDouble (expression.substring(0, 
operationLocation)); 
29 //取得第二个数
30 secondNum = Double.parseDouble (expression.substring 
(operationLocation + 1)); 
31 switch (operation) { //匹配运算符
32 case '+': //运算符+ 
33 result = firstNum + secondNum; 
34 break; 
35 case '-': //运算符- 
36 result = firstNum - secondNum; 
37 break; 
38 case '*': //运算符* 39 result = firstNum * secondNum; 
40 break; 
41 case '/': //运算符/ 
42 result = firstNum / secondNum; 
43 } 
44 System.out.println(expression + "=" + result); //输出运算结果
45 } 
46 } 
3.1.3 条件运算符
使用if…else语句解决问题时,在if和else语句块只有一条语句的特殊情况下,能够使
用条件运算符代替该语句。条件运算符“?:”是三目运算符。
【语法格式3-5】 条件运算符。 
变量=布尔表达式? 表达式1 :表达式2;

46 Java编程基础(微课版) 
该语句执行过程:如果布尔表达式为true,把表达式1的运算结果赋给变量,否则把表
达式2的运算结果赋给变量。条件运算符与if…else语句的关系如图3-8所示。
图3-8 条件运算符与if…else语句的关系
下面代码段中,如果销售额大于销售目标,薪资salary=salary* (1+0.3),否则薪资
salary=salary* (1-0.3)。第5行使用条件运算符计算薪资,第8~11行使用if…else语
句计算薪资。 
1 double target=100; //销售目标
2 double yourSales=140; //销售额
3 double salary = 3000; //薪资基数
4 //条件运算符计算薪资
5 salary = yourSales > target ? salary * (1 + 0.3) : salary * (1 - 0.3); 
6 System.out.println("你的薪资:" + salary); 
7 //if…else 语句计算薪资
8 if(yourSales > target) 
9 salary=salary * (1 + 0.3) ; 
10 else 
11 salary=salary * (1 -0.3) ; 
循环结构
.. 3.2 循环结构
日起日落,秋去冬来,自然界普遍存在一些规律性现象。在现实生活中,周期性出现的
事情比比皆是,如国家每五年制定下一个五年发展规划、超市收银员扫描顾客购买的若干商
品条形码录入商品信息、高速公路电子警察对路过车辆拍照记录、统计文档中某个字符出现
的次数等。循环结构语句能有效处理重复出现的事情。Java提供了while、do…while和
for等3种循环结构语句,如果事先不知道循环次数,一般采用while语句和do…while语
句,for语句一般用于事先知道循环次数的情况。
3.2.1 while语句
如果不能确定循环体语句块的执行次数,而仅仅知道循环结束条件,while语句比较适
合这种情况。
【语法格式3-6】 while语句。 
while(布尔表达式){ 
循环体语句块
}

第3章 程序流程控制 47 
图3-9 while语句的执行流程
while语句的执行流程如图3-9所示。
while语句的执行过程:首先计算循环条件,如果为
true,执行循环体语句块(循环体语句块一般包含使循环条
件为false的语句),并继续计算循环条件;如果循环条件为
false,退出循环结构,执行该循环语句后面的其他语句。
该语句的显著特点是先判断后执行,极端情况下循环
体语句块可能没有执行机会。
while语句
程序案例3-6演示了while语句的使用方法。计算1+ 
2+…+99。第6行while语句,当a<=99为true时重复
执行第7、8行代码组成的语句块。第8行修改循环变量a 
的值,每循环一次a的值增加2,当a的值大于99时结束
while语句,执行第10行。程序运行结果如图3-10所示。
图3-10 程序案例3-6运行结果
【程序案例3-6】 while语句。 
1 package chapter03; 
2 public class Demo0306 { 
3 public static void main(String[] args) { 
4 int a = 1; //记录循环变量
5 int sum = 0; //记录累加和
6 while (a <= 99) { //满足a<= 99 时,执行语句块
7 sum = sum + a; //累加
8 a = a + 2; //修改循环变量
9 } 
10 System.out.println("1+3+5+…+99=" + sum); 
11 } 
12 } 
3.2.2 do…while语句
实际生活中,存在先完成一个任务,然后判断是否需要重复执行的情况。例如,击鼓
传花游戏,击鼓人开始击鼓时,游戏开始,道具在人群中传送,击鼓人停止击鼓时,拿道具
的人按要求表演节目。游戏时,道具在人群中重复传送(相当于重复执行一段代码),击
鼓人停止击鼓时拿道具的人表演节目(表示循环条件为false,退出循环,开始表演节目)。
成功的产品都有规律可循,它们的诞生并不源于颠覆式的发明创造,而是源于“微创
新”。这种场景使用do…while语句比较合适,该语句是while语句的改进版。do…while 
是另一种不需要知道循环次数的循环结构语句,它的特点是先判断后执行。

48 Java编程基础(微课版) 
【语法格式3-7】 do…while语句。 
do{ 
循环体语句块
}while(判断条件); 
图3-11 do…while语句
的执行流程
do…while语句的执行流程如图3-11所示。
do…while语句执行过程:进入do…while循环语句,执行循
环体语句块;如果循环条件为true,继续执行循环体语句块;如果
循环条件为false,退出循环,执行do…while之后的其他语句。
while语句与do…while语句都不需要知道循环执行次数,使
用时存在区别:①while语句先判断循环条件,然后执行循环体语
句块,存在循环体语句块没有被执行的可能性;②do…while语句
先执行循环体语句块,然后判断循环条件,至少执行一次循环体语
句块。
do…while 
语句
程序案例3-7演示了do…while语句的基本使用方法。计算
2+22+222+…+2222222。先执行第7、8行的语句块,然后判断
第9行的循环条件。程序运行结果如图3-12所示。
图3-12 程序案例3-7运行结果
【程序案例3-7】 do…while语句。 
1 package chapter03; 
2 public class Demo0307 { 
3 public static void main(String[] args) { 
4 long a = 2; //循环变量初始值2 
5 long sum = 0; //累加和初始值0 
6 do { 
7 sum = sum + a; //累加
8 a = a * 10 + 2; //修改循环变量
9 } while (a <= 2222222); //循环条件
10 System.out.println("2+22+222+…+2222222=" + sum); 
11 } 
12 } 
前面学习了选择结构语句和while、do…while等两种循环结构语句。软件开发的实际
情况往往比较复杂,需要综合运用循环语句和选择语句才能解决比较复杂的问题。
程序案例3-8综合运用do…while和if…else两种语句解决一个较复杂问题。模拟汽
车行驶情况,使用随机数模拟汽车行驶速度,在跟踪时间段内,记录超速和正常驾驶的汽车
数量。第12、22行获取系统当前时间;第23行计算程序运行时间,当运行时间小于30ms 
时继续跟踪,否则停止do…while语句;第15行产生不大于200的整数模拟汽车行驶速度;

第3章 程序流程控制 49 
第16行判断汽车速度,如果超速给出提示信息。程序运行结果如图3-13所示。
图3-13 程序案例3-8运行结果
【程序案例3-8】 选择结构语句和循环结构语句综合案例。 
1 package chapter03; 
2 import java.util.Random; 
3 public class Demo0308 { 
4 public static void main(String args[]) { 
5 int speed; //汽车行驶速度
6 double upNum = 0; //超速车辆数
7 double normalNum = 0; //正常行驶车辆数
8 double totalAuto = 0; //车辆总数
9 long startTime; //开始时间
10 long endTime; //结束时间
11 long tranceTime; //跟踪时间
12 startTime = System.currentTimeMillis(); // 获 取 开始时间
13 Random random = new Random(); //产生随机数对象
14 do { //直接进入循环体
15 speed = random.nextInt(200); //随机产生不大于200km/h 的汽车行驶速度
16 if (speed >= 120) { //如果速度超过120km/h,表示超速
17 upNum++; //超速车辆数加1 
18 System.out.println("你已超速,请遵守交通规则!"); 
19 } else { //没有超速
20 normalNum++; //正常行驶车辆数加1 
21 } 
22 endTime = System.currentTimeMillis(); //记录当前时间
23 tranceTime = endTime - startTime; / / 计算跟踪时间(程序运行时间) 
24 } while (tranceTime <= 30); //如果跟踪时间小于30ms,则继续跟踪
25 totalAuto = upNum + normalNum; //统计跟踪汽车数量
26 System.out.println("跟踪时间:" + tranceTime + " ms"); 
27 System.out.println("汽车总数:" + totalAuto); 
28 System.out.println ("超速车辆:" + upNum + ",超速比例:" + upNum / 
totalAuto); 
29 System.out.println ("正常行驶车辆:" + normalNum + ",正常行驶比例:" + 
normalNum / totalAuto); 
30 } 
31 }

50 Java编程基础(微课版) 
3.2.3 for语句
while语句和do…while语句的使用场景各有侧重,合理运用它们能解决所有需要循环
处理的问题。但是,对于已经事先知道循环次数的场景,Java提供的for语句能比较方便地
解决这类问题,for语句包含初值表达式、循环条件和循环过程表达式,使用起来比较简洁, 
深受程序员们喜爱。
【语法格式3-8】 for语句。 
for(初值表达式;循环条件;循环过程表达式){ 
循环语句块; 
} 
图3-14 for语句的执行流程
for语句的执行流程如图3-14所示。
for语句的执行流程分为3步:①第一次进入for循
环时,执行初值表达式,为循环控制变量赋初始值。②根
据循环条件决定是否执行循环体语句块,如果循环条件
为true,继续执行循环体语句块;如果循环条件为false,退
出循环,执行for后面的其他语句。③执行循环体语句块
后,执行循环过程表达式,然后再回到步骤②判断是否继
续循环。
for语句
程序案例3-9演示了for语句的使用方法。输入一个
字符串,统计字符串中的字母、数字以及其他符号的个数。
第15行的for语句逐个取得字符串中的每个字符,第16行
myString.charAt(i)取得字符串位置i的字符,第17行判
断字符类别。程序运行结果如图3-15所示。
图3-15 程序案例3-9运行结果
【程序案例3-9】 for语句。 
1 package chapter03; 
2 import java.util.Scanner; 
3 public class Demo0309 { 
4 public static void main(String[] args) { 
5 String myString = null; //字符串
6 int stringLength = 0; //字符串的长度
7 int letterNum = 0; //字母个数
8 int decimalNum = 0; //数字个数

第3章 程序流程控制 51 
9 int otherNum = 0; //其他字符个数
10 char currentChar; //当前字符
11 Scanner scan = new Scanner(System.in); //键盘作为输入设备
12 System.out.println("请输入字符串:"); 
13 myString = scan.nextLine(); //输入字符串
14 stringLength = myString.length(); / / 取得字符串长度
15 for (int i = 0; i < stringLength; i++) { // 逐个取得字符串中的每个字符
16 currentChar = myString.charAt(i); //取得字符串位置i 的字符
17 if (currentChar >= '0' && currentChar <= '9') //如果字符是数字
18 decimalNum++; // 数字个数加1 
19 //如果字符是字母
20 else if ((currentChar >= 'a' && currentChar <= 'z') || 
(currentChar >= 'A' && currentChar <= 'Z')) 
21 letterNum++; // 字 母个数加1 
22 else / /字 符不是数字也不是字母
23 otherNum++; / /其 他字符个数加1 
24 } 
25 System.out.println("输入的字符串:" + myString); 
26 System.out.println("字母个数:" + letterNum); 
27 System.out.println("数字个数:" + decimalNum); 
28 System.out.println("其他类型字符个数:" + otherNum); 
29 scan.close(); //关闭输入流
30 } 
31 } 
运用循环语句时为了防止出现死循环的情况,要合理设置循环结束条件。循环控制有
计数器控制和标记控制两种方法:计数器控制必须确保每执行一次循环,循环控制变量(计
数器)要进行增量或减量计算,程序案例3-9中,for循环语句采用计数器控制循环,每循环
一次,计数器i的值就执行一次增量计算(增加1),使计数器i的值逐步接近循环条件为假
的情况;标记控制循环需要确保标记在某种情况下能使循环条件为假,程序案例3-7中,标
记就是循环变量a,当a>2222222时循环条件为假。
如果没有正确设置循环退出条件,或者退出循环条件不可能成立,循环控制流程一直重
复执行循环体语句块,无法退出循环,即产生死循环。如下面程序出现死循环。 
1 package chapter03; 
2 public class EndlessLoop { 
3 public static void main(String[] args) { 
4 int flag=1; //循环标记
5 while(flag>0){ //循环标记大于0 执行循环,小于0 退出循环
6 System.out.println("地球呼唤绿色"); 
7 flag++; //循环标记加1,循环标记不可能小于0 
8 } 
9 } 
10 } 
第4行设置循环标记flag=1,第7行使循环标记flag加1,flag总是大于0,因此第5行
对该循环标记的判断永远为真,该程序将一直执行。
3.2.4 嵌套循环
while、do…while和for是3种各有特点的循环结构语句,可以互相替换,但使用场景

52 Java编程基础(微课版) 
的侧重点不同。作为语句,它们能出现在程序中任何可以使用语句的位置,如while循环体
内可以使用while、do…while和for3种语句。
嵌套循环指一条循环语句内包含另一条循环语句的情况,内嵌循环还可以嵌套循环语
句,称为多层循环。while、do…while和for3种循环语句能互相嵌套,也可以自己嵌套自
己。图3-16显示了嵌套循环结构,外层while语句嵌套了一条for语句。
嵌套循环
程序案例3-10演示了嵌套循环使用方法。输入一个整数,例如输入4,计算1+(1+2)+ 
(1+2+3)+(1+2+3+4),使用嵌套循环处理该问题(当然不用嵌套也能解决该问题)。第
5行i控制外层循环,第6行j控制内层循环,外层循环变量i取0~x的某个值,内层循环变
量j从1~i进行循环,如i=3时,j从1~3循环;第10行表示内层循环结束后,输出换行。
程序运行结果如图3-17所示。
图3-16 嵌套循环结构 
图3-17 程序案例3-10运行结果
【程序案例3-10】 嵌套循环。 
1 package chapter03; 
2 public class Demo0310 { 
3 public static void main(String[] args){ 
4 int x = 4,sum = 0; 
5 for(int i = 0 ; i<=x ; i++){ / /外 层循环
6 for(int j = 1 ; j<=i ; j++){ / /内 层循环,控制从1 到某个整数
7 sum = sum+j; //累加
8 System.out.print(j+" "); / /输 出 当前数
9 } 
10 System.out.println(); // 换行
11 } 
12 System.out.println("sum="+sum); 
13 } 
14 } 
选择结构语句if、if…else和switch以及循环结构语句while、do…while和for都是
Java语句,它们能在任何可以使用语句的位置出现。也就是说,循环结构语句之间可以嵌
套,选择结构语句之间也可以嵌套,并且循环结构语句与选择结构语句之间可以混合嵌套。
下面代码段中,第1行的while循环语句包含了if…else语句(第6~14行)、do…while 
语句(第15~19行)以及其他若干不同类型的语句。 
1 while(循环条件){ 
2 语句1;

第3章 程序流程控制 53 
3 语句2; 
4 ... 
5 语句n; 
6 if(循环条件){ 
7 语句1; 
8 ... 
9 语句m; 
10 }else{ 
11 语句1; 
12 ... 
13 语句k; 
14 } 
15 do{ 
16 语句1; 
17 ... 
18 语句s; 
19 }while(循环条件); 
20 } 
跳转语句
.. 3.3 跳转语句
已经证明,由顺序、选择和循环3种基本结构构成的算法能解决任何复杂问题,但在具
体程序设计实践中,为了提高代码效率,少数情况下需要使用跳转语句改变程序执行流程。
例如,在包含1万个元素的集合中查找某个特定数据,如果第1000次比较时找到该元素,不
用比较余下的元素,退出查找元素算法,这种情况需要使用跳转语句退出查找循环。
Java提供了break、continue和return3种程序流程跳转语句,它们能改变程序执行流
程,break作为单独一条语句使用,continue只能使用在循环结构中,return退出当前方法并
返回一个值。根据结构化程序设计原则,程序开发中不鼓励使用break和continue语句,因
为随意改变程序执行流程,增加了调试和阅读程序的难度。
break语句
3.3.1 break语句
break语句用于下面两种情况。
(1)switch中使用break语句。执行break语句时,程序跳出switch语句,执行switch 
后面的语句。
(2)循环结构中使用break语句。执行break语句时,中断当前循环结构,执行该循环
语句的下一条语句,如果break语句出现在嵌套循环的内层循环,break语句跳出当前层的
循环。
【语法格式3-9】 break语句。 
break; 
图3-18显示了break语句应用在循环结构中的执行流程。
程序案例3-11演示了break语句的使用方法。计算sum=1+2+3+…+x,当sum≥ 
1949时,输出x。第5行循环条件为true,循环体内需要设置退出循环体的语句,否则是死
循环;第8行满足sum >=1949时,执行第9行的break语句退出第5行的while循环语

54 Java编程基础(微课版) 
句。程序运行结果如图3-19所示。
图3-18 break语句应用在while 
循环语句情况 
图3-19 程序案例3-11运行结果
【程序案例3-11】 break语句案例。 
1 package chapter03; 
2 public class Demo0311 { 
3 public static void main(String[] args) { 
4 int x = 0, sum = 0; 
5 while (true) { //循环条件为true,循环体内使用break 退出循环
6 x += 1; 
7 sum = sum + x; 
8 if (sum >= 1949) 
9 break; //退出当前循环语句
10 } 
11 System.out.println("x=" + x + ",sum=" + sum); 
12 } 
13 } 
continue语句
3.3.2 continue语句
continue是另一条跳转语句,它只能在循环语句中使用。程序执行continue语句时,会
停止运行该语句之后的循环体内语句,回到循环开始处继续运行。
【语法格式3-10】 continue语句。 
continue; 
图3-20显示循环语句中使用continue语句的程序执行流程。
图3-20 while语句中使用continue语句的程序执行流程
程序案例3-12演示了continue语句的使用方法。输出1~100不能被3整除的整数,

第3章 程序流程控制 55 
每行输出10个。第7行判断当前整数x如果能被3整除,跳转到第6行for循环语句的开
始位置。程序运行结果如图3-21所示。
图3-21 程序案例3-12运行结果
【程序案例3-12】 continue语句案例。 
1 package chapter03; 
2 public class Demo0312 { 
3 public static void main(String[] args) { 
4 int x = 1, count = 0; 
5 System.out.println("====输出1~100 不能被3 整除的整数===== "); 
6 for (; x <= 100; x++) { 
7 if (0 == x % 3) //该数能被3 整除,跳转到循环语句开始处
8 continue; 
9 System.out.print(x + " "); 
10 count++; 
11 if (0 == count % 10) //如果输出了10 个数
12 System.out.println(); //输出换行
13 } 
14 } 
15 } 
3.3.3 return语句
与C/C++语言一样,Java提供的return语句返回一个方法的值,并把控制权交给调用
它的语句。
【语法格式3-11】 return语句。 
return [表达式]; 
表达式是可选参数,表示返回值,它的数据类型要与方法声明的返回值类型兼容或者一
致,可通过强制类型转换实现。
使用return语句要注意两点:①return能放在选择结构语句和循环结构语句的任意位
置;②如果return没有放在选择结构语句和循环结构语句中,只能放在方法最后位置,放在
其他位置将出现编译错误。
下面代码段演示了return语句的使用方法。第1行定义方法exam();第5行,return 
放置在while循环结构语句内,通过编译;第7行,return语句不在循环或者选择结构语句

56 Java编程基础(微课版) 
内,不能通过编译,因为第7行return使程序没有机会执行后面代码;第9行return放置在
if语句内,通过编译;第10行,return放置在方法最后,通过编译。 
1 public static int exam(int a, int b) { 
2 int i = 1; 
3 while (i < 10) { 
4 i++; 
5 return 1; // re tu rn 语句放在循环结构语句中
6 } 
7 return i; / /r e tu rn 不在选择结构语句和循环结构语句中,只能放在最后位置
8 if (a > b) 
9 return a - b; //return 语句放在选择结构语句中
10 return b - a; //return 语句放在方法最后位置
11 } 
.. 3.4 小 结
本章主要知识点如下。
(1)程序结构包括顺序结构、选择结构和循环结构。
(2)当根据不同条件执行不同语句时,需要采用选择结构语句,选择结构语句包括if、
if…else、if…elseif…else和switch。
(3)当反复执行程序中的某些代码块时,需要采用循环结构语句,循环结构语句包括
while、do…while和for,使用循环结构语句时要避免死循环。
(4)break语句使程序跳出switch语句和当前循环结构语句。continue语句使程序跳
转到循环结构语句的起始处。
(5)return语句返回方法的值,并把控制权交给调用它的语句。
.. 3.5 习 题
3.5.1 填空题 
1.( )语句用来强制退出循环结构语句。
2.简单if…else语句可以使用( )运算符来代替。
3.( )和( )循环结构语句一般用在事先不能确定循环次数的情况下。
4.取得字符串中某个位置的字符应该使用string类的( )方法。
5.根据提示补全程序空白处,使程序能够正确运行。 
//计算1+2!+3!+4!+5!+6! 
public class Demo11 { 
public static void main(String[] args) { 
long sum=0; 
long fac=1; //阶乘项的计算结果 
int i=1; 
while( ① ) { 
fac=( ② ); //计算阶乘 
i++;

第3章 程序流程控制 57 
sum= ( ③ ); //累加 
} 
System.out.println("sum="+sum); 
} 
} 
3.5.2 选择题
1.Java语言中,下面的( )取得系统当前时间(ms)。
A.getTime(); B.System.currentTimeMillis(); 
C.getDate(); D.time(); 
2.Java语言中,下面的( )产生一个不大于100的随机整数。
A.Randomrandom=newRandom(); 
aInt=random.nextInt(100); 
B.getInteger(100); 
C.System.getInt(100); 
D.Random.nextInt(100); 
3.Java语言中,采用( )从键盘输入一行字符串。
A.scanf(“%s”,&ch); 
B.System.out.println(); 
C.Scannerscan=newScanner(System.in); 
Stringexpression=scan.nextLine(); 
D.getString(); 
3.5.3 简答题
1.简述break语句在switch语句中的作用。
2.画出for语句的执行流程图并简要说明执行过程。
3.简述如何避免死循环。
3.5.4 程序设计题
1.分别使用3种不同的循环语句,计算1~1000能被7和11同时整除的整数之和。
2.有如下函数,编写程序,输入x,然后输出y。
y = 
5+6x x <0 
-1 x =0 
5-6x x >0 
ì
.
í
.. 
.. 
3.水仙花数是指一个三位整数的个位、十位、百位3个数的立方和等于该数本身,求出
所有水仙花数。例如,153=13+53+33,153是水仙花数。