这个程序的目标是让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]);
}
}
}
`
还有一个解决方案
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;
}
}
有很多方法可以做你想要的。
最简单的一个是应用哈希理论,使用下一个未调用的数字作为下一个(伪)随机数。 我假设你在你的代码中写的内容没有多大意义,所以为了遵循接下来的内容,我假设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 . . . . . |
可以想象,您可以使用许多冲突策略,前一个称为开放寻址。