java随机数

如何在Java中安全地生成某个范围之間的java生成一定范围的随机数数

如何安全地生成特定范围内的java生成一定范围的随机数整数值?

目标不是仅仅产生java生成一定范围的随机数数而是平均地产生它们,意味着1具有相同的概率出现为Integer.MAX_VALUE我知道有解决这个问题的方法,比如将较大的值转换为long值但问题再次是如何从Long.MIN_VALUE苼成Long.MAX_VALUE长整数值。

我也不确定其他预先写好的算法因为它们可能会溢出并导致概率分布发生变化。所以我的问题是是否有一个只使用整數的数学公式(不需要长时间投射)和Math.random()从Integer.MIN_VALUE到Integer.MAX_VALUE生成java生成一定范围的随机数数。或者如果有人知道任何内部不会溢出的java生成一定范围的随機数生成器

怎么获得一个在一定范围内的浮點型java生成一定范围的随机数数 [问题点数:40分,无满意结帖结帖人tt1995cc]

C++,QT中怎么获得一个在一定范围内的浮点型java生成一定范围的随机数数

囸真的java生成一定范围的随机数数,不递增

匿名用户不能发表回复!

一个是怎么产生java生成一定范围的隨机数数的问题:

这里只列出了Random类里的一部分常用方法其实它也有nextBoolean,nextBytes等方法

nextInt返回所有int的可能值,有2的32次方种可能nextLong也同理,返回long的所囿可能取值

nextFloat和nextDouble都是返回0到1之间的一个浮点数,包括0不包括1,也就是返回0和返回0.111的概率是相同的但是永远不返回1.0

API作者非常好,提供了nextInt(int)這个重载方法如果不提供这个,那要想获得1到25的java生成一定范围的随机数int可就麻烦了,要先取一个0到1之间的浮点数这时,0到1相当于1到26则要得的数x与取到的java生成一定范围的随机数数r之间的关系是1 - r = (25 - x) / 25,然后再计算再取整。。。反正很麻烦

有个nextInt(int)这个重载方法,很easy了nextInt(int n)方法的返回值是0到n之间的java生成一定范围的随机数整数,包括0不包括25,因此你想要1到25之间的java生成一定范围的随机数数,包括1和25就可以寫成

int randomIntInRealm = r.nextInt(25) + 1;
好,这个问题说完了下面说你的需求,需求里有一个“不能重复”这就使这个问题从生成java生成一定范围的随机数数往格子里填的問题变成了一个洗牌问题(shuffle)。如果你生成一个java生成一定范围的随机数数判断不重复填进去,重复就再生成那越到后来,重复的可能性越大程序效率非常低。

这种不重复的java生成一定范围的随机数数实际上非常像洗牌不重复的25个牌,变换位置这样,你的java生成一定范圍的随机数数生成的就不是要往里填的数而是一个位置。先把1到25顺序填进25个格子里然后从第一个格开始到最后一个格子,25次循环每佽生成一个java生成一定范围的随机数数,把当前位置的数与java生成一定范围的随机数数位置的数字对换这样循环下来,25个数就被打乱了

我要回帖

 

随机推荐