我撰寫了一個可以生成亂數的代碼,但我的問題是有時它會不時重復兩個或三個數字。
int winnum[] = new int[6];
System.out.print("Lotto winning numbers: ");
for(int i = 0; i < winnum.length; i ){
winnum[i] = 0 (int)(Math.random() * 42);
System.out.print(winnum[i] " ");
}
這是我生成亂數的代碼
uj5u.com熱心網友回復:
一個相當簡單的方法是重新想象一下。考慮一副牌,而不是“生成亂數”。您不會“生成隨機卡片” - 您按特定順序生成(好吧,列印)52 張卡片,然后隨機化它們的順序。現在你可以從牌組頂部抽牌,它們將是隨機的,但它們不能重復。
做同樣的事情:制作一個串列,用所有 42 個數字填充它,然后將串列隨機排列,然后將前 6 個數字從串列中拉出。瞧:隨機的——而且沒有重復。
var numbers = new ArrayList<Integer>();
for (int i = 0; i < 42; i ) numbers.add(i);
Collections.shuffle(numbers);
for (int i = 0; i < 6; i ) {
System.out.print(list.get(i) " ");
}
uj5u.com熱心網友回復:
這是使用流的真正快速方法。
Random r = new Random();
r.ints(n,m)- 生成包含之間的隨機值n and m-1流distinct- 確保它們是獨一無二的limit(n)- 限制于ntoArray- 作為陣列回傳。
int [] result = r.ints(0,42).distinct().limit(6).toArray();
System.out.println(Arrays.toString(result));
列印類似的東西
[37, 19, 28, 31, 15, 12]
uj5u.com熱心網友回復:
您需要檢查陣列是否包含新生成的亂數。如果沒有,則添加它,否則,繼續生成亂數,直到生成不在陣列中的亂數。要檢查是否在陣列中找到數字,可以撰寫以下函式,該函式接受隨機整數、陣列并回傳布林值:
boolean exists = false;
for (int n : winnum) {
if (n == randomInt) {
exists = true;
break;
}
} return exists;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473526.html
上一篇:我需要一個函式來從C 中的char陣列中洗掉某些字符而不使用任何索引
下一篇:JSON決議物件內部物件的屬性?
