Как я могу предотвратить генерацию случайных чисел от повторяющихся чисел?

Как я могу предотвратить генерацию случайных чисел от повторяющихся чисел?

Здесь часть моего кода, которая генерирует случайные числа:

String [] number = {"1","2","3","4","5","6"};
Random random = new Random();
int Select = random.nextInt(number.length);
System.out.println(number[Select]);

Иногда он повторяет числа, такие как "4", а затем "4". Мне бы хотелось, чтобы это всегда было другим.

5 ответов

Я бы сделал это так

class Generator {
 List<string> number = Arrays.asList("1", "2", "3", "4", "5", "6");
 int n = 0;

 Generator() {
 Collections.shuffle(number);
 }

 String next() {
 return number.get(n++);
 }
</string>


Для такого небольшого набора чисел (который может легко вписываться в память), я бы:

  1. скопируйте числа в ArrayList,
  2. используйте Collections.shuffle для рандомизации этого списка.
  3. перебирать значения списка


Вот мое решение. Я использовал ArrayList вместо регулярного массива, так как это строка..

import java.util.*;

class RandomWithoutRepeat {

 public static void main(String[] args) {
 ArrayList<string> number = new ArrayList<string>(
 Arrays.asList("1","2","3","4","5","6"));
 Random random = new Random();
 int size = number.size();
 int Select = random.nextInt(number.size());
 for(int i =0; i< size; i++)
 {
 Select = random.nextInt(number.size());
 System.out.println(number.get(Select));
 number.remove(Select); 
 }

 }
}
</string></string>


Простым способом это может быть:

store what values have already been generated in an array x
while new value is in the var x
 generate a new value again
use new value in the way you want


Хм, я не на 100 процентов в вашем коде, но кажется, что вы печатаете длину номера, а не номер... почему? Вы пытаетесь предотвратить получение двух 4-значных чисел подряд? Хорошо, я понял... nvm.

edit: ok, поэтому сделайте так, чтобы массив удалял переменную 'select' при каждом запуске цикла (создайте цикл, если у вас его нет). Тогда число не может быть выбрано.

licensed under cc by-sa 3.0 with attribution.