流程控制
流程控制是编程语言中用于控制程序执行顺序的机制。Java 提供了多种流程控制语句,包括条件语句和循环语句。
条件语句
条件语句根据条件的真假来决定执行哪段代码。
if-else 语句
基本 if 语句
java
if (条件表达式) {
// 条件为真时执行的代码块
}if-else 语句
java
if (条件表达式) {
// 条件为真时执行的代码块
} else {
// 条件为假时执行的代码块
}嵌套 if-else 语句
java
if (条件表达式1) {
// 条件1为真时执行的代码块
} else if (条件表达式2) {
// 条件1为假但条件2为真时执行的代码块
} else {
// 所有条件都为假时执行的代码块
}示例
java
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}switch 语句
switch 语句用于多分支选择,根据表达式的值选择执行对应的 case 分支。
基本语法
java
switch (表达式) {
case 值1:
// 表达式等于值1时执行的代码
break;
case 值2:
// 表达式等于值2时执行的代码
break;
// 更多 case 分支...
default:
// 表达式不匹配任何 case 时执行的代码
}注意事项
- 表达式可以是 byte、short、int、char、枚举类型或 String 类型(Java 7 及以上)
- case 标签必须是常量表达式
- 如果没有 break 语句,程序会继续执行下一个 case 的代码(穿透现象)
- default 分支是可选的,当没有匹配的 case 时执行
示例
java
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
case 'F':
System.out.println("不及格");
break;
default:
System.out.println("成绩无效");
}Java 14 增强的 switch 表达式(预览功能)
java
String day = "MONDAY";
String result = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "工作日";
case "SATURDAY", "SUNDAY" -> "周末";
default -> "无效的星期";
};
System.out.println(result); // 输出: 工作日循环语句
循环语句用于重复执行一段代码,直到满足特定条件。
for 循环
基本 for 循环
java
for (初始化; 循环条件; 迭代) {
// 循环体,重复执行的代码
}- 初始化:在循环开始前执行一次,通常用于声明和初始化循环变量
- 循环条件:每次循环开始前检查,为 true 时执行循环体,为 false 时结束循环
- 迭代:每次循环体执行完后执行,通常用于更新循环变量
示例
java
// 输出 1 到 10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 计算 1 到 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1 到 100 的和为: " + sum);增强 for 循环(for-each)
用于遍历数组或集合中的元素。
java
for (元素类型 变量名 : 数组或集合) {
// 循环体,变量名表示当前元素
}示例
java
// 遍历数组
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
// 遍历字符串
String message = "Hello";
for (char c : message.toCharArray()) {
System.out.println(c);
}while 循环
while 循环在循环条件为 true 时重复执行循环体。
基本语法
java
while (循环条件) {
// 循环体
// 注意:需要有使循环条件变为 false 的语句,否则会导致死循环
}示例
java
// 输出 1 到 10
int i = 1;
while (i <= 10) {
System.out.println(i);
i++; // 递增循环变量,避免死循环
}
// 计算 1 到 100 的乘积
long product = 1;
i = 1;
while (i <= 100) {
product *= i;
i++;
}
System.out.println("1 到 100 的乘积为: " + product);do-while 循环
do-while 循环至少执行一次循环体,然后在循环条件为 true 时继续执行。
基本语法
java
do {
// 循环体
} while (循环条件);示例
java
// 输出 1 到 10
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
// 读取用户输入,直到输入有效的数字
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.print("请输入一个正整数: ");
number = scanner.nextInt();
} while (number <= 0);
System.out.println("你输入的数字是: " + number);
scanner.close();跳转语句
跳转语句用于改变程序的执行流程。
break 语句
break 语句用于:
- 终止 switch 语句中的 case
- 退出当前循环
示例
java
// 在循环中使用 break
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break; // 当 i 等于 6 时,跳出循环
}
System.out.println(i);
}
// 输出:1 2 3 4 5
// 在嵌套循环中使用 break(只跳出内层循环)
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break;
}
System.out.println("i=" + i + ", j=" + j);
}
}continue 语句
continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。
示例
java
// 输出 1 到 10 之间的奇数
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
System.out.println(i);
}
// 输出:1 3 5 7 9
// 在 while 循环中使用 continue
int i = 0;
while (i < 10) {
i++;
if (i % 3 == 0) {
continue;
}
System.out.println(i);
}return 语句
return 语句用于:
- 结束当前方法的执行
- 返回方法的结果(如果方法有返回值)
示例
java
// 返回方法结果
public int add(int a, int b) {
return a + b;
}
// 提前结束方法
public void checkNumber(int number) {
if (number < 0) {
System.out.println("负数");
return; // 提前结束方法
}
System.out.println("非负数: " + number);
}流程控制语句的嵌套
流程控制语句可以相互嵌套,形成复杂的控制结构。
嵌套循环
一个循环可以包含另一个循环。
示例
java
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
// 查找二维数组中的最大值
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int max = matrix[0][0];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
}
}
}
System.out.println("最大值: " + max);条件语句嵌套
if 语句可以嵌套在另一个 if 语句中。
示例
java
// 根据分数和出勤率判断是否通过课程
int score = 75;
double attendance = 0.85;
if (attendance >= 0.75) {
if (score >= 60) {
System.out.println("通过课程");
} else {
System.out.println("成绩不达标,未通过");
}
} else {
System.out.println("出勤率不足,未通过");
}常见错误与注意事项
死循环:循环条件永远为 true,导致循环无法结束
- 解决方法:确保循环条件最终会变为 false
循环变量未更新:在循环体中忘记更新循环变量
- 例如:
while (i < 10) { System.out.println(i); }// 缺少 i++
- 例如:
switch 语句缺少 break:导致 case 穿透
- 解决方法:在每个 case 结束时添加 break 语句
作用域问题:在循环外部访问循环内部声明的变量
- 解决方法:在需要的作用域内声明变量
浮点数比较:使用 == 比较浮点数可能导致不准确的结果
- 解决方法:使用差值小于某个很小的值(如 1e-6)来判断相等
小结
- 条件语句:if-else 和 switch 用于根据条件选择执行路径
- 循环语句:for、while 和 do-while 用于重复执行代码块
- 跳转语句:break、continue 和 return 用于改变程序执行流程
- 嵌套结构:流程控制语句可以相互嵌套,形成复杂的控制逻辑
- 注意事项:避免死循环、确保循环变量正确更新、正确使用 break 语句等
通过掌握这些流程控制语句,你可以编写出具有复杂逻辑的 Java 程序,实现各种功能需求。