欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中带标签的break和continue

程序员文章站 2022-07-10 09:06:19
Java中带标签的break和continue1、简介2、Java中的标签3、示例参考1、简介Java中有goto关键字,但Java语言中goto是保留关键字,换句话说,我们不能使用 goto 来进行跳转到某行。实际上,结构化程序设计完全不需要 goto 语句即可完成各种流程,而 goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。类似地,Java中的const也只是一个不起作用的保留关键字(不具备C语言中定义常量的作用,Java中要想定义常量使用final关键字),...

Java中带标签的break和continue

1、简介

Java中有goto关键字,但Java语言中goto是保留关键字,换句话说,我们不能使用 goto 来进行跳转到某行。实际上,结构化程序设计完全不需要 goto 语句即可完成各种流程,而 goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。

类似地,Java中的const也只是一个不起作用的保留关键字(不具备C语言中定义常量的作用,Java中要想定义常量使用final关键字),与goto一样防止作为程序中的标识符。Java 中的标签是为循环设计的,是为了在多重循环中方便的使用 break 和 coutinue 而设计的。(这也是Java中唯一用到标签的地方!)正是由于这个原因,Java 的标签只能定义在三种循环 (for() {}, do{} while(), while() {}) 的开始位置,否则编译器会报告说找不到标签。

2、Java中的标签

虽然Java中的goto不起作用,但Java 中同样可以定义标签,当然Java中标签的设计不是为了goto,使用标识符加冒号的形式,如“mylabel:”。Java 中的标签是为循环设计的,是为了在多重循环中方便的使用 break 和 coutinue 而设计的。正是由于这个原因,Java的标签只能定义在三种循环 (for() {}, do{} while(), while() {}) 的开始位置,否则编译器会报告说找不到标签。

而后在循环中使用 break 或者 continue 语句的时候,就可以带上这个标签做为参数,指明跳出 (break) 或者继续 (continue)标签对应的哪个循环,如“break mylabel;”、“continue mylabel;”。

3、示例

 /*
 * @(#) LabelExample.java
 * @author James Fancy
 */

 /**
 * LabelExample 类将随机生成一个二维数组,
 * 数组每一行中的数据都是从小到在的顺序排列,但各行间并没有排序。
 * 同时,LabelExample 还会从生成的二维数组里随机找一个数作为要查找的数据。
 * 随后在 search 方法中使用带标签的 break 和 continue 语句来优化查找代码。
 */
 public   class  LabelExample  {

    /**
     * 主程序。
     */
    public static void main(String[] args) {
        LabelExample test = new LabelExample(3, 5);
        test.printMatrix();
        System.out.println();
        test.search();
    }

    int row; // 二维数组的行数

    int col; // 二维数组每行的数据个数

    int[][] data; // 数组数据

    int lookfor; // 要在数组中查找的数

    /**
     * 构造函数,生成一个由 row 指定行数,由 col 指定列数的数组。
     */
    public LabelExample(int row, int col) {
        this.row = row;
        this.col = col;
        createMatrix();
    }

    /**
     * 打印数组内容。
     */
    public void printMatrix() {
        System.out.println("row = " + row + ", col = " + col + ", lookfor = "
                + lookfor);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                System.out.print(" " + data[i][j]);
            }
            System.out.println();
        }
    }

    /**
     * 演示查找过程,使用带标签的 break 和 continue 语句。
     */
    public void search() {
        //loop1:
        // 若在此处定义标签,由于不是其后紧跟循环语句,所以会被勿略掉。
        // 被忽略掉的标签,如果在 break 或者 continue 语句中用到,编译时不能通过。
        // 如果没有在 break 或者 continue 中用到则编译可以成功。
        System.out.println("--- Begin Searching ---");
        loop1: for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (data[i][j] > lookfor) {
                    System.out.println("--- JUMP ---");
                    continue loop1; // 想想此处用 break,结果会有什么变化
                }
                if (data[i][j] == lookfor) {
                    System.out.println("FOUND: data[" + i + "][" + j + "] = "
                            + lookfor);
                    break loop1; // 想想此处用 return,结果会有什么变化
                }
                System.out
                        .println("data[" + i + "][" + j + "] = " + data[i][j]);
            }
            System.out.println("--- LOOP2END ---");
        }
        System.out.println("--- End Searching ---");
    }

    /**
     * 生成随机数组和随机抽取要查找的数。
     */
    private void createMatrix() {
        data = new int[row][];
        for (int i = 0; i < row; i++) {
            data[i] = new int[col];
            int t = 0;
            for (int j = 0; j < col; j++) {
                t += (int) (Math.random() * 20);
                data[i][j] = t;
            }
        }
        lookfor = data[(int) (Math.random() * row)][(int) (Math.random() * col)];
    }

}

参考

本文地址:https://blog.csdn.net/upHailin/article/details/110252614

相关标签: Core Java java