Como gerar números aleatórios sem repetições em Java?

Alguém saberia como posso gerar números aleatório, usando o random abaixo, sem que ocorram repetições?

  public void sorteiaCartelaB() {
    		for (int i=0; i < b.length; i++) {
    			b[i] = (int)(Math.random() * 60 + 1);
    			for (int j=0; j<b.length; j++)
    				if (b[i] == b[j] && i != j)
    					b[i] = (int)(Math.random() * 60 + 1);
    				else 
    					continue;
    		}
    		return b;
    	}

Usa o Set a velocidade de adição dele é O(1) e ele não adiciona elementos repetidos. Depois vc pode converter ele para um array e tals.

Eí cara e essa linha retorna um valor randomico muito mais eficiente do que Math.random(), isso pq ele não é Thread safe, o ganho de desempenho é visto quando vc tá usando várias Threads:

 ThreadLocalRandom.current().nextInt(x, y)

Da mesma forma que é feito no mundo real, você tem uma caixinha cheia de números não repetidos e vai pegando eles aleatoriamente.

Dá uma olhada na classe GloboDaSorte que tem neste post.

1 curtida