概述
Java中流程控制语句可以用来控制程序的执行顺序,它能将具有一定功能的逻辑模块区分开,其中包括顺序结构、分支结构和循环结构。
顺序结构
程序由上至下逐行地执行,中间没有任何判断和跳转。
// 从上到下依次执行
int num1 = 1;
// int num2 = 2 + num3; // 报错
int num3 = 3;
分支语句
if - else if - ... - else
if (true) {
// 执行语句块1
} else if (true) {
// 执行语句块2
} else if (true) {
// 执行语句块3
// ...
} else {
// 执行语句块n
}
- 条件表达式必须是布尔表达式或者布尔变量;
- 分支结构可以嵌套使用;
- else if 语句可以是多个,else只有一个,且根据情况可以省略;
练习题
小明参加《Java基础》考试,如果成绩为100分则奖励100积分,成绩在 [90 - 99] 之间则奖励50积分,在 [70 - 89] 之间奖励20积分,剩下不奖励积分。
public void scoreTest(int score) {
if (score == 100) {
System.out.println("奖励100积分~");
} else if (score >= 90 && score <= 99) {
System.out.println("奖励50积分~");
} else if (score >= 70 && score <= 89) {
System.out.println("奖励20积分~");
} else {
System.out.println("啥也没有~");
}
}
switch - case
switch (表达式) {
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量3:
语句3;
break;
。。。
default:
语句n
}
- 表达式必须是byte、short、char、int、枚举(jdk5.0)、String(jdk7.0)中的一种;
- case子句中的值必须是常量,不能是变量或是不确定的值;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break是在执行完一个case分支后使程序跳出switch块,否则会按顺序执行到末尾;
- default是可选的;
练习题
对于传入的参数进行判断,若等于hello,则打印你好,若等于world,则打印世界,否则打印你好世界。
public void helloTest(String str) {
switch (str) {
case "hello":
System.out.println("hello~");
break;
case "world":
System.out.println("world~");
break;
default:
System.out.println("hello world~");
}
}
讲解完以上两种分支结构后我们对它们进行一个总结:
对于少量能穷举出来的case,我们推荐用switch语句,效率会稍微高点。【听说GTA中就有个活生生的例子】if使用的范围更广,能用switch-case的地方都可以改为if - else,反之则不成立。
循环结构
for循环
for (int i = 0; i < 5; i++) {
System.out.println("循环体...");
}
我们来简单的分析下上面这段代码
int i = 0 是初始化部分 【1】
i < 5 是循环条件 【2】
i++ 是迭代条件 【4】
打印部分是循环体 【3】
执行过程:【1】- 【2】-【3】-【4】-【2】-【3】-【4】-【。。。】-【2】说明:
- 【2】中部分为boolean类型表达式,为false时退出循环
- 【1】可以声明多个初始化变量,但类型需一致
- 【4】可以有多个变量更新,用逗号分隔
while循环
int i = 0;
while (i < 5) {
System.out.println("循环体...");
i++;
}
while循环和for循环类似,但要特别注意的一点是注意迭代部分的i++,如果忘记声明循环将不能结束,导致死循环。
do - while循环
int n = 0;
do {
System.out.println("循环体...");
n++;
} while (n < 5);
do - while循环相较于前两种循环来说最大特点就是它至少会执行一次循环体。
三个关键字
break
用于终止某个语句块的执行【默认当前,指定语句块需配合label标签】。
continue
用于跳过当次循环体的执行,继续执行下一次。
return
终止所有循环,直接返回结果。
说明:
- break只能用于switch和循环语句中,continue只能用于循环语句中;
- break、continue之后不能有其它的语句【当前语句块中】;
- 方法返回值不为 void 则程序必须有return语句;
综合小案例
循环打印 “hello world + 当前 i 的值”,i 初始化为0,若 i == 3则跳过当次循环,当 i == 5则终止循环并打印“hello China”,方法返回值为 “你好,中国!”。
public static void main(String[] args) {
String print = print();
System.out.println(print);
}
private static String print() {
int i = 0;
while (i < 10) {
if (i == 3) {
i++;
continue;
} else if (i == 5) {
break;
}
System.out.println("hello world: " + i);
i++;
}
System.out.println("hello China");
return "你好,中国";
}
hello world: 0
hello world: 1
hello world: 2
hello world: 4
hello China
你好,中国
上述采用的是while循环实现,大家也可以试试for循环和do - while循环。
写在最后
在学习完Java程序流程控制后可以尝试去做一些小练习,例如打印九九乘法表等等。在工作中程序的流程控制必不可少,灵活使用关键字可以使我们的程序性能更加高效。