Java 中的流程控制语句
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
程序设计中规定的三种流程结构,即:
- 顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转。
- 分支结构:根据条件,选择性地执行某段代码。有 if…else 和 switch-case 两种分支语句。
- 循环结构:根据循环条件,重复性的执行某段代码。有
for、while、do-while三种循环语句。(JDK5.0 提供了 foreach 循环,方便的遍历集合、数组元素)
1、顺序结构
顺序结构就是程序从上到下逐行地执行。表达式语句都是顺序执行的。并且上一行对某个变量的修改对下一行会产生影响。

// javac -encoding utf-8 Xxx.java
// java Xxx
public class StatementTest{
public static void main(String[] args){
int x = 1;
int y = 2;
System.out.println("x = " + x);
System.out.println("y = " + y);
//对 x、y 的值进行修改
x++;
y = 2 * x + y;
x = x * 10;
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}Java 中定义变量时采用合法的前向引用。如:
public static void main(String[] args) {
int num1 = 12;
int num2 = num1 + 2;
}错误形式:
public static void main(String[] args) {
int num2 = num1 + 2;
int num1 = 12;
}2、分支语句
1)if-else 条件判断结构
结构 1:单分支条件判断:if
- 格式:
if(条件表达式){
语句块;
}- 说明:
条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量。
- 执行流程:
首先判断条件表达式看其结果是 true 还是 false,
如果是 true 就执行语句块,
如果是 false 就不执行语句块。
结构 2:双分支条件判断:if...else
- 格式:
if(条件表达式) {
语句块 1;
} else {
语句块 2;
}- 执行流程:
首先判断条件表达式看其结果是 true 还是 false,
如果是 true 就执行语句块 1,
如果是 false 就执行语句块 2。
结构 3:多分支条件判断:if...else if...else
- 格式:
if (条件表达式 1) {
语句块 1;
} else if (条件表达式 2) {
语句块 2;
}
...
} else if (条件表达式 n) {
语句块 n;
} else {
语句块 n+1;
}说明:一旦条件表达式为 true,则进入执行相应的语句块。执行完对应的语句块之后,就跳出当前结构。
执行流程:
- 首先判断关系表达式 1 看其结果是 true 还是 false
- 如果是 true 就执行语句块 1,然后结束当前多分支
- 如果是 false 就继续判断关系表达式 2,看其结果是 true 还是 false
- 如果是 true 就执行语句块 2,然后结束当前多分支
- 如果是 false 就继续判断关系表达式,看其结果是 true 还是 false
- 如果没有任何关系表达式为 true,就执行语句块 n+1,然后结束当前多分支
案例 1:
成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。
// 成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。
// 使用 Scanner 类需要引入的包
import java.util.Scanner;
public class IfElseTest1 {
public static void main(String[] args){
// 使用 Scanner 的固定写法
Scanner scan = new Scanner(System.in);
int heartBeats;
System.out.println("成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。");
System.out.println("请输入你的心率:");
// 下面这行代码会阻塞程序运行
heartBeats = scan.nextInt();
if(heartBeats < 60 || heartBeats > 100){
System.out.println("你需要做进一步的检查");
}
System.out.println("体检结束,你的身体健康无恙!");
// 关闭 scan,防止内存泄漏,导致内存溢出
scan.close();
}
}案例 2:
定义一个整数,判定是偶数还是奇数。
// 定义一个整数,判定是偶数还是奇数。
// 使用 Scanner 类需要引入的包
import java.util.Scanner;
public class IfElseTest2 {
public static void main(String[] args){
// 使用 Scanner 的固定写法
Scanner scan = new Scanner(System.in);
int a;
System.out.println("请输入一个整数,我来判断它是偶数还是奇数!");
// 下面这行代码会阻塞程序运行
a = scan.nextInt();
if(a % 2 == 0) {
System.out.println(a + " 是偶数");
} else{
System.out.println(a + " 是奇数");
}
// 关闭 scan,防止内存泄漏,导致内存溢出
scan.close();
}
}案例 3:
岳小鹏参加 Java 考试,他和父亲岳不群达成承诺:如果成绩为 100 分时,奖励一辆跑车;成绩为 (80,99] 时,奖励一辆山地自行车;当成绩为[60,80] 时,奖励环球影城一日游;其它时,胖揍一顿。
说明:默认成绩是在 [0,100] 范围内。
// 岳小鹏参加 Java 考试
// 使用 Scanner 类需要引入的包
import java.util.Scanner;
public class IfElseTest3 {
public static void main(String[] args) {
// 使用 Scanner 的固定写法
Scanner scan = new Scanner(System.in);
int score; // 岳小鹏的期末成绩
System.out.println("请输入岳小鹏的期末成绩");
score = scan.nextInt();
if (score < 0 || score > 100) {
System.out.println("分数为 0 ~ 100,你这分数怎么得到的?");
return;
} else {
// 写法一:默认成绩范围为 [0,100]
if (score == 100){
System.out.println("奖励一辆跑车");
} else if (score > 80 && score <= 99){ // 错误的写法:} else if(80 < score <= 99) {
System.out.println("奖励一辆山地自行车");
} else if (score >= 60 && score <= 80){
System.out.println("奖励环球影城玩一日游");
} else{
System.out.println("胖揍一顿");
}
// 写法二:
// 默认成绩范围为 [0,100]
if (score == 100){
System.out.println("奖励一辆跑车");
} else if (score > 80){
System.out.println("奖励一辆山地自行车");
} else if (score >= 60){
System.out.println("奖励环球影城玩一日游");
} else {
System.out.println("胖揍一顿");
}
}
// 关闭 scan,防止内存泄漏,导致内存溢出
scan.close();
}
}2)if...else 嵌套
在 if 的语句块中,或者是在 else 语句块中,又包含了另外一个条件判断(可以是单分支、双分支、多分支),就构成了嵌套结构。
执行的特点:
(1)如果是嵌套在 if 语句块中的,只有当外部的 if 条件满足,才会去判断内部的条件。
(2)如果是嵌套在 else 语句块中的,只有当外部的 if 条件不满足,进入 else 后,才会去判断内部的条件。
案例 4:
由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
// 由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
// 使用 Scanner 类需要引入的包
import java.util.Scanner;
class IfElseTest4 {
public static void main(String[] args) {
// 使用 Scanner 的固定写法
Scanner scan = new Scanner(System.in);
//声明 num1,num2,num3 三个变量并赋值
int num1, num2, num3;
System.out.println("由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。");
System.out.println("请输入变量 num1");
num1 = scan.nextInt();
System.out.println("请输入变量 num2");
num2 = scan.nextInt();
System.out.println("请输入变量 num3");
num3 = scan.nextInt();
if(num1 >= num2){
if(num3 >= num1)
System.out.println(num2 + "-" + num1 + "-" + num3);
else if(num3 <= num2)
System.out.println(num3 + "-" + num2 + "-" + num1);
else
System.out.println(num2 + "-" + num3 + "-" + num1);
}else{ //num1 < num2
if(num3 >= num2){
System.out.println(num1 + "-" + num2 + "-" + num3);
}else if(num3 <= num1){
System.out.println(num3 + "-" + num1 + "-" + num2);
}else{
System.out.println(num1 + "-" + num3 + "-" + num2);
}
}
// 关闭 scan,防止内存泄漏,导致内存溢出
scan.close();
}
}3)其它说明
- 语句块只有一条执行语句时,一对
{}可以省略,但建议保留 - 当 if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略
4)练习
练习 1:
对下列代码,若有输出,指出输出结果。
// 对下列代码,若有输出,指出输出结果。
public class Exer1 {
public static void main(String[] args) {
int x = 4;
int y = 1;
if (x > 2) {
if (y > 2)
System.out.println(x + y);
System.out.println("atguigu");
} else
System.out.println("x is " + x);
}
}练习 2:
如果写成 if(b = false) 能编译通过吗?如果能,结果是?
// 对下列代码,若有输出,指出输出结果。
public class Exer2 {
public static void main(String[] args) {
// 如果写成 if(b = false) 能编译通过吗?如果能,结果是?
boolean b = true;
// 如果写成 if(b = false) 能编译通过吗?如果能,结果是?
if(b == false) // 建议:if(!b)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
}
}练习 3:
定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数 big,就交换。输出显示 small 和 big 变量的值。
// 定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数 big,就交换。输出显示 small 和 big 变量的值。
public class Exer3 {
public static void main(String[] args) {
int small = 10;
int big = 9;
if (small > big) {
int temp = small;
small = big;
big = temp;
}
System.out.println("small=" + small + ",big=" + big);
}
}练习 4:
小明参加期末 Java 考试,通过考试成绩,判断其 Java 等级,成绩范围为 [0,100]。
- 90-100 优秀
- 80-89 好
- 70-79 良
- 60-69 及格
- 60-以下 不及格
// 小明参加期末 Java 考试,通过考试成绩,判断其 Java 等级,成绩范围为 `[0,100]`。
import java.util.Scanner;
//写法一:
public class Exer4 {
public static void main(String[] args) {
int score = 89;
System.out.println("小明的期末 Java 成绩是:" + score);
if (score < 0 || score > 100) {
System.out.println("你的成绩是错误的");
} else if (score >= 90 && score <= 100) {
System.out.println("你的成绩属于优秀");
} else if (score >= 80 && score < 90) {
System.out.println("你的成绩属于好");
} else if (score >= 70 && score < 80) {
System.out.println("你的成绩属于良");
} else if (score >= 60 && score < 70) {
System.out.println("你的成绩属于及格");
} else {
System.out.println("你的成绩属于不及格");
}
// 写法二:
if (score < 0 || score > 100) {
System.out.println("你的成绩是错误的");
} else if (score >= 90) {
System.out.println("你的成绩属于优秀");
} else if (score >= 80) {
System.out.println("你的成绩属于好");
} else if (score >= 70) {
System.out.println("你的成绩属于良");
} else if (score >= 60) {
System.out.println("你的成绩属于及格");
} else {
System.out.println("你的成绩属于不及格");
}
}
}练习 5:
编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”。
// 编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”。
public class Exer5 {
public static void main(String[] args) {
int num1 = 12, num2 = 42;
if (num1 + num2 >= 50) {
System.out.println("hello world!");
}
}
}练习 6:
编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。否则,打印两数的乘积。
// 编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。否则,打印两数的乘积。
public class Exer6 {
public static void main(String[] args) {
double d1 = 21.2,d2 = 12.3;
if(d1 > 10.0 && d2 < 20.0){
System.out.println("两数之和为:" + (d1 + d2));
}else{
System.out.println("两数乘积为:" + (d1 * d2));
}
}
}练习 7:判断水的温度
如果大于 95℃,则打印“开水”;
如果大于 70℃ 且小于等于 95℃,则打印“热水”;
如果大于 40℃ 且小于等于 70℃,则打印“温水”;
如果小于等于 40℃,则打印“凉水”。
// 练习 7:判断水的温度
public class Exer7 {
public static void main(String[] args) {
int waterTemperature = 85;
if(waterTemperature > 95){
System.out.println("开水");
}else if(waterTemperature > 70 && waterTemperature <= 95){
System.out.println("热水");
}else if(waterTemperature > 40 && waterTemperature <= 70){
System.out.println("温水");
}else{
System.out.println("凉水");
}
}
}