我試圖在 Java 中生成一個由 5 個非重復整陣列成的陣列,但是當我運行它時仍然有重復。到目前為止,這是我的代碼:
public int[] generateCode(){
code[0] = (int)Math.round(Math.random()*8 1); // initialize first number so it won't be compared against
for(int i=1; i<code.length; i ){
code[i] = (int)Math.round(Math.random()*8) 1;
for(int j=0; j<i; j ){
while(code[i]==code[j]){
code[i] = (int)Math.round(Math.random()*8) 1;
}
} // end inner for loop
} // end outer for loop
return code;
} // end generateCode method
很感謝任何形式的幫助!
uj5u.com熱心網友回復:
因此,您for-loop正在檢查重復的字符,但是每次生成一個新值(在 中while-loop)時,您都不會檢查該值是否在之前退出j。
有許多可能的方法可以解決這個問題,我更喜歡使用 的方法Collections.shuffle,但假設您不能使用Arrays、Collections、甚至流等功能,我們需要使用現有的陣列List。Set
由于您有一小部分可接受的值需要適應更小的范圍,一個簡單的解決方案可能是生成允許值的“主”串列并從主串列中隨機選擇一個值,跟蹤您已經已經選好了。
聽起來比實際上更復雜,例如......
public int[] generateCode() {
int[] masterValues = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] codes = new int[5];
Random rnd = new Random();
int index = 0;
while (index < codes.length) {
int lookupIndex = 0;
do {
lookupIndex = rnd.nextInt(masterValues.length);
} while (masterValues[lookupIndex] == 0);
codes[index] = masterValues[lookupIndex];
masterValues[lookupIndex] = 0;
index ;
}
return codes;
}
這將創建一個“主”值串列。然后它隨機計算一個“查找”索引,檢查主串列中的值是否是,0如果不是,它將它分配給codes陣列中的下一個索引并將主串列中的值設定為0一個新的隨機索引并再次嘗試。這一切都在重復,直到它填滿codes陣列
所以做類似...
System.out.println(Arrays.toString(generateCode()));
System.out.println(Arrays.toString(generateCode()));
System.out.println(Arrays.toString(generateCode()));
System.out.println(Arrays.toString(generateCode()));
可以列印(因為它是“隨機的”)...
[8, 1, 4, 7, 5]
[9, 6, 2, 1, 8]
[6, 5, 9, 4, 7]
[2, 5, 3, 1, 4]
uj5u.com熱心網友回復:
有很多更簡單的方法可以做到這一點。使用 aSet<Integer>將是一個。這是另一個。
List<Integer> list = new ArrayList<>(List.of(1,2,3,4,5,6,7,8));
Collections.shuffle(list);
System.out.println(list.subList(0,5));
列印類似的東西
[4, 5, 8, 2, 1]
正如向我指出的那樣,您可能不被允許使用或了解集合。但我建議您至少制作一個輔助方法來檢查重復項以減少混亂。類似于以下內容:
public boolean contains(int[] arr, int n) {
for (int v : arr) {
if (v == n) {
return true;
}
}
return false;
}
然后,您可以false在添加之前繼續檢查當前值。一旦它起作用,它還可以讓您專注于代碼的其他方面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481219.html
