此代码来自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的官方名称是什么。谢谢!
这种结构在Java中称为标记中断。
更多信息可在
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
你有一个带标签的语句,其中语句是一个块,还有一个带标签的断裂语句。你没有标记的rest
语句——这是合法的,但很奇怪。