У меня есть метод, который называется shuffle
, как тот, который я показал ниже, который перемешивает ArrayList целых чисел. Мне было интересно, мне нужно проверить этот метод?Метод для проверки целых чисел
public void shuffle(){
Collections.shuffle(numbers);
}
Я использую этот метод, чтобы перетасовать колоду из 52 карт, и в этом случае, это своего рода трудно увидеть (путем тестирования, если карты перемешиваются или нет, потому что вы, возможно, две карты подряд с тем же номером, или же костюм, который до сих пор считается перемешиваются.
Попробуйте создать случайное семя .. и примените к методу 'Collections.shuffle' ... что-то вроде:' long seed = System.nanoTime(); Collections.shuffle (числа, новые случайные (семя)); ' –
В каком контексте? Если бы вы когда-либо использовали или редактировали этот метод, я бы просто испытал, что Collections.shuffle (numbers) делает то, что вы ожидаете. Если другие могут отредактировать этот метод в будущем, он может * заслуживать написания модульного теста, если они решают изменить вашу реализацию, но не понимают/не знают требования. Вы можете протестировать такие случаи, как, например, что делать в случайном порядке, когда заданы числа, содержащие дубликаты, или что происходит в случайном порядке, когда предоставляется коллекция, которая не поддерживает заданную операцию. –
@ user1181847: обычно алгоритмы перетасовки по умолчанию недостаточно сильны для предотвращения атак. В те дни, по крайней мере, один сайт онлайн-покера имел свой алгоритм перетасовки, разработанный пиратами, который затем продолжил бить других игроков. Большинство онлайн-покерных сайтов в настоящее время используют очень продвинутые методы перетасовки, некоторые из них даже доходят до использования физического устройства, обеспечивающего «действительно» случайный источник.Чтобы предотвратить атаки, вам понадобится, по крайней мере, криптографически безопасный генератор псевдослучайных чисел (CSPRNG). * Collections.shuffle() * не подходит, если задействованы реальные деньги (например, сайты онлайн-покера) – TacticalCoder