gpt4 book ai didi

java - 如何使用 java.util Random 类在 2 个时间间隔内生成随机 double ?

转载 作者:行者123 更新时间:2023-12-01 18:09:15 24 4
gpt4 key购买 nike

我希望能够从 2 个间隔生成一个随机 double ,即间隔为 0,1 和 5,8 将生成 0、1、5、6、7 和 8 之间的单个 double 。

理想情况下,可以使用间隔变量而不依赖于已知值。我尝试应用在多个间隔之间生成 int 背后的逻辑,但无法使两者兼容。有什么建议吗?

最佳答案

我不确定这是否是最好的方法,但这是我解决此问题的初步方法:

我们需要评估我们想要的边界的总跨度。在您的示例中,我们需要 [0,1]U[5,8]。从 1 - 0 = 18 - 5 = 3。总跨度为1 + 3 = 4

然后我会在第一个间隔的开始点 (0) 和第一个间隔的开始点 + 总跨度 (0 + 4 = 4) 之间生成一个随机数>)。因此,是 0 到 4 之间的随机 double 值。

假设它是 0.5。它小于我们第一个边界的结尾 ([0,1]),所以这是我们的最终数字。

现在假设我们生成的数字是 2。它大于我们第一个边界的结尾。我们需要从生成的数字中减去第一个边界的结尾。 2 - 1 = 1。现在我们需要将第二个边界的起点 ([5,8]) 添加到该数字,因此 1 + 5 = 6。所以 6 是我们的最终数字。

这里是实现:

public class RandomIntervals {
static class Interval {
double start;
double end;

public Interval(double start, double end) {
this.start = start;
this.end = end;
}

public double getSpan() {
return end - start;
}
}

public static double nextDouble(double min, double max) {
return min + (max - min) * new Random().nextDouble();
}

public static void main(String[] args) {
Interval interval1 = new Interval(0, 1);
Interval interval2 = new Interval(5, 8);

double totalSpan = interval1.getSpan() + interval2.getSpan();

double randomNumber = nextDouble(interval1.start, interval1.start + totalSpan);

if (randomNumber > interval1.end) {
randomNumber -= interval1.end;
randomNumber = interval2.start + randomNumber;
}

System.out.println(randomNumber);

}
}

关于java - 如何使用 java.util Random 类在 2 个时间间隔内生成随机 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60496433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com