【发布时间】:2011-04-25 17:41:07
【问题描述】:
我正在尝试在原始数据类型 short 的范围(-32768、32767)上生成随机整数。 java Random 对象只生成正数。我将如何在该间隔上随机创建数字?谢谢。
【问题讨论】:
-
这让我想起了VB的Rnd(),它只返回[0,1)中的值。
我正在尝试在原始数据类型 short 的范围(-32768、32767)上生成随机整数。 java Random 对象只生成正数。我将如何在该间隔上随机创建数字?谢谢。
【问题讨论】:
你随机选择(0, 32767+32768) 然后减去32768
【讨论】:
生成 0 到 65535 之间的数字,然后减去 32768
【讨论】:
public static int generatRandomPositiveNegitiveValue(int max , int min) {
//Random rand = new Random();
int ii = -min + (int) (Math.random() * ((max - (-min)) + 1));
return ii;
}
【讨论】:
Random random=new Random();
int randomNumber=(random.nextInt(65536)-32768);
【讨论】:
这是一个我知道的老问题,但是嗯....
n=n-(n*2)
【讨论】:
n = -n 的慢速方法,但n*2 可能会溢出。溢出有什么用吗?使用n=-32768,我们会得到n = +32768,它在2 的补码-32768 .. +32767 范围之外。
(Math.floor((Math.random() * 2)) > 0 ? 1 : -1) * Math.floor((Math.random() * 32767))
【讨论】:
如果人们对双重版本感兴趣(请注意,如果通过了 MAX_VALUE 或 MIN_VALUE,则会出现故障):
private static final Random generator = new Random();
public static double random(double min, double max) {
return min + (generator.nextDouble() * (max - min));
}
【讨论】:
([我的双重兼容的原始类型])(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));
【讨论】: