Java流程控制:掌握判断与循环结构
Java作为一门强大的编程语言,提供了丰富的流程控制结构,其中判断和循环是最基础也是最重要的两类结构。本文将详细介绍Java中的这些控制结构,帮助你编写更高效、更灵活的程序。
一、判断结构
判断结构允许程序根据不同的条件执行不同的代码块,这是程序实现"智能"决策的基础。
1. if语句
if
语句是最基本的条件判断结构:
if (条件表达式) {
// 条件为true时执行的代码
}
示例:
int score = 85;
if (score >= 60) {
System.out.println("及格了!");
}
2. if-else语句
当需要处理条件不成立的情况时,使用if-else
:
if (条件表达式) {
// 条件为true时执行
} else {
// 条件为false时执行
}
示例:
int age = 17;
if (age >= 18) {
System.out.println("已成年");
} else {
System.out.println("未成年");
}
3. 多重if-else if-else结构
对于多个条件判断:
if (条件1) {
// 条件1为true时执行
} else if (条件2) {
// 条件2为true时执行
} else {
// 以上条件都不满足时执行
}
示例:
int score = 78;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
4. switch-case语句
当需要基于一个变量的多个值进行分支判断时,switch
语句更简洁:
switch (表达式) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
// 更多case...
default:
// 默认代码块
}
示例:
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
// 其他星期...
default:
System.out.println("无效的日期");
}
注意:Java 7以后,switch
支持字符串类型,Java 12引入了更简洁的switch表达式语法。
二、循环结构
循环结构允许我们重复执行一段代码,直到满足特定条件为止。
1. for循环
for
循环适用于已知循环次数的情况:
for (初始化; 条件判断; 迭代) {
// 循环体
}
示例:
for (int i = 0; i < 5; i++) {
System.out.println("这是第 " + (i+1) + " 次循环");
}
2. 增强for循环(foreach)
简化数组和集合的遍历:
for (元素类型 变量名 : 数组或集合) {
// 使用变量名
}
示例:
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
3. while循环
while
循环适用于不确定循环次数,但知道循环条件的情况:
while (条件表达式) {
// 循环体
}
示例:
int count = 0;
while (count < 5) {
System.out.println("count: " + count);
count++;
}
4. do-while循环
与while
类似,但保证循环体至少执行一次:
do {
// 循环体
} while (条件表达式);
示例:
int x = 10;
do {
System.out.println("x: " + x);
x--;
} while (x > 0);
三、循环控制语句
1. break语句
立即退出当前循环:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时退出循环
}
System.out.println(i);
}
2. continue语句
跳过当前循环的剩余部分,直接进入下一次循环:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
System.out.println(i);
}
3. 带标签的break和continue
用于多层嵌套循环中控制外层循环:
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i * j > 6) {
break outerLoop; // 直接跳出外层循环
}
System.out.println(i + " * " + j + " = " + (i*j));
}
}
四、最佳实践
- 条件表达式:尽量保持简单,复杂的条件可以考虑拆分成多个布尔变量或方法
- 循环性能:避免在循环条件中进行方法调用,如
while(list.size() > 0)
改为int size = list.size(); while(size-- > 0)
- 代码可读性:当嵌套超过3层时,考虑重构代码
- switch-case:不要忘记
break
语句,除非有意为之(case穿透) - 无限循环:使用
while(true)
比for(;;)
更直观
五、Java 12+的新特性
Java 12引入了switch表达式预览特性,在后续版本中成为正式特性:
String dayType = switch (day) {
case 1, 2, 3, 4, 5 -> "工作日";
case 6, 7 -> "周末";
default -> "无效日期";
};
这种新语法更简洁,可以直接返回值,并且避免了因忘记写break导致的case穿透问题。
结语
掌握Java的判断和循环结构是成为Java开发者的基础。这些结构看似简单,但灵活运用它们可以解决各种复杂的编程问题。建议多练习,理解每种结构的适用场景,并注意代码的可读性和效率。随着Java版本的更新,也要关注这些基础结构的新特性和改进。