生成随机不重复数组

230 阅读1分钟

非原创,仅记录

package com.academicdog.norepeatrandom;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 * 生成随机不重复数组,用户指定随机数组个数以及范围
 *
 * 使用arraylist
 */


public class useArraylist {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random rd = new Random();

        System.out.println("输入不重复随机数组个数:");
        int num = sc.nextInt();

        int maxN, minN;
        while (true) {
            System.out.println("输入随机数组范围minN和maxN:");
            maxN = sc.nextInt();
            minN = sc.nextInt();

            //范围不能比数组个数小,因为数字不重复,会造成后面arraylist的死循环
            if(Math.abs(maxN - minN) >= num - 1) {
                if (minN > maxN) {
                    minN = minN + maxN;
                    maxN = minN - maxN;
                    minN = minN - maxN;
                    break;
                } else if (minN < maxN) {
                    break;
                }
            }else {
                System.out.println("随机数范围不能小于" + num + ",否则会陷入死循环");
            }
        }

        List rdArrList = new ArrayList();
        int[] rdArr = new int[num];
        int randomNum;

        do{
            randomNum = rd.nextInt(maxN - minN + 1) + minN;
            if(!rdArrList.contains(randomNum)){
                rdArrList.add(randomNum);
            }
        }while (rdArrList.size() < num);

        System.out.println("生成的不重复数组是:");
        for (int i = 0; i < rdArr.length; i++) {
            rdArr[i] = (int)rdArrList.get(i);
            System.out.print(rdArr[i] + " ");
        }
    }

}