Java — 如何找到包含小时、分钟和秒的数字时钟的所有有效组合?

Java — How to find all valid combinations for a digital clock with hours, minutes and seconds?

我需要用数字时钟的所有可能组合(但仅作为 HHMMSS 而不是 HH:MM:SS)填充 Java 中的字符串数组,如下所示:

000000 000001 010000 235903

无效的是:

240000 000160 006000

等等。

有没有比将数字从 0 到 999.999 转换为格式正确的字符串(从 000000 到 999999)并删除所有无效字符串更简单的方法?

我试图避免的这种嵌套循环解决方案:

String[] arr = new String[24 * 60 * 60];

int index = 0;

for (int hours = 0; hours < 24; hours++) {
    for (int minutes = 0; minutes < 60; minutes++) {
        for (int seconds = 0; seconds < 60; seconds++) {
            
            arr[index] = String.format("%02d%02d%02d", hours, minutes, seconds);
            index++;
        }
    }
}

嵌套循环

你知道有 twenty-four 小时,从 0 到 23。

你知道有 60 分钟的可能,从 0 到 59。

还有 60 秒,如果我们忽略 Leap Second,0 到 59。

你可以设置嵌套的 for 循环吗?通常,我们经常在每个循环中使用这些单个字符作为计数器的名称:ijk。但在你的情况下,我世界使用 hourminutesecond.

的名称

要最有效地构建文本,请使用 StringBuilder 对象。

我不会展示实际的代码来为您保留完成作业的乐趣。

使用 java.time 包:

var formatter = DateTimeFormatter.ofPattern("HHmmss");
var hms = new String[24 * 60 * 60];
for (var i = 0; i < hms.length; i++) {
    hms[i] = formatter.format(LocalTime.ofSecondOfDay(i));
}

三个嵌套循环:

var hms = new String[24 * 60 * 60];
var index = 0;
for (var h = 0; h < 24; h++) {
    for (var m = 0; m < 60; m++) {
        for (var s = 0; s < 60; s++) {
            hms[index++] = String.format("%02d%02d%02d", h, m, s);
        }
    }
}

单循环,使用format以毫秒为单位格式化时间(不太确定是否推荐):

var hms = new String[24 * 60 * 60];
for (var i = 0; i < hms.length; i++) {
    hms[i] = String.format("%TH%1$TM%1$TS", i * 1000L);
}

完全没有循环:

java.util.stream.LongStream.
           range(0, 24 * 60 * 60).
           mapToObj(x -> java.time.LocalTime.ofSecondOfDay(x)).
           collect(java.util.stream.Collectors.toList()).
           forEach(x -> System.out.println(x.format(java.time.format.DateTimeFormatter.ofPattern("HHmmss"))));