Генерация случайного числа без повторений из выбранного диапазона
Пытаюсь реализовать следующую возможность - при нажатии на кнопку генерируется случайное число из диапазона. Но полностью такого функционала достичь не получается - или есть повторы или приходится 2-3 раза нажимать на кнопку. Что можно сделать, что бы заработало так, как мне нужно?
int random;
HashSet<Integer> set_ofuseNumbers = new HashSet<>();
private int GeneratorNumber(){
random = (int) (1 + Math.random()*5);
return random;
}// генерация случайно число от 1 до 5
public void AddToList(View v){
this.a = GeneratorNumber(); //генерируем число
set_ofuseNumbers.add(this.a); //добавляем в хешСет
viewText.setText(""+ this.a); // выводим на экран
Log.d("seek", String.valueOf(set_ofuseNumbers)); //выводим в лог
if (set_ofuseNumbers.contains(this.a)){
GeneratorNumber(); //генерируем число
Toast.makeText(this, "повтор", Toast.LENGTH_SHORT).show();
} else if(set_ofuseNumbers.size()==5){
Toast.makeText(this, "Заполненно", Toast.LENGTH_SHORT).show();
// проверка заполненности листа.
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Создайте массив или список чисел нужного диапазона, и примените перемешивание Фишера-Йетса - функцию несложно написать вручную или применить Collections.shuffle
Если диапазон очень велик, а чисел извлекать нужно немного - вот тогда можно применить метод генерации случайного числа в цикле, пока не сгенерируется то, что отсутствует в наборе использованных