2 массива для случайного отображения 1-10 и случайного 1-10 без функции - PullRequest
0 голосов
/ 12 марта 2019

Цель этой программы - заставить 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]);
        }
    }
}
`

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Есть действительно много способов сделать то, что вы просите.

Одним из самых простых является применение теории хеширования с использованием следующего незваного числа в качестве следующего (псевдо) случайного числа.
Я предполагаю, что то, что вы написали в своем коде, не имеет особого смысла, поэтому, чтобы следить за тем, что будет дальше, я предполагаю, что 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 . . . . . |

Как вы можете себе представить, существует множество политик коллизий, которые вы можете использовать, предыдущая называется открытой адресацией.

0 голосов
/ 13 марта 2019

Еще одно решение

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