|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
||||||
Проверка кода и советы по его улучшению. Генерация случайных чисел и проверка на уникальность26.11.2018, 18:47. Показов 3730. Ответов 13
Привет народ! Занимаюсь изучением Java, захотелось реализовать выборку случайных чисел для лотереи. Вроде бы все прописал и программа даже работает, но столкнулся с проблемой проверки чисел на уникальность. Следовательно хотелось бы услышать советы бывалых о том, как можно улучшить данный код и сделать проверку более умной.
На данный момент есть два больших косяка: 1) Иногда программа выдает 0 среди последовательностей чисел, хотя проверка на наличие нуля реализована в икле, но он все равно периодически выскакивает. 2) Проверка на уникальность числа. Когда программа делает проверку на наличии двух одинаковых чисел во втором массиве (от 1 до 12), проверка прекрасно проходит в первом цикле и меняет похожее значения, НО не учитывает, что при еще одной рандомной генерации может получится точно такое же число. Собственно вот хотелось бы услышать ваше мнение и советы по этому поводу.
Второй массив:[11, 9, 6, 1, 4, 3, 7, 8, 12, 10, 2, 5] Конечный массив: [11, 27, 16, 7, 44][2, 0] <- (Иногда (в маленьких скобках) выдает 0 или два одинаковых значения).
0
|
||||||
| 26.11.2018, 18:47 | |
|
Ответы с готовыми решениями:
13
Проверка уникальности записи Проверка на уникальность логина - MySql, Hibernate Выбор алгоритма для проверки символов строки на уникальность |
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 26.11.2018, 19:10 | |
|
gangmaster, зачем брать рандомное число из перемешанного массива? Он уже и так рандомный и не содержит повторов.
Код читать лень там хрень все равно Если есть числа 1—10 и надо взять 5 рандомных, достаточно сделать shuffle массиву и взять 5 первых чисел. Программа должна занимать 3 строчки а не то что сейчас.
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 19:15 [ТС] | |
|
Ребята все очень просто. Программа эмулирует алгоритм попадпния шаров в барабан машины (Видели как в реале шары выбирают?). Там идет двойная выборка с шафлом.
0
|
|
| 26.11.2018, 19:18 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 19:20 [ТС] | |
|
А доказать обратное можешь? 8) Я же написал, эмулирует алгоритм выборки как в реале, тоесть приближаем реализвцию задачи к максимально реалистичным. Покрайне мере такова моя задумка.
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 26.11.2018, 19:21 | ||
|
Насколько я помню там просто крутиться хрень и из неё шары выпадают. Это можно эмулировать одним шафлом. Вероятность та же.
0
|
||
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 19:25 [ТС] | |
|
https://www.youtube.com/watch?v=MRxPyXMaIyo ссылка на видео. Ну смотри в машину закидывают массив, массив делает шафл, причем постоянно (ну это нюанс), мы из этого массива во время шафла, берем рандомна 5 + 2 8) Вероятность меняется или нет, это уже доказательство при помощи математики, теории чисел и теории вероятности, я же просто постарался повторить действия машины и реализовать их в джаве. Вопрос то совсем в другом, как бороться с рандомной выборкой нуля, когда его нет? И как прописать более умную проверку на наличии двух одинаковых чисел? С нулем вообще косяк какой-то у рандома, я понимаю что он там играет числом от нуля до 1, не включая, но епрст, этож не работает как надо.
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|||||||
| 26.11.2018, 19:34 | |||||||
Сообщение было отмечено gangmaster как решение
Решение
1
|
|||||||
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|||||||
| 26.11.2018, 19:42 | |||||||
|
gangmaster, сделай
Добавлено через 7 минут
1
|
|||||||
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 19:52 [ТС] | |
|
KEKCoGEN Я ссылку на неправильное видео скинул, там лото, а не лоттерея. Правильная вот https://www.youtube.com/watch?v=dz2Z0Cs6OTg. Ну окей, ты упростил выборку и сделал ее просто по шафлу, хорошо, это уменьшит код и упростит его, согласен. Тогда вопрос такой, нафига нам все методы аля Random и им подобные, если мы можем генерить массивы и шафлить их? Данные методы нам не помогут, если мы имеем дело с числами и избегаем пояления среди них 0? Или же в таком случаи нам всегда делать проверку на 0? Можешь разъяснить? Да и еще вопрос, что делать, если нам нужна истинно рандомная генерация, аля казино (простой шафл не прйдет сертификацию для казино)? Как быть?
Добавлено через 2 минуты iSmokeJC я это делал. Числа появляются в связи с тем, что цикл заканчивается, а число УПС повторилось, я думаю это можно избежать при момощи while и условия на проверку, пока не убедится, что нет повторений. Что ты посоветуешь?
0
|
|
| 26.11.2018, 19:57 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 20:38 [ТС] | |
|
xoraxax я не несу, а просто спрашиваю. Я же написал, что я только начал изучать и пытаюсь понять смысл и правильность моих действий. Конечно мой вопрос для тебя может звучать глупо, но так разъясни, в этом то и суть задавания вопросов. Поделись опытом 8) (P.S.: Вот что я имел ввиду https://lawstrust.com/ru/licen... ertificate)
iSmokeJC не заметил этого - ThreadLocalRandom.current().nextInt(1, shuffledArrayMain.length). Спасибо опробую ![]() Добавлено через 38 минут Спасибо всем за ответы, дали пищу для размышления и заодно почитаю о незнакомых мне фишках языка
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 26.11.2018, 20:54 | |
|
gangmaster, методы рандом для получения псевдослучайных чисел очевидно. Насчет прохождения сертификации скзать не могу потому что требований не знаю.
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
| 26.11.2018, 21:03 [ТС] | |
|
KEKCoGEN да, я понял уже. Читаю о работе https://annimon.com/article/2778. Спасибо за наводку.
0
|
|
| 26.11.2018, 21:03 | |
|
Помогаю со студенческими работами здесь
14
улучшения качества кода Что можно добавить для улучшения кода?
Генерация случайных чисел, кратных 10 Подскажите как правильно сделать генерацию случайных чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|