带条件生成两次范围内的随机时间

Vic*_*pes 4 java localtime java-8

我试图在两次范围内生成 10 个随机时间,并且有一个条件,即生成的时间之间不能少于 30 分钟。因此,如果我在上午 10:00 开始并在下午 05:00 结束,则它们之间的时间必须至少间隔 30 分钟。

我已经可以获得随机时间,但不知道如何将条件放在那里,有什么想法吗?

public LocalTime between(LocalTime startTime, LocalTime endTime) {
    int startSeconds = startTime.toSecondOfDay();
    int endSeconds = endTime.toSecondOfDay();
    int randomTime = ThreadLocalRandom
      .current()
      .nextInt(startSeconds, endSeconds);

    return LocalTime.ofSecondOfDay(randomTime);
}
Run Code Online (Sandbox Code Playgroud)

我把它放在一个 for 循环中以获得 10 个

Ole*_*.V. 5

为了获得良好的随机分布:在您从 10:00 开始到 17:00 结束之间的 7 小时(在 24 小时制,“军事时间”)中,4 小时 30 分钟已经预留给您的最小间隙( 9 个间隙@最少 30 分钟)。所以从 7 中减去 4:30,这给出了 2 小时 30 分钟的自由。

  1. 在 2 小时 30 分钟内生成 10 个随机时间,例如您已经这样做的方式。
  2. 按时间顺序排列它们。
  3. 第一次加 0 分钟,下一次加 30 分钟,第三次加 1 小时,依此类推。所以你会在最后一次加 4 小时 30 分钟。这将确保每个间隔至少为 30 分钟,并且最后一次仍然在 17:00 结束时间之内。

快乐编码。