goto在Java中的用法

news2025/5/11 13:09:27

说明:goto 在一些编程语言(如C语言)中,是用来表示跳转的,即代码执行到此处跳转到对应位置继续执行。

举例

举个例子,如下,是一个双层嵌套循环。现在我需要代码在内层循环符合某条件时跳出双层循环,即跳出整个双层循环。

    public static void main(String[] args) {
        int[][] array = new int[10][10];
        // 放入一个特殊值,作key
        array[7][7] = 1000;

        // 依序赋值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] == 0) {
                    array[i][j] = i * array.length + j + 1;
                }
            }
        }

        // 寻找特殊值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] == 1000) {
                    System.out.println("got it!");
                    break;
                }
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }

执行,可以看到,break 只能跳出内循环,外循环没有跳过。但按照代码描述,找出特殊值后,代码没有继续执行下去的必要。

在这里插入图片描述

解决

上面这种场景博主在项目中遇到过,可以有两种解决思路。第一种就是引入变量,设置一个开关,内循环符合条件后,修改开关,外循环判断,如下:

    public static void main(String[] args) {
        int[][] array = new int[10][10];
        // 放入一个特殊值,作key
        array[7][7] = 1000;

        // 依序赋值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] == 0) {
                    array[i][j] = i * array.length + j + 1;
                }
            }
        }

        // 定义一个开关
        boolean flag = true;
        // 寻找特殊值
        for (int i = 0; i < array.length; i++) {
            if (flag) {
                for (int j = 0; j < array[i].length; j++) {
                    if (array[i][j] == 1000) {
                        System.out.println("got it!");
                        // 符合条件,设置开关
                        flag = false;
                        break;
                    }
                    System.out.print(array[i][j] + " ");
                }
            }
            System.out.println();
        }
    }

执行如下,能达到目的

在这里插入图片描述

第二种方式,就是使用类似 goto 的方式,可定义代码 break 跳出到某处,如下:

    public static void main(String[] args) {
        int[][] array = new int[10][10];
        // 放入一个特殊值,作key
        array[7][7] = 1000;

        // 依序赋值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] == 0) {
                    array[i][j] = i * array.length + j + 1;
                }
            }
        }

        // 寻找特殊值
        // 打一个标签
        out:
        for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array[i].length; j++) {
                    if (array[i][j] == 1000) {
                        System.out.println("got it!");
                        // 跳出到out标签
                        break out;
                    }
                    System.out.print(array[i][j] + " ");
                }
            System.out.println();
        }
    }

效果一样,但显然上面这种更优雅(zhuang b)一点

在这里插入图片描述

另外

在Java语言中,禁止C语言那种随意跳转代码执行的语法规则,但仍保留了 goto 关键字(没有特殊用法),同时支持上面这种可跳出多层循环(不仅双层循环)的语法。如果你的代码中有上述跳出多层嵌套循环的逻辑,这不失为一种选择。

个人认为Java把 goto 砍掉是对的,随意跳转代码执行提高了程序员阅读代码的难度,因为它破坏了代码 从上到下,顺序执行 的逻辑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3+Vite+TypeScript+Element Plus开发-03.主页设计与router配置

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 文章目录 目录 系列文档目录 文章目录 前言 一、主页设计 二、配置代替别名 三、配置router 四、运行效果 五、参考文献 前言 本文将重点介绍如何使用…

无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?

近三年&#xff0c;全球超过58%的网站采用无限滚动设计&#xff08;数据来源&#xff1a;PageTraffic 2023&#xff09; 谷歌官方数据显示&#xff0c;动态加载内容的索引失败率高达73%&#xff08;Google Webmaster Report 2022&#xff09;&#xff0c;而采用纯无限滚动的页…

Git相关笔记1 - 本地文件上传远程仓库

Git相关笔记 目录 Git相关笔记Git上传相关文件第一步创建一个仓库&#xff1a;第二步本地创建空文件夹&#xff1a;第三步开始在gitbush上传文件&#xff1a;解决外网网络连接的问题&#xff1a;中文文件的编码问题&#xff1a;参考资料 Git上传相关文件 第一步创建一个仓库&a…

如何计算财富自由所需要的价格?

写在前面&#xff1a;​【财富自由计算器】已上线&#xff0c;快算算财富自由要多少​ 多少钱&#xff0c;才能实现你的财富梦想&#xff1f; 需要多少&#xff0c;才能实现财务安全、财务独立&#xff0c;甚至财务自由&#xff1f; 看到结尾&#xff0c;你会很清楚地看到&…

thinkphp每条一级栏目中可自定义添加多条二级栏目,每条二级栏目包含多个字段信息

小程序客户端需要展示团购详情这种结构的内容,后台会新增多条套餐,每条套餐可以新增多条菜品信息,每条菜品信息包含菜品名称,价格,份数等字段信息,类似于购物网的商品多规格属性,数据表中以json类型存储,手写了一个后台添加和编辑的demo 添加页面 编辑页面(json数据…

深入解析ARM与RISC-V架构的Bring-up核心流程

深入解析ARM与RISC-V架构的Bring-up核心流程 作者&#xff1a;嵌入式架构探索者 | 2023年10月 引言 在嵌入式开发中&#xff0c;处理器的Bring-up&#xff08;启动初始化&#xff09;是系统运行的第一道门槛。ARM和RISC-V作为两大主流架构&#xff0c;其Bring-up流程既有共性…

Lettuce与Springboot集成使用

一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型&#xff0c;支持同步/异步/响应式编程线程安全&#xff1a;共享单连接实现多线程并发操作&#xff0c;性能衰减低原生支持Redis集群、哨兵、主从架构&#xff0c;自动重连机制保障高可用Spring…

《系统分析师-基础篇-1-6章总结》

第1章 绪论 系统分析师角色 职责&#xff1a;需求分析、系统设计、项目管理、技术协调。 能力要求&#xff1a;技术深度&#xff08;架构设计、开发方法&#xff09; 业务理解&#xff08;企业流程、行业知识&#xff09; 沟通能力。 系统开发生命周期 传统模型&#xf…

【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】

YOLO格式的电梯内电动车检测数据集&#xff0c;适用于YOLOv5-v11所有版本&#xff0c;可以用于本科毕设、发paper、做课设等等&#xff0c;有需要的在这里获取&#xff1a; 电梯内电动车检测数据集 数据集专栏地址&#xff1a;https://blog.csdn.net/qq_41304809/category_1290…

算法题(114):矩阵距离

审题&#xff1a; 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路&#xff1a; 方法一&#xff1a;多源bfs 分析曼哈顿距离&#xff1a; 求法1&#xff1a;公式法&#xff0c;带入题目公式&#xff0c;利用|x1-x2||y1-y2|求出 求法2&#xff1a;曼哈顿距离就是最短距离 本…

0102-web架构网站搭建-基础入门-网络安全

文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构&#xff1a;源码数据都在同服务器 影响&#xff1a;无&#xff0c;常规安全测试手法 2 站库分离 结构&#xff1a;源码和数据库不在同服务器 存储&#xff1a;其他服务器上数据库或者…

Linux系统编程:进程管理、内存对比与树莓派应用

一、认识进程和线程&#xff0c;在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 ​​进程​​&#xff1a;操作系统分配资源&#xff08;如内存、CPU时间片&#xff09;的基本单位。每个进程有独立的内存空间&#xff0c;进程间通信需要较复杂的机制…

ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、设置碰撞2.读入数据 总结 前言 ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞 一、问题原因 在UE5中&#xff0c;角色和敌人没有碰撞可能是由多种原因导致的&#xff0c;以下是一些可能的原因及解决方法&#xff1a…

基于Flask的MBA考生成绩查询系统设计与实现

基于Flask的MBA考生成绩查询系统设计与实现 序言 2024年吉林大学MBA在职研究生考试成绩公布后&#xff0c;考生收到的成绩单为PDF格式文档。为方便考生快速查询个人成绩及排名信息&#xff0c;笔者基于Python Flask框架开发了本查询系统。该系统支持关键词模糊查询、序号范围…

DHCP之报文格式

字段说明&#xff1a; op (op code): 表示报文的类型&#xff0c;取值为 1 或 2&#xff0c;含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充&#xff0c;表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数&#xff0c;缺省值为 3600s。 F…

React 文件上传新玩法:Aliyun OSS 加持的智能上传组件

文件上传是前端开发中的“老朋友”&#xff0c;但如何让它既简单又强大&#xff0c;还能无缝对接云端存储&#xff1f;今天&#xff0c;我要带你认识一个超酷的 React 组件 AliUploader&#xff0c;它不仅支持拖拽上传、批量编辑和文件排序&#xff0c;还直接把文件传到 Aliyun…

群体智能优化算法-变色龙优化算法(Chameleon Swarm Algorithm, CSA,含Matlab源代码)

摘要 变色龙优化算法&#xff08;Chameleon Swarm Algorithm, CSA&#xff09;是一种受变色龙行为启发的群体智能优化算法。该算法模拟了变色龙在自然界中通过变换颜色来适应环境的能力&#xff0c;以此为基础&#xff0c;设计了一个适应性强、搜索能力广泛的优化算法。CSA 通…

使用 React 和 Konva 实现一个在线画板组件

文章目录 一、前言二、Konva.js 介绍三、创建 React 画板项目3.1 安装依赖3.2 创建 CanvasBoard 组件 四、增加画布控制功能4.1 清空画布4.2 撤销 & 重做功能 五、增加颜色和画笔大小选择5.1 选择颜色5.2 选择画笔大小 六、最终效果七、总结 一、前言 在线画板是许多应用&…

NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台

一、方案背景 近年来&#xff0c;餐饮行业食品安全和卫生等问题频发&#xff0c;比如后厨卫生脏乱差等&#xff0c;持续引发关注&#xff0c;这些事情导致连锁反应&#xff0c;使其收益遭受损失。同时&#xff0c;给消费者造成了心理和生理上的伤害。 加强餐饮行业的监管成为…

Cribl 导入文件来检查pipeline 的设定规则(eval 等)

Cribl 导入文件来检查pipeline 的设定规则(eval 等) 从这个页面先下载,或者copy 内容来创建pipeline: Reducing Windows XML Events | Cribl Docs