当前位置: 代码迷 >> J2SE >> Random类传到种子不能随机
  详细解决方案

Random类传到种子不能随机

热度:62   发布时间:2016-04-23 20:02:16.0
Random类传入种子不能随机

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class RandomTest {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
Random rand = new Random(100); // 随机种子100
while(set.size() != 7) {
set.add(rand.nextInt(20)); // 随机数生成范围
}
System.out.println(set);
}
}
每次执行的结果都是:[16, 6, 8, 10, 11, 14, 15]
如果不传入种子,则能实现随机,请问各位大神这是为什么?是我程序写的不对?还是传入种子不能实现随机?
------解决思路----------------------
试试用当前时间做种子,随机性估计会好一些
------解决思路----------------------
If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers.


------解决思路----------------------
随机数不随机,是因为,


Random()它有两种形式的构造函数,分别是Random()和Random(long seed)。
Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,
Random(long seed)使用指定的seed作为发生器的种子。

随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。 如果两个Random对象使用相同的种子(比如都是25),并且以相同的顺序调用相同的函数,那它们返回值完全相同。    
------解决思路----------------------
public static void addNumber(int min,int max,int numSize,HashSet<Integer> set){
Random random = new Random();

for(int i=0;i<numSize;i++){
int ranInt = random.nextInt(max-min+1);
System.out.print(ranInt+" ");
set.add(ranInt);

}
System.out.println(" ");
while(set.size()<numSize){
numSize = numSize-set.size();
//继续循环
addNumber(min,max,numSize,set);
}
}

------解决思路----------------------
兄带,这就好比下岛国成人片,你给迅雷每次都传同一个种子,你觉得你能随机下载到苍井啊梦野啊各种随机出现的片子么?

现在都净网了,醒醒吧。。。。
  相关解决方案