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

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

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

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

27.05.2015, 14:34. Просмотров 475. Ответов 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-и, по одному разу.
Заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2015, 14:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Случайные неповторяющиеся числа (Программирование Android):

Случайные неповторяющиеся числа - C (СИ)
как можно написать программу, в неком диапазоне вычисляет случайные числа, но так, чтобы ни одно число не повторялось

Случайные неповторяющиеся числа - MathCAD
как создать массив из случайных НЕПОВТОРЯЮЩИХСЯ чисел

Неповторяющиеся случайные числа - Turbo Pascal
Нужно сделать так, чтобы числа от 1 до 3000 рандомно выводились на экран. Но сделать это надо без повторений чисел Никак не пойму как это...

Неповторяющиеся случайные числа - C#
Здравствуйте, помогите пожалуйста Язык программирования C# Console.WriteLine(&quot;Введите размер числовой последовательности n&quot;); ...

Лотерея (случайные неповторяющиеся числа) - Pascal ABC
Необходимо написать программу на Pascal'е &quot;Лотерея&quot;. Программа должна последовательно вывести 86 чисел из диапазона от 1 до 90. При этом не...

.NET 4.x Игра "Покер": как сгенерировать неповторяющиеся случайные числа - C#
итак. пишу игру. покер. использую при создании карт цикл for (int i=0; i &lt; 52; i++) , в нем пробегаю от 1 до 4 (масти) и от 1 до 15...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 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;
    }
1
Pablito
2489 / 1934 / 605
Регистрация: 12.05.2014
Сообщений: 6,795
Завершенные тесты: 1
27.05.2015, 14:51 #3
как можно сделать 137 рандомных чисел от 1 до 10 что бы они не повторялись?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
27.05.2015, 14:57 #4
Паблито, можно) - 1, 1.0000001, 1.0000002, ..., 1.00000138
0
skraim
1 / 1 / 0
Регистрация: 27.05.2015
Сообщений: 15
27.05.2015, 14:58  [ТС] #5
Цитата Сообщение от Паблито Посмотреть сообщение
как можно сделать 137 рандомных чисел от 1 до 10 что бы они не повторялись?
Я имел ввиду, что 10 чисел - только как пример, чтобы легче работать было. А в конечном виде будет 137 чисел от 1-го до 137-и.
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
27.05.2015, 15:40 #6
вместо str++;
должен быть
str=random.nextInt(10);
а почему значения все равно повторяются?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
27.05.2015, 15:42 #7
Valakin, ага, и потом думать почему же приложение зависло? Уж в случае с 10 числами очень возможен вариант непрекращающегося цикла - к примеру рандом будет выдавать всегда чило 2, а оно уже есть, генерим по новой - опять 2, оно опять же есть и т.д. пока зарядка не сядет)
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
27.05.2015, 15:49 #8
Spelcrawler,
почему рандом всегда будет выдавать 2? в этом проблема?

если знать сколько будет вариантов, но можно сделать выход из цикла когда массив заполниться, конечно если случайные цифры рандомятся разные,
код написан не полностью, я не очень понял вопрос первоначальный
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
27.05.2015, 15:50 #9
Valakin, не обязательно всегда 2, это могут быть все числа, но есть вероятность что код будет выдавать всегда число, которое уже есть. По этому такой генератор вполне может зависнуть на долго.
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
27.05.2015, 15:57 #10
после str++; надо поставить i=0; + надо сделать проверку чтобы str за "10" не выскакивала
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2015, 15:57
Привет! Вот еще темы с ответами:

Неповторяющиеся случайные имена - Java SE
Добрый день. Поискал по темам про случайные числа, но ответ на свой вопрос не нашёл увы. Немного предыстории, начал изучать Java. На...

Неповторяющиеся числа. - Turbo Pascal
Всем добрый день! Нужна помощь. В текстовом файле t1 записана последовательность целых чисел, разделенных пробелами. Написать...

Сгенерировать неповторяющиеся числа - C++
Доброго всем здравия, нужно генерировать числа от 1 до 5. Чтобы в массиве оказалось только по одному числу от 1 до 5 хаотично....

Неповторяющиеся рандомные числа - C++
Друзья, Пишу программу для проверки таблицы умножения. В тот момент, когда он должен выдавать пример на решение должен быть рандом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.05.2015, 15:57
Ответ Создать тему
Опции темы

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