Java语言的程序控制结构 (2.5)
在Java语言中,程序的流程控制对于代码执行的逻辑有着至关重要的作用。通过条件控制和循环控制,程序可以做出决策、重复执行任务,并在合适的时间退出。本章将详细介绍这些结构,并通过代码示例和表格来总结和梳理知识点。
条件控制结构 (2.5.1)
if语句 (2.5.1.1)
-
基本结构 (2.5.1.1.1)
- 一个单独的if语句用来执行基于布尔条件的代码。如果条件为真(true),则执行大括号中的代码块,否则跳过这段代码。
- 示例:
if (temperature > 30) {
System.out.println("It's a hot day.");
}
在这里,如果temperature
(温度)变量大于30,则输出一条消息表明今天天气热。
条件 | 执行 |
---|---|
temperature > 30 | 输出"It's a hot day." |
-
if-else结构 (2.5.1.1.2)
- 一个if-else结构提供了两条执行路径:一条为条件为真时的路径,另一条为条件为假时的路径。
- 示例:
if (score >= 60) {
System.out.println("Passed");
} else {
System.out.println("Failed");
}
这个代码块中,score
(得分)是评估的条件。如果分数大于或等于60,输出“Passed”,否则输出“Failed”。
条件 | 结果 |
---|---|
score >= 60 | "Passed" |
否则 | "Failed" |
-
嵌套if语句 (2.5.1.1.3)
- 嵌套if语句允许在另一个if或else代码块中嵌入更多的if或else语句,这对于进行更复杂的条件逻辑判断非常有用。
- 示例:
if (user.isLoggedIn()) {
if (user.hasPermission("admin")) {
System.out.println("Show admin panel");
} else {
System.out.println("Show regular panel");
}
}
在这个例子中,第一个if检查用户是否登录了。如果登录了,继续检查用户是否有管理员权限。如果有,则显示管理员面板,否则显示常规面板。
-
else if链 (2.5.1.1.4)
- else-if语句链允许一个接一个地根据多个条件进行检查,每个条件都会按顺序进行测试,直到找到第一个为真的条件。
- 示例:
if (grade >= 90) {
System.out.println("Grade A");
} else if (grade >= 80) {
System.out.println("Grade B");
} else if (grade >= 70) {
System.out.println("Grade C");
} else {
System.out.println("Fail");
}
在这里,grade
(成绩)变量根据数值的不同被分配到不同的等级,或者如果成绩低于70,输出“Fail”。
Grade 范围 | 输出 |
---|---|
>= 90 | "Grade A" |
>= 80 | "Grade B" |
>= 70 | "Grade C" |
< 70 | "Fail" |
switch语句 (2.5.1.2)
- switch-case结构
- 一个switch语句基于单个变量的值来选择不同的代码执行路径。相对于if-else链,switch语句在有大量明确值需要比对时更加清晰和方便。
- 示例:
switch (dayOfWeek) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
// ...更多的cases
default:
System.out.println("Unknown day");
break;
}
上述代码基于dayOfWeek
(星期几)的值输出不同的日子名称。如果dayOfWeek
不是任何特定的case中的值,将执行default块,输出“Unknown day”。
Day of Week | 输出 |
---|---|
1 | "Monday" |
2 | "Tuesday" |
... | ... |
Default | "Unknown day" |
循环控制结构 (2.5.2)
for循环 (2.5.2.1)
- for结构
- for循环是当你明确知道循环应当执行多少次时使用的。它会在一组预定义的次数内重复执行代码块。
- 示例:
for (int i = 0; i < 5; i++) {
System.out.println("This is loop iteration " + i);
}
这段代码会重复五次循环,输出从0到4的迭代数。
while循环 (2.5.2.2)
- while结构
- while循环会在给定的条件为真时重复执行代码块,循环会一直进行直到条件变为假。
- 示例:
int count = 0;
while (count < 5) {
System.out.println("Count is " + count);
count++;
}
这将打印出“Count is”后跟从0到4的数字,因为循环每次迭代末端都将count
变量增加1。
do-while循环 (2.5.2.3)
- do-while结构
- do-while循环至少会执行一次代码块,无论循环条件最初是否为真,之后如果条件为真,会继续执行。
- 示例:
int count = 0;
do {
System.out.println("Count is " + count);
count++;
} while (count < 5);
即使条件初始为假,代码块中的代码也会至少执行一次。这在一些需要至少执行一次操作的情境下非常有用。
控制转移语句 (2.5.3)
break语句 (2.5.3.1)
- break结构
- break语句会立即终止最内层的循环或switch语句,跳出并继续执行之后的代码。
- 示例:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
当循环变量i
达到5时,循环会终止,并且不会打印5或5之后的数字。
continue语句 (2.5.3.2)
- continue结构
- continue语句跳过当前循环的剩余部分,并立即开始下一次的迭代。
- 示例:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
这会打印出所有小于10的奇数,因为每当i
是偶数时循环就会跳过当前迭代。
return语句 (2.5.3.3)
- return结构
- return语句立即结束当前方法的执行,如果方法需要返回值,则return语句也会返回一个值。
- 示例:
public int square(int num) {
return num * num;
}
这里的square
方法会接收一个整数参数num
,并返回这个整数的平方。return语句后紧跟的表达式(在这个例子中是num * num
)的值将会被返回给方法的调用者。
附: 简易的学生成绩评级系统:
package demo;
import java.util.Scanner;
public class StudentGradeSystem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 通过循环结构接收用户输入直到用户选择退出
while (true) {
System.out.println("请输入学生的成绩(输入-1退出程序):");
int grade = scanner.nextInt();
// 使用 continue 控制转移语句跳过无效的输入
if (grade < -1 || grade > 100) {
System.out.println("无效的输入,请输入0-100之间的数值。");
continue;
}
// 使用 break 控制转移语句退出循环,结束程序
if (grade == -1) {
System.out.println("退出程序。");
break;
}
// 通过 if-else 控制结构决定学生成绩的评级
if (grade >= 90) {
System.out.println("Grade A");
} else if (grade >= 80) {
System.out.println("Grade B");
} else if (grade >= 70) {
System.out.println("Grade C");
} else if (grade >= 60) {
System.out.println("Grade D");
} else {
System.out.println("Fail");
}
}
// 退出while循环后关闭scanner
scanner.close();
}
}