本问题已经有最佳答案,请猛点这里访问。
我正在尝试在基本数据类型short的范围内生成随机整数(-3276832767)。Java随机对象只生成正数。我该如何在那个时间间隔内随机创建数字呢?谢谢。
这让我想起了vb的rnd(),它只返回[0,1]中的值。
在Java中特定范围内如何生成随机整数的可能副本?
你随机抽取(0, 32767+32768),然后减去32768。
Random random=new Random();
int randomNumber=(random.nextInt(65536)-32768);
scala>def mynextpositivenumber:int=r.nextint(65536)-32768 mynextpositivenumber:int scala>println(mynextpositivenumber)-17761 scala>println(mynextpositivenumber)-26558 scala>scala>println(mynextpositivenumber)-17758 scala>println(mynextpositivenumber)-823 scala>println(mynextpositivenumber)17370
public static int generatRandomPositiveNegitiveValue(int max , int min) {
//Random rand = new Random();
int ii = -min + (int) (Math.random() * ((max - (-min)) + 1));
return ii;
}
你在哪里使用兰德?
例如,让我们以min=2和max=4为例。所以在最低随机数的情况下,假设0.001,*((4-(-2))+1)=7*0.001=(int)0.007=0,然后-2+0=-2。当最小值为2时,我们得到-2。这个公式出了点问题。
生成介于0和65535之间的数字,然后减去32768
这是一个我知道的老问题,但是…
n=n-(n*2)
这行不通。3=3-(3*2),3=-6.
错了。操作顺序。
不,还是不行。你的手术怎么样?
3-(3*2)=3-(6)=3
([my double compatible primitive type here])(math.random()*[my max value here]*(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));
如果人们对双版本感兴趣(请注意,如果传递了max_值或min_值,则会出现这种情况):
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))