我想在short原始数据类型的范围(-32768,32767)内生成随机整数。Java的Random对象只能生成正数。我该如何在该区间内随机生成数字?谢谢。
您从(0, 32767+32768)
范围内随机选择一个数,然后减去32768
Random random=new Random();
int randomNumber=(random.nextInt(65536)-32768);
public static int generatRandomPositiveNegitiveValue(int max , int min) {
//Random rand = new Random();
int ii = -min + (int) (Math.random() * ((max - (-min)) + 1));
return ii;
}
生成0到65535之间的数字,然后减去32768。
n=n-(n*2)
n = -n
,但在 n*2
中可能会发生溢出。那个溢出有用吗?当 n=-32768
时,我们将得到 n = +32768
,它超出了二进制补码范围 -32768 .. +32767。 - Peter Cordes([我的双精度兼容原始类型])(Math.random() * [我的最大值] * (Math.random() > 0.5 ? 1 : -1))
例子:
// need a random number between -500 and +500
long myRandomLong = (long)(Math.random() * 500 * (Math.random() > 0.5 ? 1 : -1));
private static final Random generator = new Random();
public static double random(double min, double max) {
return min + (generator.nextDouble() * (max - min));
}
(Math.floor((Math.random() * 2)) > 0 ? 1 : -1) * Math.floor((Math.random() * 32767))
的意思是随机生成一个介于正负32767之间的整数。