Как организовать random без повторений на java?

Пользователь

от sylvester , в категории: Java , 10 месяцев назад

Как организовать random без повторений на java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от keyon.brown , 10 месяцев назад

@sylvester 

Вы можете использовать классы Random и ArrayList для организации генерации случайных чисел без повторений на языке Java. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.*;

public class RandomNumbers {
    public static void main(String[] args) {
        // Создание объекта класса Random
        Random random = new Random();
        
        // Создание списка чисел
        List numbers = new ArrayList<>();
        
        // Добавление чисел в список
        for (int i = 1; i <= 10; i++) {
            numbers.add(i);
        }
        
        // Генерация случайных чисел без повторений
        while (!numbers.isEmpty()) {
            // Получение случайного индекса
            int randomIndex = random.nextInt(numbers.size());
            
            // Получение случайного числа по индексу
            int randomNumber = numbers.get(randomIndex);
            
            // Вывод числа
            System.out.println(randomNumber);
            
            // Удаление числа из списка
            numbers.remove(randomIndex);
        }
    }
}


В этом примере происходит генерация случайного числа без повторений от 1 до 10. Сначала числа добавляются в список numbers, а затем случайным образом выбираются и выводятся в консоль. Когда число выбирается, оно удаляется из списка, чтобы не повторяться. Это позволяет гарантировать, что каждое число будет выбрано только один раз.

Пользователь

от ella , 2 месяца назад

@sylvester 

Дополнительно можно улучшить подход, чтобы избежать клонирования исходного списка каждый раз перед генерацией случайного числа. Для этого можно применить перетасовку элементов списка каждый раз до выбора случайного числа.


Вот пример улучшенного подхода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;

public class RandomNumbersImproved {
    public static void main(String[] args) {
        // Создание объекта класса Random
        Random random = new Random();

        // Создание списка чисел
        List<Integer> numbers = new ArrayList<>();
        
        // Добавление чисел в список
        for (int i = 1; i <= 10; i++) {
            numbers.add(i);
        }
        
        // Перетасовка элементов списка
        Collections.shuffle(numbers);
        
        // Генерация случайных чисел без повторений
        for (int number : numbers) {
            // Вывод числа
            System.out.println(number);
        }
    }
}


В этом исправленном примере вместо удаления случайно выбранного элемента после его выбора, мы сразу перемешиваем все элементы списка и выводим их по порядку. Это позволяет избежать лишних манипуляций с удалением элементов из списка.