break和continue
break和continue用于控制循环执行流程。
break语句
break跳出循环
break立即结束整个循环。
Java
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
}
// 输出:1, 2, 3, 4
// 循环在i=5时结束
break跳出while循环
Java
int i = 1;
while (i <= 10) {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
i++;
}
// 输出:1, 2, 3, 4
break跳出do-while循环
Java
int i = 1;
do {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
i++;
} while (i <= 10);
// 输出:1, 2, 3, 4
break跳出switch
Java
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break; // 跳出switch
case 2:
System.out.println("星期二");
break;
default:
System.out.println("其他");
}
continue语句
continue跳过当前循环
continue跳过本次循环,继续下一次。
Java
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 跳过i=3,继续i=4
}
System.out.println(i);
}
// 输出:1, 2, 4, 5(跳过3)
continue在while循环
Java
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue; // 跳过i=3
}
System.out.println(i);
}
// 输出:1, 2, 4, 5
continue在do-while循环
Java
int i = 0;
do {
i++;
if (i == 3) {
continue; // 跳过i=3
}
System.out.println(i);
} while (i < 5);
// 输出:1, 2, 4, 5
break与continue对比
执行效果对比
| 特性 | break | continue |
|---|---|---|
| 作用 | 结束整个循环 | 跳过本次循环 |
| 执行后 | 循环结束 | 继续下一次 |
| 循环次数 | 可能提前结束 | 不减少次数 |
Java
// break:结束整个循环
for (int i = 1; i <= 5; i++) {
if (i == 3) break;
System.out.println(i);
}
// 输出:1, 2(循环结束)
// continue:跳过本次,继续下次
for (int i = 1; i <= 5; i++) {
if (i == 3) continue;
System.out.println(i);
}
// 输出:1, 2, 4, 5(跳过3)
break应用场景
查找元素提前退出
Java
int[] arr = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
System.out.println("找到,索引:" + i);
break; // 找到后退出
}
}
条件满足退出
Java
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
if (sum > 1000) {
System.out.println("i=" + i + "时超过1000");
break; // 满足条件退出
}
}
无限循环退出
Java
while (true) { // 无限循环
String input = getInput();
if ("exit".equals(input)) {
break; // 输入exit退出
}
process(input);
}
错误处理退出
Java
for (Item item : items) {
if (!validate(item)) {
System.out.println("验证失败");
break; // 错误退出
}
process(item);
}
continue应用场景
过滤特定元素
Java
int[] arr = {1, 2, 3, 4, 5, 6};
// 只处理偶数
for (int num : arr) {
if (num % 2 != 0) {
continue; // 跳过奇数
}
System.out.println(num); // 输出偶数:2, 4, 6
}
跳过无效数据
Java
String[] names = {"张三", null, "李四", "", "王五"};
for (String name : names) {
if (name == null || name.isEmpty()) {
continue; // 跳过空值
}
System.out.println(name);
}
// 输出:张三, 李四, 王五
跳过特定条件
Java
for (int i = 1; i <= 100; i++) {
if (i % 10 == 0) {
continue; // 跳过10的倍数
}
System.out.println(i);
}
// 输出:1-99(跳过10, 20, 30...)
异常情况跳过
Java
for (Data data : dataList) {
try {
process(data);
} catch (Exception e) {
continue; // 异常时跳过,继续下一个
}
}
嵌套循环中的break和continue
默认只影响当前循环
Java
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 只跳出内层循环
}
System.out.println(i + ", " + j);
}
}
// 输出:(1,1) (2,1) (3,1)
// 内层循环在j=2时跳出,外层继续
continue只跳过内层本次
Java
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue; // 只跳过内层j=2
}
System.out.println(i + ", " + j);
}
}
// 输出:(1,1) (1,3) (2,1) (2,3) (3,1) (3,3)
带标签的break和continue
标签语法
Java
outer: // 标签
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break outer; // 跳出外层循环
}
System.out.println(i + ", " + j);
}
}
// 输出:(1,1) (1,2) (1,3) (2,1)
// 在i=2,j=2时跳出外层循环
带标签的break跳出外层
Java
outer:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i + j == 5) {
break outer; // 跳出外层循环
}
System.out.println(i + ", " + j);
}
}
带标签的continue继续外层
Java
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue outer; // 继续外层下一次
}
System.out.println(i + ", " + j);
}
}
// 输出:(1,1) (2,1) (3,1)
// j=2时跳到外层下一次
break和continue最佳实践
选择合适的使用场景
Java
// break:需要提前结束整个循环
for (Item item : items) {
if (item == target) {
break; // 找到后结束
}
}
// continue:需要跳过特定元素
for (Item item : items) {
if (item.isInvalid()) {
continue; // 跳过无效项
}
process(item);
}
避免过度使用
Java
// 不推荐:过度使用break/continue使流程复杂
for (int i = 0; i < 10; i++) {
if (condition1) continue;
if (condition2) continue;
if (condition3) break;
// 流程复杂难理解
}
// 推荐:合并条件或使用其他方式
for (int i = 0; i < 10; i++) {
if (!condition1 && !condition2) {
process(i);
if (condition3) break;
}
}
标签命名清晰
Java
// 推荐:标签名清晰描述循环
search:
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
if (found) {
break search; // 清晰:跳出搜索循环
}
}
}
要点总结
- break结束整个循环
- continue跳过本次循环,继续下一次
- break可用于循环和switch
- continue只用于循环
- 默认只影响当前循环层
- 嵌套循环中只跳出/跳过内层
- 带标签可跳出/跳过外层循环
- 标签语法:标签名: 循环
- break 标签跳出指定循环
- continue 标签跳到指定循环下一次
- break用于查找、条件退出
- continue用于过滤、跳过特定元素
- 避免过度使用,保持流程清晰
📝 发现内容有误?点击此处直接编辑