Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
skraim
1 / 1 / 0
Регистрация: 27.05.2015
Сообщений: 14
#1

Случайные неповторяющиеся числа - Android

27.05.2015, 14:34. Просмотров 404. Ответов 9
Метки нет (Все метки)

Нужно сделать генератор случайных уникальных чисел.
Сам дошел только до такого варианта, но он, понятно, не работает правильно - значения все равно повторяются. В конечном виде программы будет 137 чисел, если это имеет значение.
Java
1
2
3
4
5
6
7
final Random random = new Random();
        str=random.nextInt(10);
        for(int i=0;i<count;i++){
            if (str!=bil[i])
                break;
                        else str++;}
        bil[count]=str;
bil[10] - хранит уже использованные значения, которые не должны повторяться.
Принцип построен на том, что когда находится значение bil[i] равное переменной str, то str не генерируется случайно заново, а к ней прибавляется 1 до момента, пока число не будет уникальным. Использоваться должны все числа от 1-го до 10-и, по одному разу.
Заранее спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
27.05.2015, 14:49     Случайные неповторяющиеся числа #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Лучший вариант для решения данной задачи - заполнить массив числами от y до x, где y - минимальное число, а x - максимальное. Потом его перемешать и достать из него первые z чисел, где z - количество нужных случайных чисел. Ну и пример который генерирует числа от 0 до заданного числа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public List<Integer> generateRandomNumbers(int totalNumbersCount, int randomNumbersCount){
 
        //Проверка на ошибки.
        if(randomNumbersCount > totalNumbersCount){
            throw new IllegalArgumentException("Количество нужных чисел больше, чем общее количество");
        }
        
        //Генерируем массив чисел от 0 до totalNumbersCount.
        List<Integer> numbers = new ArrayList<>();
        for(int i = 0; i < totalNumbersCount; i++){
            numbers.add(i);
        }
        //Перемешиваем числа в массиве.
        Collections.shuffle(numbers);
        //Переносим первые числа из общего массива, в массив результат в количестве равном randomNumbersCount.
        List<Integer> resultList = new ArrayList<>();
        for(int i = 0; i < randomNumbersCount; i++){
            resultList.add(numbers.get(i));
        }
        
        return resultList;
    }
Паблито
2027 / 1769 / 549
Регистрация: 12.05.2014
Сообщений: 6,279
Завершенные тесты: 1
27.05.2015, 14:51     Случайные неповторяющиеся числа #3
как можно сделать 137 рандомных чисел от 1 до 10 что бы они не повторялись?
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
27.05.2015, 14:57     Случайные неповторяющиеся числа #4
Паблито, можно) - 1, 1.0000001, 1.0000002, ..., 1.00000138
skraim
1 / 1 / 0
Регистрация: 27.05.2015
Сообщений: 14
27.05.2015, 14:58  [ТС]     Случайные неповторяющиеся числа #5
Цитата Сообщение от Паблито Посмотреть сообщение
как можно сделать 137 рандомных чисел от 1 до 10 что бы они не повторялись?
Я имел ввиду, что 10 чисел - только как пример, чтобы легче работать было. А в конечном виде будет 137 чисел от 1-го до 137-и.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 725
27.05.2015, 15:40     Случайные неповторяющиеся числа #6
вместо str++;
должен быть
str=random.nextInt(10);
а почему значения все равно повторяются?
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
27.05.2015, 15:42     Случайные неповторяющиеся числа #7
Valakin, ага, и потом думать почему же приложение зависло? Уж в случае с 10 числами очень возможен вариант непрекращающегося цикла - к примеру рандом будет выдавать всегда чило 2, а оно уже есть, генерим по новой - опять 2, оно опять же есть и т.д. пока зарядка не сядет)
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 725
27.05.2015, 15:49     Случайные неповторяющиеся числа #8
Spelcrawler,
почему рандом всегда будет выдавать 2? в этом проблема?

если знать сколько будет вариантов, но можно сделать выход из цикла когда массив заполниться, конечно если случайные цифры рандомятся разные,
код написан не полностью, я не очень понял вопрос первоначальный
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
27.05.2015, 15:50     Случайные неповторяющиеся числа #9
Valakin, не обязательно всегда 2, это могут быть все числа, но есть вероятность что код будет выдавать всегда число, которое уже есть. По этому такой генератор вполне может зависнуть на долго.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 725
27.05.2015, 15:57     Случайные неповторяющиеся числа #10
после str++; надо поставить i=0; + надо сделать проверку чтобы str за "10" не выскакивала
Yandex
Объявления
27.05.2015, 15:57     Случайные неповторяющиеся числа
Ответ Создать тему
Опции темы

Текущее время: 00:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru