0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
||||||
1 | ||||||
Проверка кода и советы по его улучшению. Генерация случайных чисел и проверка на уникальность26.11.2018, 18:47. Показов 3221. Ответов 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
Нужны советы по улучшению кода Дайте советы по улучшению кода Проверка генератора случайных чисел Игра "Змейка": советы по улучшению кода |
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
26.11.2018, 19:10 | 2 |
gangmaster, зачем брать рандомное число из перемешанного массива? Он уже и так рандомный и не содержит повторов.
Код читать лень там хрень все равно Если есть числа 1—10 и надо взять 5 рандомных, достаточно сделать shuffle массиву и взять 5 первых чисел. Программа должна занимать 3 строчки а не то что сейчас.
0
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 19:15 [ТС] | 3 |
Ребята все очень просто. Программа эмулирует алгоритм попадпния шаров в барабан машины (Видели как в реале шары выбирают?). Там идет двойная выборка с шафлом.
0
|
iSmokeJC
|
26.11.2018, 19:18
#4
|
0
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 19:20 [ТС] | 5 |
А доказать обратное можешь? 8) Я же написал, эмулирует алгоритм выборки как в реале, тоесть приближаем реализвцию задачи к максимально реалистичным. Покрайне мере такова моя задумка.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
26.11.2018, 19:21 | 6 |
видео не открывается.
Насколько я помню там просто крутиться хрень и из неё шары выпадают. Это можно эмулировать одним шафлом. Вероятность та же.
0
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 19:25 [ТС] | 7 |
https://www.youtube.com/watch?v=MRxPyXMaIyo ссылка на видео. Ну смотри в машину закидывают массив, массив делает шафл, причем постоянно (ну это нюанс), мы из этого массива во время шафла, берем рандомна 5 + 2 8) Вероятность меняется или нет, это уже доказательство при помощи математики, теории чисел и теории вероятности, я же просто постарался повторить действия машины и реализовать их в джаве. Вопрос то совсем в другом, как бороться с рандомной выборкой нуля, когда его нет? И как прописать более умную проверку на наличии двух одинаковых чисел? С нулем вообще косяк какой-то у рандома, я понимаю что он там играет числом от нуля до 1, не включая, но епрст, этож не работает как надо.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||||||
26.11.2018, 19:34 | 8 | |||||
Сообщение было отмечено gangmaster как решение
Решение
ну так вот неплохо бы эту математику знать. Вероятность та же поэтому смысла в твоей программе нет и её можно сократить до
1
|
Am I evil? Yes, I am!
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
|
||||||
26.11.2018, 19:42 | 9 | |||||
gangmaster, сделай
Добавлено через 7 минут Поставь брэкпоинт на этом цикле и посмотри дебагом пару-тройку раз что там происходит. Я думаю, станет понятно, почему числа дублируются, нули появляются...
1
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 19:52 [ТС] | 10 |
KEKCoGEN Я ссылку на неправильное видео скинул, там лото, а не лоттерея. Правильная вот https://www.youtube.com/watch?v=dz2Z0Cs6OTg. Ну окей, ты упростил выборку и сделал ее просто по шафлу, хорошо, это уменьшит код и упростит его, согласен. Тогда вопрос такой, нафига нам все методы аля Random и им подобные, если мы можем генерить массивы и шафлить их? Данные методы нам не помогут, если мы имеем дело с числами и избегаем пояления среди них 0? Или же в таком случаи нам всегда делать проверку на 0? Можешь разъяснить? Да и еще вопрос, что делать, если нам нужна истинно рандомная генерация, аля казино (простой шафл не прйдет сертификацию для казино)? Как быть?
Добавлено через 2 минуты iSmokeJC я это делал. Числа появляются в связи с тем, что цикл заканчивается, а число УПС повторилось, я думаю это можно избежать при момощи while и условия на проверку, пока не убедится, что нет повторений. Что ты посоветуешь?
0
|
xoraxax
|
26.11.2018, 19:57
#11
|
0
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 20:38 [ТС] | 12 |
xoraxax я не несу, а просто спрашиваю. Я же написал, что я только начал изучать и пытаюсь понять смысл и правильность моих действий. Конечно мой вопрос для тебя может звучать глупо, но так разъясни, в этом то и суть задавания вопросов. Поделись опытом 8) (P.S.: Вот что я имел ввиду https://lawstrust.com/ru/licen... ertificate)
iSmokeJC не заметил этого - ThreadLocalRandom.current().nextInt(1, shuffledArrayMain.length). Спасибо опробую Добавлено через 38 минут Спасибо всем за ответы, дали пищу для размышления и заодно почитаю о незнакомых мне фишках языка
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
26.11.2018, 20:54 | 13 |
gangmaster, методы рандом для получения псевдослучайных чисел очевидно. Насчет прохождения сертификации скзать не могу потому что требований не знаю.
0
|
0 / 0 / 0
Регистрация: 26.11.2018
Сообщений: 14
|
|
26.11.2018, 21:03 [ТС] | 14 |
KEKCoGEN да, я понял уже. Читаю о работе https://annimon.com/article/2778. Спасибо за наводку.
0
|
26.11.2018, 21:03 | |
26.11.2018, 21:03 | |
Помогаю со студенческими работами здесь
14
Проверка кода на гавнокод и его оптимизация Возможна ли проверка кода и его запуск в инете? Проверка на уникальность Проверка на уникальность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |