У меня есть массив размера x, и мне нужно пройти список случайно, но каждый раз попадаю в каждый элемент. Каков наиболее эффективный способ сделать это?Java: Как случайным образом пройти через массив?
ответ
Что вы ищете перетасовать
попробовать this-
// Create a list
List list = new ArrayList();
// Add elements to list
// Shuffle the elements in the list
Collections.shuffle(list);
// Create an array
String[] array = new String[]{"a", "b", "c"};
// Shuffle the elements in the array
Collections.shuffle(Arrays.asList(array));
Просто shuffle массив, а затем итерацию над ним.
Collections.shuffle(Arrays.asList(yourArrayReference));
Коллекции не определены. Что такое коллекции? – BenRacicot
[Сборники Java] (https://docs.oracle.com/javase/tutorial/collections/). В частности, посмотрите раздел «Алгоритмы». – Mahesh
Вы можете использовать генератор случайных чисел, который обычно доступен по умолчанию в большинстве объектно-ориентированных языков программирования, и использовать второй массив для отслеживания того, что вы проверили уже.
По существу:
- Генерирует случайное число
- Поиск Основной массив для случайного числа
- Если случайное число не в уже проверенного массив ...
- ... затем проверьте элемент в основной матрице [случайный]
- Добавить случайное число в конец уже проверенной матрицы
Это эффективный способ времени и пространства.
import java.util.Enumeration;
import java.util.Random;
public class RandomPermuteIterator implements Enumeration<Long> {
int c = 1013904223, a = 1664525;
long seed, N, m, next;
boolean hasNext = true;
public RandomPermuteIterator(long N) throws Exception {
if (N <= 0 || N > Math.pow(2, 62)) throw new Exception("Unsupported size: " + N);
this.N = N;
m = (long) Math.pow(2, Math.ceil(Math.log(N)/Math.log(2)));
next = seed = new Random().nextInt((int) Math.min(N, Integer.MAX_VALUE));
}
public static void main(String[] args) throws Exception {
RandomPermuteIterator r = new RandomPermuteIterator(100);
while (r.hasMoreElements()) System.out.print(r.nextElement() + " ");
}
@Override
public boolean hasMoreElements() {
return hasNext;
}
@Override
public Long nextElement() {
next = (a * next + c) % m;
while (next >= N) next = (a * next + c) % m;
if (next == seed) hasNext = false;
return next;
}
}
Это очень нечитаемый и даже страшный код. Через 5 минут я все еще не вижу, что делает. Но если он действительно проходит через массив (например, запрос OP), то массив должен быть очень хорошо скрыт. И этот вопрос уже был дан 4 года назад. –
Он псевдослучайно перечисляет индексы массива. Если вы запускаете приведенный выше код, например, вы получите что-то вроде 50 52 3 6 45 40 26 49 92 11 80 2 4 19 86 61 65 44 27 62 5 32 82 9 84 35 38 77 72 7 ... для массива с индексы 0..99. – aykutfirat
хороший, спасибо – msangel
- 1. Java 2D-массив, назначающий случайным образом
- 2. Как пройти через массив JavaScript?
- 3. Выполнение Java случайным образом
- 4. массив выборки случайным образом PHP
- 5. PHP переупорядочивает массив случайным образом
- 6. Как пройти через массив CGPoints
- 7. Как пройти через массив символов
- 8. Как пройти через массив JSON?
- 9. Как пройти через массив флажка
- 10. Рекурсивно пройти через массив
- 11. Как заполнить массив меньшими массивами случайным образом?
- 12. Как пройти неизвестное число кавычек случайным образом, не повторяя
- 13. Невозможно выяснить, как наилучшим образом пройти через
- 14. Java сокета случайным образом останавливая
- 15. Как пройти через массив объектов в swift
- 16. пройти через массив связанных списков
- 17. , как пройти через массив массива (внутренний массив) через для каждого
- 18. Как пройти через массив аудио объектов
- 19. Java заполняет массив случайным образом в соответствующей игре
- 20. пройти через массив в C
- 21. PHP рекурсивно пройти через массив
- 22. Как случайным образом выбрать массив, а затем случайным образом выбрать элемент внутри javaScript?
- 23. Измените массив, чтобы не играть случайным образом
- 24. Запуск функции случайным образом
- 25. Вставка значений случайным образом в массив массивов
- 26. Вводить второй массив случайным образом внутри первой
- 27. Нокаут наблюдаемый массив случайным образом не связывает
- 28. случайным образом сплайсирует значения в массив
- 29. как пройти через массив объектов выбора
- 30. Как пройти через массив JSON в Vibe.D?
возможно дубликат [Возьмите п случайных элементов из списка?] (Http://stackoverflow.com/questions/4702036/take-n-random-elements-from-a-liste) –
templatetypedef
'но добираться до каждого элемента один раз. - Означает ли это, что вы хотите получить каждый элемент только один раз? и не получить этот элемент снова после перетасовки? – Rakesh
@ Rakesh, да, я хочу получить каждый элемент только один раз. – dee