Java中的break与continue

在循环结构中,有时需要根据特定条件改变循环的执行流程——提前退出循环或跳过当前循环的剩余部分。Java提供的breakcontinue语句正是实现这种精细控制的工具,它们能让循环结构更加灵活和高效。

break语句:跳出循环

break语句的作用是立即终止当前所在的循环,并跳出该循环体,继续执行循环之后的代码。它通常与if条件判断配合使用,在满足特定条件时提前结束循环。

基本用法示例

public class BreakExample {
public static void main(String[] args) {
int sum = 0;
int i = 1; while (true) { // 无限循环
sum += i;
if (i == 100) {
break; // 当i等于100时跳出循环
}
i++;
} System.out.println("1到100的和为:" + sum); // 输出5050
}
}

在这个例子中,while(true)创建了一个理论上的无限循环,但通过break语句,我们在i达到100时成功终止了循环,避免了真正的无限循环。

嵌套循环中的break

在嵌套循环中,break语句只跳出它所在的那一层循环,不会影响外层循环:

public class NestedBreakExample {
public static void main(String[] args) {
// 外层循环
for (int i = 1; i <= 3; i++) {
System.out.println("外层循环 i = " + i); // 内层循环
for (int j = 1; j <= 5; j++) {
System.out.println(" 内层循环 j = " + j);
if (j == i) {
break; // 只跳出内层循环
}
} System.out.println("内层循环结束");
}
System.out.println("外层循环结束");
}
}

输出结果:

外层循环 i = 1
内层循环 j = 1
内层循环结束
外层循环 i = 2
内层循环 j = 1
内层循环 j = 2
内层循环结束
外层循环 i = 3
内层循环 j = 1
内层循环 j = 2
内层循环 j = 3
内层循环结束
外层循环结束

可以看到,break语句只终止了内层循环,外层循环仍然继续执行。

continue语句:跳过本次循环

continue语句的作用是提前结束当前次循环,直接进入下一次循环的判断条件。它不会终止整个循环,只是跳过当前循环中剩余的代码。

基本用法示例

public class ContinueExample {
public static void main(String[] args) {
int sum = 0; for (int i = 1; i <= 6; i++) {
System.out.println("开始处理 i = " + i); if (i % 2 == 0) { // 如果i是偶数
continue; // 跳过本次循环的剩余部分
} sum += i; // 只累加奇数
System.out.println("结束处理 i = " + i);
} System.out.println("1到6的奇数和为:" + sum); // 输出25
}
}

输出结果:

开始处理 i = 1
结束处理 i = 1
开始处理 i = 2
开始处理 i = 3
结束处理 i = 3
开始处理 i = 4
开始处理 i = 5
结束处理 i = 5
开始处理 i = 6
1到6的奇数和为:9

i为偶数时,continue语句跳过了后续的累加操作和"结束处理"打印,直接进入下一次循环。

嵌套循环中的continue

break类似,continue在嵌套循环中也只作用于它所在的那一层循环:

public class NestedContinueExample {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue; // 跳过内层循环的j=2的本次循环
}
System.out.println("i=" + i + ", j=" + j);
}
}
}
}

输出结果:

i=1, j=1
i=1, j=3
i=2, j=1
i=2, j=3
i=3, j=1
i=3, j=3

可以看到,continue语句只跳过了内层循环中j=2的那次循环,对其他循环没有影响。

break与continue的对比

语句 作用 适用场景
break 终止当前循环,跳出循环体 满足条件时完全结束循环
continue 跳过当前循环的剩余部分,进入下一次循环 满足条件时跳过本次循环的部分操作

关键区别示例

public class BreakVsContinue {
public static void main(String[] args) {
System.out.println("使用break:");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
System.out.println(i);
} System.out.println("\n使用continue:");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
System.out.println(i);
}
}
}

输出结果:

使用break:
1
2 使用continue:
1
2
4
5

这个对比清晰展示了两者的区别:breaki=3时完全终止了循环,而continue只是跳过了i=3的输出,循环继续执行。

场景案例

场景1:查找元素

使用break在找到目标元素后立即终止循环,提高效率:

public class FindElement {
public static void main(String[] args) {
int[] numbers = {5, 12, 8, 3, 17, 9};
int target = 8;
int index = -1; for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == target) {
index = i;
break; // 找到后立即退出循环
}
} if (index != -1) {
System.out.println("找到元素 " + target + ",索引为:" + index);
} else {
System.out.println("未找到元素 " + target);
}
}
}

场景2:过滤数据

使用continue跳过不需要处理的数据:

public class FilterData {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie", "David", "Eve"}; // 只处理长度大于3的名字
for (String name : names) {
if (name.length() <= 3) {
continue; // 跳过短名字
}
System.out.println("处理名字:" + name);
// 此处可以添加复杂的处理逻辑
}
}
}

注意事项

  1. 配合清晰的条件判断breakcontinue通常与if语句配合使用,条件判断应清晰明确,避免模糊的逻辑。

  2. 注意循环嵌套层次:在多层嵌套循环中,breakcontinue只作用于当前层,如需跳出多层循环,可使用标记(label):

// 使用标记跳出多层循环
public class LabeledBreak {
public static void main(String[] args) {
outerLoop: // 外层循环标记
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 5) {
System.out.println("跳出外层循环");
break outerLoop; // 跳出标记的外层循环
}
System.out.println("i=" + i + ", j=" + j);
}
}
}
}

总结

  • break:终止当前循环,完全跳出循环体
  • continue:跳过当前循环的剩余部分,直接进入下一次循环

Java流程控制——7.break和continue的更多相关文章

  1. Java流程控制之break、continue、goto

    break.continue break在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) co ...

  2. Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  3. python基础--程序交互、格式化输出、流程控制、break、continue

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1) 程序交互 #!/usr/bin/env python # -*- coding: ...

  4. 大一C语言学习笔记(6)---自省篇--流程控制;break,continue,return间的异同;数组应用到循环语句中需要注意的问题;++i 和 i++的异同等。

    下面是傻瓜博主"曾经"犯过的错和一些心得:        ༼ つ ◕_◕ ༽つ 1.要想流程控制学好,一定要学会化繁为简,举栗子: 三目运算符 (略?略:略)---就是一个数字嘛, ...

  5. 四、流程控制和break、continue、range函数的讲解

    目录 一.流程控制理论和必备基础知识 理论: 必备基础知识: break.continue的用法: 二.流程控制之分支结构 if if...else if...elif...else if的嵌套使用 ...

  6. 四、流程控制、break、continue、return

    一. 程序流程控制概述 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 流程控制方式采用结构化程序设计中规定的只有三种基本流程结构,即:1.顺序结构程序 ...

  7. Java流程控制06——break continue

  8. Java流程控制,for,switch,while.break,continue,return

    Java流程控制,for,switch,while.break,continue,return

  9. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  10. 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句

    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...

随机推荐

  1. Java遍历Map对象的常见方法

    在Java中遍历Map有不少的方法,我们看一下最常用的方法及其优缺点. 既然Java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  2. 【深入理解Base64编码】原理、应用与Java实战

    深入理解Base64编码:原理.应用与Java实战 目录 1-什么是base64编码 2-base64编码原理详解 3-base64的java实现 4-高级应用与技巧 5-注意事项与常见误区 6-总结 ...

  3. ElasticSearch介绍及单机版安装

    概述 ElasticSearch官网:https://www.elastic.co/cn/elasticsearch GitHub地址:https://github.com/elastic/elast ...

  4. ubuntu2004 ROS1安装

    ubuntu初始环境配置ROS1 1.换源并更新数据库 ubuntu2004换源 # 备份原来的源并且另存 sudo cp -v /etc/apt/sources.list /etc/apt/sour ...

  5. 「Log」2023.8.11 小记

    序幕 从今天开始记小记. 七点到校了,先小摆一会,然后整理博客. 听 MiTiS 的电音,开始写题. \(\color{blueviolet}{P1829\ [国家集训队]\ Crash的数字表格\ ...

  6. ZMM050N

    /********* Begin Procedure Script ************/ BEGIN var_out = with a as ( select mandt,matnr,werks ...

  7. 开源公开课丨ChunJun数据传输模块介绍

    一.直播介绍 之前的内容,我们为大家分享了ChunJun数据还原的DDL模块,以及ChunJun同步Hive事务表,本期我们为大家分享ChunJun数据传输模块介绍. 本次直播我们将从ChunJun数 ...

  8. Luogu P11157 【MX-X6-T3】さよならワンダーランド 题解

    P11157 [MX-X6-T3]さよならワンダーランド 神秘思维题. 考虑到转化式子,拆成 \(j\ge a_i\) 和 \(j\le a_{i+j}\).前一个不等式是容易满足的,我们只需要在 \ ...

  9. Codeforces Round #619 (Div. 2) ABC 题解

    A. Three Strings 题意:每次可以把c[i]拿去和a[i]或b[i]交换. 问你能否把ab变成相等. 思路:在ab不相等的时候看看c能不能与一方相等来中和.不能的话就不行. view c ...

  10. Educational Codeforces Round 74 (Rated for Div. 2) ABC 题解

    A. Prime Subtraction 题意:问你能不能找到一个质数p,使得 b = a - np, 其中a.b给出. 思路: 1.若a - b本身就是质数,那肯定可以. 2.若a - b本身是合数 ...