Collections.shuffle не работает должным образом со значением SimClock Random - PullRequest
0 голосов
/ 02 ноября 2019

Я хотел бы добавить случайное поведение в мой код. Я хочу сделать это со значением метки времени. Таким образом, я хочу перетасовать список с текущей отметкой времени. Это мой код:

Random random = new Random(SimClock.getIntTime());
Collections.shuffle(list, random);

Shuffle работает правильно, если я не использую случайную переменную для перемешивания списка. Однако, когда я использую код выше, список вывода всегда один и тот же (он никогда не перетасовывается).

Случайное значение изменяется каждый раз, когда вызывается Collections.shuffle (я проверял это), поэтому я не знаюпочему мой список не перемешивается, когда я использую случайное значение. Почему это происходит?

Обновление

список представляет собой ArrayList со следующим значением: [MIX0, MIX1].

Это значениеlist и случайной переменной, когда shuffle вызывается три раза в одном и том же исполнении:

randon value: 25214903885   
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]

randon value: 25214903895   
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]

randon value: 25214903865   
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]

Случайное значение копируется из значений переменных Eclipse.

Когда я использую метод случайного числа без случайногоЗначение списка иногда перемешивается следующим образом: [MIX1, MIX0].

1 Ответ

0 голосов
/ 03 ноября 2019

Я использовал следующий код:

public static void main(String[] args) throws IOException {
   List<String> arr = new ArrayList<>(3);
   arr.add("aaa");
   arr.add("bbb");
   arr.add("ccc");

   for (int i = 0; i < 4; i++) {
       Collections.shuffle(arr, new Random(System.currentTimeMillis()));
       System.out.println(ArrayUtils.toString(arr));
   }
}

out: [ccc, aaa, bbb][bbb, ccc, aaa][А-а-а, bbb, ccc][ccc, aaa, bbb]

Если в аргументе new Random(...) указать постоянное значение, все выходы будут одинаковыми.

...