【问题标题】:What is "search: { ... }" / "break search" syntax officially called in Java?什么是 Java 中正式调用的“search: { ... }”/“break search”语法?
【发布时间】:2020-02-26 00:23:02
【问题描述】:

这段代码来自leetcode 681的解决方案:

class Solution {
    public String nextClosestTime(String time) {
        int cur = 60 * Integer.parseInt(time.substring(0, 2));
        cur += Integer.parseInt(time.substring(3));
        Set<Integer> allowed = new HashSet();
        for (char c: time.toCharArray()) if (c != ':') {
            allowed.add(c - '0');
        }

        while (true) {
            cur = (cur + 1) % (24 * 60);
            int[] digits = new int[]{cur / 60 / 10, cur / 60 % 10, cur % 60 / 10, cur % 60 % 10};
            search : {
                for (int d: digits) if (!allowed.contains(d)) break search;
                return String.format("%02d:%02d", cur / 60, cur % 60);
            }
        }
    }
}

通常我会使用 Python 来做 leetcode,但最近我想练习 Java。我注意到这部分:

            search : {
                for (int d: digits) if (!allowed.contains(d)) break search;
                return String.format("%02d:%02d", cur / 60, cur % 60);
            }

我以前从未见过这样的用途。我可以理解它在做什么:感觉就像它自定义了一个“搜索”块并且可以从中中断。我只想知道Java中这种用法的正式名称是什么。谢谢!

【问题讨论】:

  • 带标签的中断语句。
  • 它看起来像一个可以用作“goto”的“标签”
  • 一个labeled branching statement(或循环)。
  • 这能回答你的问题吗? How to use labels in java code?
  • 始终尽量让您的 Stack Overflow 问题的标题具有足够的描述性,以便有人可以知道您的问题是关于什么的,而无需点击阅读正文。因此,将“this”替换为您要询问的“this”的描述的编辑。

标签: java


【解决方案1】:

这个结构在 Java 中称为 'Labeled break'

更多信息可以在

找到

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

【讨论】:

  • 没有标记中断。一个块是,中断有一个标签。 (虽然我接受你的链接错误地说它是。)
【解决方案2】:

你有一个labeled statement,其中声明是block,也是break statement with label。您没有标记为 break 的声明 - 这是合法的,但很奇怪。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多