[RESOLVIDO] Como gerar Números Aleatórios sem repetição

7 respostas
JMARQ

Boa tarde, gostaria de uma ajuda, pois estou tentando gerar números aleatórios com Random() sendo que não pode haver números repetidos.

Exemplo:

int[] num = new int[6];
Random  r = new Random();

for(int i=0; i<num.length; i++){
      num[i] = r.nextInt(60) + 1; //Dentro do Array num[i] não pode haver números repetidos, então, como fazer?
}

Desde já agradeço a colaboração de todos. Valeu!

7 Respostas

Anime

Oi JMARQ,

Da uma olhadinha aqui http://www.guj.com.br/posts/list/131545.java

Boa sorte!

JMARQ

Anime, grato pela ajuda, só que não explica bem o que estou pretendendo. Mesmo assim, Valeu!

ViniGodoy

O jeito mais fácil é criar um monte de números numa JList e então usar o método Collections.shuffle.

List<Integer> numeros = new ArrayList<Integer>();
for (int i = 1; i < 61; i++) { //Sequencia da mega sena
    numeros.add(i);
}

//Embaralhamos os números:
Collections.shuffle(numeros);

//Mostramos 6 aleatórios
for (int i = 0; i < 6; i++) {
   System.out.println(numeros.get(i));
}
JMARQ

ViniGodoy, muito obrigado pelo apoio meu velho, um forte abraço e até as próximas dúvidas. Valeu!!!

JMARQ

Proveitando a oportunidade, ViniGodoy, tem como ser feito com Random(), sendo feitas comparações para cada posição do Array para que não repita um número?

ViniGodoy
JMARQ:
Proveitando a oportunidade, ViniGodoy, tem como ser feito com Random(), sendo feitas comparações para cada posição do Array para que não repita um número?

Tem sim, mas isso é pouco eficiente. Se for para fazer assim, é melhor usar um TreeSet:

Set<Integer> numeros = new TreeSet<Integer>();

Random rand = new Random();
//Vamos sortear 20 números de 0 até 100 sem repetição
while (numeros.getSize() < 20) {
   numeros.add(rand.nextInt(101));
}

System.out.println("Números gerados: " + numeros);
JMARQ

Obrigado pela atenção ViniGodoy, mais uma vez agradeço novamente pela ajuda.

Consegui fazer da forma que o professor pediu, segue o código:

public class NumerosAleatrorios{

    public static void main(String[] args){

        int numero;
        int[] num = new int[6];
        Random r = new Random();

        for(int i=0; i<num.length; i++){
             numero = r.nextInt(60) + 1;
             for(int j=0; j<num.length; j++){
                   if(numero == num[j] && j != i){
                         numero = r.nextInt(60) + 1;
                   }else{
                        num[i] = numero;
                   }
             }
        }
        //Apresentar na tela o resultado
        for(int i=0; i<num.length; i++){
             System.out.print(num[i]+"  ");
        }
    }
}

Valeu pessoal, até mais.

Criado 24 de outubro de 2010
Ultima resposta 24 de out. de 2010
Respostas 7
Participantes 3