天天看點

擷取指定個數指定範圍的随機數

我有這樣的需求:

我有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));