Java——break、continue和return

一、break

break语句用于立即终止最内层的循环或switch语句。它是一种控制流语句,能够在满足特定条件时跳出循环或结束switch块的执行。

1、在循环中使用

1)一般的 break

break语句可以用于forwhiledo-while循环中。当在循环中遇到break语句时,循环会立即终止,程序控制流将跳转到循环之后的第一条语句。

下面给出一个例子:

生成 1-100 之间的整数,当生成出 66 这个数字时循环停止。

public class Test {
	public static void main(String[] args) {
		int num = 0;
		while(true) {
			num = (int)(Math.random() * 100) + 1;
			System.out.print(num + " ");
			if(num == 66) {
				break;
			}
		}
	}
}

运行结果:

可以发现生成了 66 后循环就停止了。

又例如,输入密码,假设密码是 123,三次机会。如果输入正确则退出循环。

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int chance = 3;
		while(chance > 0) {//三次机会
			System.out.println("请输入密码");
			String password = input.next();

			if("123".equals(password)) {//判断输入的密码是否等于123
				System.out.println("密码正确");
				break;
			}
			chance--;
		}
	}
}

运行结果:

可以看到,虽然是第二次循环,但是我们输入了正确的密码,所以通过 break 退出了循环。

这里有一个新的方法:

String类的equals方法用于比较两个字符串的内容是否相同。具体来说,equals方法比较的是字符串中的每一个字符是否相同,并且字符的顺序也必须一致。如果两个字符串相等,则返回true,否则返回false

这里的形式最好写成这样:

"123".equals(password)

假设我们有一个变量password,它可能是null。如果直接调用password.equals("123"),而password恰好是null,会导致NullPointerException

String password = null;
if (password.equals("123")) { // 这里会抛出 NullPointerException
    // do something
}

为了避免这种潜在的异常,我们可以把常量字符串放在前面,这样即使passwordnull,也不会抛出异常:

String password = null;
if ("123".equals(password)) { // 这里不会抛出 NullPointerException
    // do something
}

2)带标签的 break

Java还支持带标签的break,用于终止指定标签的外层循环。这在嵌套循环中非常有用,可直接跳出多层循环。

outerLoop:
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if (j == 3) {
            break outerLoop; // 跳出 outerLoop 标签标记的循环
        }
        System.out.println("i: " + i + ", j: " + j);
    }
}

运行结果:

可以发现,在 j == 3 时,带标签的 break 直接终止了外层循环。

对于多层的循环,例如三层循环,也可以使用标签来标记第二层循环,使用带标签的 break 来终止第二层循环。这样也就是说可以使用带标签的 break 来终止任意一层循环。

对于这种形式,在实际开发中要尽量不用,实际上在实际开发中循环就最好不要超出三层。因为要保证较好的可读性。

2、在 switch 中使用

break语句在switch语句中非常常见,用于终止特定的case块。如果没有break语句,程序会继续执行后续的case块(即使这些块的条件不满足),直到遇到break语句或switch语句结束为止。这种行为称为“贯穿”或“fall-through”。

int day = 3;
switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    default:
        System.out.println("Weekend");
        break;
}
// 输出: Wednesday

二、continue

1、一般的 continue

continue语句用于跳过当前循环迭代的剩余部分,并立即开始下一次循环迭代。它是一种控制流语句,可以用于forwhiledo-while循环中。continue语句有助于优化代码,减少嵌套层次,提高代码的可读性。

例子:

打印 1~6 和 10 ~ 20 这几个数字。

public class Test {
	public static void main(String[] args) {
		int i = 1;
		for(i = 1; i <= 20; i++) {
			if(i > 6 && i < 10) {
				continue;
			}
			System.out.print(i + " ");
		}
	}
}

运行结果:

2、带标签的 continue

Java还支持带标签的continue,用于跳过指定标签的外层循环的当前迭代,并立即开始该外层循环的下一次迭代。这在嵌套循环中非常有用,可以控制多层循环的流向。

示例:

public class Test {
	public static void main(String[] args) {
		outerLoop:
		for (int i = 1; i <= 3; i++) {
		    for (int j = 1; j <= 3; j++) {
		        if (j == 2) {
		            continue outerLoop; // 进入 outerLoop 标签标记的循环的下一次迭代
		        }
		        System.out.println("i: " + i + ", j: " + j);
		    }
		}
	}
}

运行结果:

可以发现当 j == 2 时就直接 continue 跳过标签标记的最外层循环的当前迭代开始下一次迭代了。

三、return

return语句用于从方法中返回一个值或直接终止方法的执行。它是控制方法执行流程的重要工具。以下是关于Java中return语句的详细介绍:

 return语句的作用

  • 返回值return语句可以将一个值从方法中返回给调用者。这个值的类型必须与方法声明中的返回类型一致。
  • 终止方法执行:当return语句被执行时,方法的执行立即结束,控制权返回到方法的调用者。

 return语句的形式

  • 无返回值(void方法):在void类型的方法中,return语句可以单独使用,用于提前终止方法。
  • 有返回值:在有返回类型的方法中,return语句必须返回一个与方法声明中返回类型一致的值。

如果 return 放到 main 方法中,则会终止程序。

例如:

public class Test {
	public static void main(String[] args) {
		for(int i = 0; i < 3; i++) {
			if(i == 1) {
				return;
			}
			System.out.println("i = " + i);
		}
	}
}

这里在 i == 1 时,main 方法会退出,也就是程序退出。所以运行结果为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/686670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

剪辑软件大揭秘:解锁图片叠加新技能,轻松将一张图片置于另一张图片之上,创意无限!

在数字时代的浪潮中&#xff0c;视频剪辑已经成为我们生活中不可或缺的一部分。无论是记录生活点滴&#xff0c;还是打造专业影片&#xff0c;一款功能强大的视频剪辑软件都是我们的得力助手。今天&#xff0c;就让我为大家揭秘一款神奇的剪辑软件——媒体梦工厂&#xff0c;它…

MySQL排序操作

025排序操作 select .. from .. order by 字段 asc/descselect empno, ename, sal from emp order by sal asc;asc 不写的话&#xff0c;默认升序 多个字段排序 查询员工的编号、姓名、薪资&#xff0c;按照薪资升序排列&#xff0c;如果薪资相同的&#xff0c;再按照姓名升…

5G商用五周年,我们该如何评价它?

今天&#xff0c;对中国通信行业来说&#xff0c;是一个特殊的日子。 五年前&#xff0c;也就是2019年6月6日&#xff0c;工信部正式向中国电信、中国移动、中国联通、中国广电发放了5G商用牌照&#xff0c;标志着国内5G开始正式商用。 换言之&#xff0c;今天&#xff0c;是中…

Mysql学习(四)——SQL通用语法之DQL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DQLDQL-语法基本查询条件查询聚合函数分组查询排序查询分页查询 DQL DQL数据查询语言&#xff0c;用来查询数据库中表的记录。 DQL-语法 select 字段列表 from 表…

深度强化学习+大模型综述Survey on Large Language Model-Enhanced Reinforcement Learning

论文地址&#xff1a;[2404.00282] Survey on Large Language Model-Enhanced Reinforcement Learning: Concept, Taxonomy, and Methods (arxiv.org) 摘要 对 LLM 增强 RL 中现有文献进行了全面的回顾&#xff0c;并总结了其与传统 RL 方法相比的特征&#xff0c;旨在阐明未…

【Python短期内快速掌握学习人工智能知识能力】:从零到入门的NLP学习秘籍

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

基于.NetCore和ABP.VNext的项目实战九:集成Hangfire实现定时任务处理

Hangfire 是一个开源的.NET 任务调度框架,它提供了内置集成化的控制台,允许用户直观明了地查看作业调度情况。它基于队列的任务处理机制,客户端使用 BackgroundJob 类的静态方法 Enqueue 来调用指定的方法或匿名函数,并将任务持久化到数据库。 本文将完成一个任务调度中心…

实验五、IPv4地址的子网划分,第1部分《计算机网络》

但凡你有点本事&#xff0c;也不至于一点本事都没有。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地址和网络掩码 的网络信息。本练习旨在让您掌握如何根据给定 IP 地址计算网络 IP 地址信息。 二、实验…

万里长城第一步——尚庭公寓【技术概述】

简略版&#xff1a; 项目概述主要是移动端&#xff08;房源检索&#xff1b;预约看房&#xff0c;租赁管理&#xff0c;浏览历史&#xff09;和后台管理&#xff08;管理员对房源进行操作&#xff09;&#xff1b; 项目使用前后端分离的方法&#xff0c;主要以后端为主&#xf…

企业数据挖掘建模平台极简建模流程

泰迪智能科技企业数据挖掘建模平台是企业自主研发&#xff0c;面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎&#xff0c;使用JAVA语言开发&#xff0c;采用 B/S 结构&#xff0c;用户无需下载客户端&#xff0c;可直接通过浏览器进…

CANoe-Trace窗口无法解析SOME/IP报文、Demo License激活方式改变

1、Trace窗口无法解析SOME/IP报文 在文章《如何让CANoe或Wireshark自动解析应用层协议》中,我们通过设置指定端口号为SOME/IP报文的方式,可以让CANoe中的Trace窗口对此端口号的报文当成是SOME/IP报文进行解析。 Trace窗口就可以根据传输层端口号对payload数据按照SOME/IP协议…

【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别 1、Vue2 父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中&#xff0c;可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式&#xff0c;父…

Astar路径规划算法复现-python实现

# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…

【C++】 使用CRT 库检测内存泄漏

CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug&#xff0c;存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始&#xff1f;如果从1开始不行吗&#xff1f; 二、ArrayList底层的实现原理是什么&#xff1f; ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次&#xff1f; 四、如何实现数组与List之间的转换&#xff1f; 五、ArrayList…

计算机图形学入门07:光栅化中的采样与走样

1.什么是光栅化&#xff1f; 在前面的章节里提过&#xff0c;光栅化(Rasterization)就是将物体投影在屏幕上的图形&#xff0c;依据像素打散&#xff0c;每一个像素中填充不同的颜色。 如下图中的老虎&#xff0c;可以看到屏幕上有各种多边形&#xff0c;这些多边形经过各种变换…

线性回归模型详解

一、引言 在机器学习中&#xff0c;线性回归模型是最基础也是最重要的预测模型之一&#xff0c;它是监督学习的一个简单但强大的工具&#xff0c;用于预测输出变量&#xff08;Y&#xff09;与一个或多个输入变量&#xff08;X&#xff09;之间的关系。线性回归模型以其容易理…

动态IP与静态IP的优缺点

在网络连接中&#xff0c;使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务&#xff0c;而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点&#xff1a; 更好的 DNS 支持&#xff1a;静态 IP 地址在…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果&#xff1a;后期 对参与度的影响 关键思想 局部平均干预效果&#xff1a;后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式&#xff0c;它提供了我们可以使用的其他很酷的直觉。在现代 IV 中&#xff0c;我们将工…

气膜乒乓球馆:新型体育设施的投资机遇—轻空间

乒乓球作为我国的国球&#xff0c;不仅在世界舞台上表现卓越&#xff0c;在国民的心目中也占有重要位置。随着科技的进步&#xff0c;气膜乒乓球馆作为一种新型体育设施&#xff0c;正逐渐走入大众视野&#xff0c;为乒乓球爱好者提供了一个舒适、安全、环保的运动场所。那么&a…