NekOdin
@NekOdin

Как организовать Random без повторений на Java?

Есть числа с 0 по 23. Как сделать так, что бы при нажатии на кнопку генерировалось случайное число, которое не встречалось еще как минимум 2 раза?
  • Вопрос задан
  • 1267 просмотров
Пригласить эксперта
Ответы на вопрос 4
Мб сделать массив с числами, которые выпадали, потом shuffle array?
Ответ написан
Комментировать
@Warlodya
spoiler
import java.lang.Math;
import java.util.*;
public class SuperRandom
{
  
  private ArrayList<Integer> numbers;
  private Random rand;
  
  	public static void main(String[] args)
  	{
      		SuperRandom sr=new SuperRandom(10);
      		for(int i=0;i<10;i++)
    		System.out.print(sr.getValue());
  	}
	
  	public SuperRandom(int size){
		rand=new Random();
		numbers=new ArrayList<>();
    		for(int i=0;i<size;i++)
    		numbers.add(i);
 	 }
  
  	public int getValue(){
     		int randomIndex=rand.nextInt(numbers.size());
     		return numbers.remove(randomIndex);
 	}
  
  	public int getSize(){
  		return numbers.size();
 	}
  
}


Альтернативное решение, только сами думайте как вам лучше обработать конец значений.
Ответ написан
Комментировать
yellow79
@yellow79
Senior Software Engineer
Создать массив из 46-ти элементов, заполнить чиселками, перемешать, дальше выкусывать из него по одному значению, как только длина станет равна ноль, перезаполнить массив ну или что там должно быть по логике по окончании

upd. Если уж джава так безбожно относится к памяти, то вместо выкусывания можно завести отдельный инкрементальный счётчик
Ответ написан
duhbox
@duhbox
Запоминать 2 последних сгенерированных числа.
При нажатии на кнопку запускать цикл генерации до тех пор, пока вариант не будет отличаться от обоих запомненных. Ну и сдвигать сохраненную пару на 1 при каждом новом найденом числе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы