我想在条件为(x,y]的情况下生成一个介于x和y之间的随机数,因此x被排除在外,但y被包括在内。
我正在使用Java。
我知道要排除上限,它是Math.random
* y,但是您要为下限做什么?我不确定您将如何执行此操作,因为Math.random函数返回相反的[0,1),所以我不确定您如何将其求反。
我还在此来源处获得了一个链接,以获取答案,但是我没有任何运气。 https://careerkarma.com/blog/java-math-random/#:~:text=The%20Math.,is%20always%20less%20than%201。
请让我知道
答案 0 :(得分:1)
要获取(0,1],您只需拿1.0 - Math.random()
double randomDouble = 1.0 - Math.random();
由此,您可以做一些随机的正常事情。例如,如果您想要任何双倍(6,10],则可以执行以下操作:
double randomDouble = (1.0 - Math.random()) * (10.0 - 6.0) + 6.0;
或者只是通用
double randomDouble = (1.0 - Math.random()) * (max - min) + min;
答案 1 :(得分:0)
规则:如果
a
位于[x, y[
中,则a+1
位于]x,y]
因此已知公式为double r = Math.random() * (upp - low) + low;
因此,使用+1
,它变为
Random rand = new Random()
int low = 10, upp = 20;
// for a double
double r = 1 + rand.nextDouble() * (upp - low) + low;
// for an int
int r = 1 + rand.nextInt(upp - low) + low;