Java獲取不重複的隨機數
阿新 • • 發佈:2019-02-08
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; }