這個問題在這里已經有了答案: 在 Java 中生成唯一的亂數 (22 個回答) 11 小時前關閉。
我正在嘗試創建一種方法,該方法用沒有重復元素的隨機整數填充陣列。我無法確保放入新陣列的每個元素都是不同的。
前任。如果 numOfDigits 是 5,那么我想要類似 [3][8][2][6][1] 的東西。目前,它要么輸出類似 [9][0][1][0][0] 的內容,要么輸出無限回圈。
private static int[] hiddenSet(int numOfDigits){
int[] numArray = new int[numOfDigits];
int temp;
for (int i = 0; i < numArray.length; i ){
do {
temp = getRandomNum(10);
numArray[i] = temp;
} while (isDigitNew(numArray, temp));
//Each random num must be unique to the array
}
return numArray;
}
private static boolean isDigitNew(int[] numArray, int index){
for (int i = 0; i < numArray.length; i ) {
if (numArray[i] == index) {
return false;
}
}
return true;
}
uj5u.com熱心網友回復:
一種簡單的方法是用不同的數字填充陣列,然后對其進行洗牌。
public static int[] getRandomDistinct(int length) {
Random rand = new Random();
int[] array = new int[length];
// Fill with distinct digits
for (int i = 0; i < length; i ) {
array[i] = i;
}
// Swap every element with a random index
for (int i = 0; i < length - 1; i ) {
int swapWith = i rand.nextInt(length - i);
int tmp = array[i];
array[i] = array[swapWith];
array[swapWith] = tmp;
}
return array;
}
uj5u.com熱心網友回復:
您的演算法最多需要二次時間。當亂數的選擇變得更少時,回圈可能需要很長時間。甚至無限也是可能的。
在之前生成的數字上加上一個正亂數 1。所需的數字范圍需要小心。
在他結束洗牌。如果從串列開始,則可以使用集合。洗牌。
uj5u.com熱心網友回復:
你可以這樣使用IntStream。
private static int[] hiddenSet(int numOfDigits) {
return IntStream.iterate(getRandomNum(10), i -> getRandomNum(10))
.distinct()
.limit(numOfDigits)
.toArray();
}
和
public static void main(String[] args) {
int[] a = hiddenSet(5);
System.out.println(Arrays.toString(a));
}
輸出:
[7, 4, 5, 0, 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368770.html
