1. 程式人生 > >Java獲取不重複的隨機數

Java獲取不重複的隨機數

import java.util.Random;

/**
 * 建立兩個長度為10的陣列,陣列內元素為隨機生成的、不重複的 1-100之間的整數
 */
public class Assign07 {
    public static void main(String[] args) {
        int[] arr1 = new int[10];
        Random r = new Random();
        for (int i = 0; i < arr1.length; i++) {
            int accRandom=r.nextInt(10)+1;
            int count=0;//不能再這裡直接給陣列變數賦值,這樣下面如何判斷都會重複
            //先將隨機數賦給一個接受的變數,然後再遍歷一遍陣列;如果有重複的,i--,重新獲取隨機數.
            //否則,則將接受隨機數的變數,賦給陣列變數.
            for (int j = 0; j < arr1.length; j++) {
                int a =arr1[j];
                if (a == accRandom) {
                    count++;
                }
            }
            if (count>0){
                i--;
            }else {
                arr1[i]=accRandom;
            }
        }
        for (int i : arr1) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

下面是封裝成的方法

    /**
     * 打印出0-num個不重複的隨機數
     * @param arr 自己定義任意長度的陣列,但必須小於num個,否則會出現很多個0的情況
     * @return 將不重複的隨機數賦給陣列中的各個元素並返回
     */
    public static int[] randomArr(int[] arr,int num) {
        Random rd = new Random();
        for (int i = 0; i < arr.length; i++) {
            int count = 0;
//            arr[i]=rd.nextInt(10)+1;//常規來說是這樣.但是我想輸出不重複的隨機數
            int temp = rd.nextInt(num);//先將隨機數賦值給一箇中間變數
            //然後再遍歷一遍陣列,如果有相同的,就不算,並且i--重新隨機.
            for (int j = 0; j < arr.length; j++) {
                if (arr[j] == temp) {
                    count++;//在外迴圈定義一個計數器,在內迴圈內判斷是否重複.否則迴圈結束
                    //內迴圈中的變數不能用於外迴圈
                }
            }if (count>0){//內迴圈結束,在外迴圈判斷是否計數器>0,如果是,就i--,重新隨機.
                //否則賦值給陣列
                i--;
            }else{
                arr[i] = temp;
            }
        }
        return arr;
    }