[TOC]
Math.random()
a pseudorandom double greater than or equal to 0.0 and less than 1.0.
即返回一个[0,1)的double类型的随机数
以下情况 | y>x
double随机数
要获取一个[x,y)的double类型的随机数 | 左闭右开
double d = x + Math.random() * (y - x);
要获取一个(x,y]的double类型的随机数 | 左开右闭
double d = y - Math.random() * (y - x);
要获取一个[x,y]的double类型的随机数 | 左闭右闭
double d = x + Math.random() * y % (y - x + 1);
要获取一个(x,y)的double类型的随机数 | 左开右开
double d = (y - Math.random()) % y;
int随机数
要获取一个[x,y)的int类型的随机数 | 左闭右开
int d = x + (int)(Math.random() * (y - x));
要获取一个(x,y]的int类型的随机数 | 左开右闭
int d = y - (int)(Math.random() * (y - x));
要获取一个[x,y]的int类型的随机数 | 左闭右闭
int i = x + (int)(Math.random() * (y - x + 1));
要获取一个(x,y)的int类型的随机数 | 左开右开
int d = (int)((y - Math.random()) % y);
注意1
1 | Random r = new Random(); |
提供另一种解决思路
注意2
Math
类中有一floor(double a)
方法public static double floor(double a)
返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
所以对于要获取一个[x,y]的double类型的随机数 | 左闭右闭时候
可以采用以下解决思路:Double.valueOf( x + Math.floor(random.nextDouble() * y % (y - x + 1));