关于util的Random类的输出

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

public class SetOfInteger {

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Random rand=new Random(31);
    Set <Integer> setcase=new HashSet<Integer>();
    for(int i=0;i<5;i++){
        setcase.add(rand.nextInt());
    }
    System.out.println(setcase);
}

}
明明在实例rand的时候指明在31里面随机了呀,为什么结果会是[2088556312, -919422249, -1153560832, -1714240356, 1687125168]

创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。

故你写的31不是说在31里里面进行随机

朋友:31以内的随机数是这样写的;
希望能帮到你!

int val = (int)(Math.random()*31+1);
System.out.println(val);

A random seed (or seed state, or just seed) is a number (or vector) used to initialize a pseudorandom number generator.

Seed是随机数生成算法的输入参数。

要限定随机数区间,用如下方法:

 Random rand = new Random();
 int randInt = rand.nextInt( 16 ); //Generates a number in [0, 1, .., 15]

或者你的31写到nextInt()中去也行
这样 nextInt(31),而不是写在Random()的括号中!