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);
}
}

解决方案 »

  1.   

    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.
      

  2.   

    随机数不随机,是因为,
    Random()它有两种形式的构造函数,分别是Random()和Random(long seed)。
    Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,
    Random(long seed)使用指定的seed作为发生器的种子。随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。 如果两个Random对象使用相同的种子(比如都是25),并且以相同的顺序调用相同的函数,那它们返回值完全相同。    
      

  3.   

    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);
    }
    }