[英]random numbers 1-10 without repeating. Why does this code not work. It compiles but still repeats
[英]2 arrays to randomly display 1-10 and random 1-10 without function
這個程序的目標是讓 A2[] 以隨機順序顯示數字 1-10。它需要在沒有任何基礎知識的情況下完成。 A2[] 從 A1[] 獲取數字,A1[] 數組將數字 1-10 按順序存儲。 程序在當前狀態下運行,但不會過濾掉已經存儲在 A2[] 中的結果。 例如.... 4,2,3,7,5,9,7,1,4 不應該是結果。 應該只顯示 1-10 的隨機順序,每個 int 只出現一次。 任何幫助是極大的贊賞。 目前的代碼如下:`
public class W07problem07 {
public static int getRandomIntRange(int min, int max) {
int x = (int) (Math.random() * ((max - min))) + min;
return x;
}
public static void main(String[] args) {
int ranNum;
int count = 1;
int[] A1 = new int[10];
int[] A2 = new int[10];
//loop for storing 1-10 int number withing A1[].
for (int k = 0; k < A1.length; k++) {
A1[k] = count;
count++;
}
for (int k = 0; k < A2.length; k++) {
A2[k] = k;
}
for (int j = 0; j < A2.length; j++) {
int a;
ranNum = getRandomIntRange(0, A2.length);
a = A2[j];
if(a==ranNum){
j--;
} else{
A2[j]= A1[ranNum];
}
}
for (int k = 0; k < A2.length; k++) {
System.out.println(A2[k]);
}
}
}
`
有很多方法可以做你所要求的。
最簡單的方法之一是應用哈希理論,使用下一個未調用的數字作為下一個(偽)隨機數。
我假設您在代碼中編寫的內容沒有多大意義,因此按照接下來的操作,我假設 A1 中填充了數字 1-10,而您直接使用混洗后的數字填充了 A2。
例子:
這是 A2 的當前狀態。 下一個選擇的隨機數是 1,但這並不好,只要它已經被選擇了。
A1 |1 2 3 4 5 6 7 8 9 10|
A2 |1 4 7 9 . . . . . . |
因此,當發現“碰撞”時,繼續應用此修復程序:
新的隨機數變為 x = x+1 直到取到一個未選擇的數字。
所以
A1 |1 2 3 4 5 6 7 8 9 10|
A2 |1 4 7 9 2 . . . . . |
可以想象,您可以使用很多沖突策略,前一種稱為開放尋址。
另一種解決方案
public class W07problem07 {
public static int getRandomIntRange(int min, int max) {
int x = (int) (Math.random() * ((max - min))) + min;
return x;
}
public static void main(String[] args) {
int count = 1;
int[] A1 = new int[10];
int[] A2 = new int[10];
//loop for storing 1-10 int number withing A1[].
for (int k = 0; k < A1.length; k++) {
A1[k] = count;
count++;
}
int j = 0;
while (j < A1.length) {
int ranNum = getRandomIntRange(1, A1.length + 1);
if (!numAlreadyExists(A2, ranNum)) {
A2[j++] = ranNum;
}
}
for (int k = 0; k < A2.length; k++) {
System.out.println(A2[k]);
}
}
public static boolean numAlreadyExists(int[] array, int element) {
for (int i = 0; i < array.length; i++) {
if (element == array[i]) {
return true;
}
}
return false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.