随即数的问题

时间:2021-08-04 09:54:23
关于生成一个-500到500的随即数字``我想了半天都只想出来先生成一个-500到0的在生成一个0到500的之后把他们加起来就是-500到500之间的随即数了```但是我想肯定有其他的办法或者说我的办法是错的```谁知道啊``拜托了

8 个解决方案

#1


java.lang.Math.random() 
它产生的是0~1双精度数,先用产生的随即数减去0.5再乘以1000。看看对你有没有帮助。

#2


Math.random()*1000)-500;

#3


(int)(Math.random()*1000)-500

#4


我爱死你们了哈```谢谢2楼的哥哥

#5


呵呵,多多交流。

#6


在JDK5.0中有一个类 import java.util.Random.*; 其中方法nextInt可以帮你完成
先要声明一下 Random random= new Random();
int a=0-random.nextInt(501)
public int nextInt(int n)返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。nextInt 的常规协定是伪随机地生成并返回指定范围中的一个 int 值。所有 n 个可能 int 值的生成概率(大致)相同。Random 类按如下方式实现 nextInt(int n) 方法: 

 public int nextInt(int n) {
     if (n<=0)
                throw new IllegalArgumentException("n must be positive");

     if ((n & -n) == n)  // i.e., n is a power of 2
         return (int)((n * (long)next(31)) >> 31);

     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     } while(bits - val + (n-1) < 0);
     return val;
 }
 前面的描述中使用了不明确的词“大致”,只是因为 next 方法大致为一个单独选择位的公正来源。如果它是一个随机选择位的最佳来源,那么给出的算法应该从起始范围开始完全一致地选择 int 值。 

但此算法稍微有些复杂。它拒绝那些会导致不均匀分布的值(由于 2^31 无法被 n 整除)。某个值被拒绝的概率取决于 n。最坏的情况是 n=2^30+1,拒绝的概率是 1/2,循环终止前的预计迭代次数是 2。 

此算法特别对待 n 是 2 次幂的情况:它从基础的伪随机数生成器中返回正确的高位数。在不是特殊处理的情况中,将返回正确的低 位数。众所周知,线性同余伪随机数生成器(比如此类所实现的)在其低位的值序列中有 short periods。因此,如果 n 是 2 次幂(幂值较小),则这种特殊情况会导致对此方法的后续调用会返回其长度大大增加的值序列。 


参数:
n - 所返回随机数的范围。必须为正数。 
返回:
一个伪随机数,处于 0(包括)和 n(包括)之间均匀分布的 int 值。 

#7


^

#8


Math.random()*1000)-500;

#1


java.lang.Math.random() 
它产生的是0~1双精度数,先用产生的随即数减去0.5再乘以1000。看看对你有没有帮助。

#2


Math.random()*1000)-500;

#3


(int)(Math.random()*1000)-500

#4


我爱死你们了哈```谢谢2楼的哥哥

#5


呵呵,多多交流。

#6


在JDK5.0中有一个类 import java.util.Random.*; 其中方法nextInt可以帮你完成
先要声明一下 Random random= new Random();
int a=0-random.nextInt(501)
public int nextInt(int n)返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。nextInt 的常规协定是伪随机地生成并返回指定范围中的一个 int 值。所有 n 个可能 int 值的生成概率(大致)相同。Random 类按如下方式实现 nextInt(int n) 方法: 

 public int nextInt(int n) {
     if (n<=0)
                throw new IllegalArgumentException("n must be positive");

     if ((n & -n) == n)  // i.e., n is a power of 2
         return (int)((n * (long)next(31)) >> 31);

     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     } while(bits - val + (n-1) < 0);
     return val;
 }
 前面的描述中使用了不明确的词“大致”,只是因为 next 方法大致为一个单独选择位的公正来源。如果它是一个随机选择位的最佳来源,那么给出的算法应该从起始范围开始完全一致地选择 int 值。 

但此算法稍微有些复杂。它拒绝那些会导致不均匀分布的值(由于 2^31 无法被 n 整除)。某个值被拒绝的概率取决于 n。最坏的情况是 n=2^30+1,拒绝的概率是 1/2,循环终止前的预计迭代次数是 2。 

此算法特别对待 n 是 2 次幂的情况:它从基础的伪随机数生成器中返回正确的高位数。在不是特殊处理的情况中,将返回正确的低 位数。众所周知,线性同余伪随机数生成器(比如此类所实现的)在其低位的值序列中有 short periods。因此,如果 n 是 2 次幂(幂值较小),则这种特殊情况会导致对此方法的后续调用会返回其长度大大增加的值序列。 


参数:
n - 所返回随机数的范围。必须为正数。 
返回:
一个伪随机数,处于 0(包括)和 n(包括)之间均匀分布的 int 值。 

#7


^

#8


Math.random()*1000)-500;