天天看点

获取指定个数指定范围的随机数

我有这样的需求:

我有100道试题,id是0到99,我想从中找出20道试题组成一个试卷,要求试题不重复,打乱顺序:

获取指定个数指定范围的随机数

/** 

     * 产生无重复的随机数    sumint:总样本 (0....sumint-1) 

     * resultsum: 产生的随机数个数 

     *  

     * @return 

     */  

    public static int[] randoms(int sumint, int resultsum) {  

        random r = new random();  

        int temp1, temp2;  

        //total sample  

        int send[] = new int[sumint];//0....(sumint-1)  

        for (int i = 0; i < sumint; i++) {  

            send[i] = i;  

        }  

        int len = send.length;//the length of the total sample  

        int returnvalue[] = new int[resultsum];//random number to return  

        for (int i = 0; i < resultsum; i++) {  

            temp1 = math.abs(r.nextint()) % len;  

            temp2 = send[temp1];  

            returnvalue[i] = temp2;  

            if (temp1 != len - 1) {  

                send[temp1] = send[len - 1];  

                send[len - 1] = temp2;  

            }  

            len--;  

        return returnvalue;  

    }  

测试:

public static void printarray(int[] ints) {

for (int i = 0; i < ints.length; i++) {

system.out.print(ints[i]);

if (i < ints.length - 1) {

system.out.print(" ,");

}

system.out.println();

@test

public void test_randoms(){

printarray(systemutil.randoms(5, 3));