2个数组随机显示1-10和随机1-10无功能

问题描述 投票:-1回答:2

这个程序的目标是让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]);
        }
    }
}
`
java arrays random numbers numeric
2个回答
0
投票

还有一个解决方案

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;
 }
}

1
投票

有很多方法可以做你想要的。

最简单的一个是应用哈希理论,使用下一个未调用的数字作为下一个(伪)随机数。 我假设你在你的代码中写的内容没有多大意义,所以为了遵循接下来的内容,我假设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 . . . . . |

可以想象,您可以使用许多冲突策略,前一个称为开放寻址。

© www.soinside.com 2019 - 2024. All rights reserved.