2个数组随机显示1-10和随机1-10无功能
2 arrays to randomly display 1-10 and random 1-10 without function
这个程序的目标是让 A2[] 随机显示数字 1-10 order.It 需要在没有任何过去的基础知识的情况下完成。 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 . . . . . . |
因此,当发现 "collision" 时,继续应用此修复:
新的随机数变成 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;
}
}
这个程序的目标是让 A2[] 随机显示数字 1-10 order.It 需要在没有任何过去的基础知识的情况下完成。 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 . . . . . . |
因此,当发现 "collision" 时,继续应用此修复:
新的随机数变成 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;
}
}