Números randômicos não repetidos

5 respostas
volber

Pessoal,

Estou com um pequeno problema estou gerando números randômicos e não quero que eles se repitam, existe algum metodo dentro da classe Random que faz essa parte ou é preciso colocar um pouco de lógica pra isso.

import java.util.Random;

public class ExerArray {
	public static void main (String[] args){
		Random gera = new Random ();
		int[][] numAle = new int [4][4];
		int maiorNum = 0;
		int linha = 0;
		int coluna = 0;
		for (int i = 0 ; i < numAle.length ; i++){
			for (int j = 0 ; j<numAle[i].length ; j++){
				numAle[i][j] = gera.nextInt(41)+10;
				System.out.print (numAle[i][j] + " ");
				if (numAle[i][j] > maiorNum){
					maiorNum = numAle[i][j];
					linha = i;
					coluna = j;
				}
			}
			System.out.println ("");
		}
		linha++;
		coluna++;
		System.out.println ("");
		System.out.println ("O maior numero é : " + maiorNum + " na linha " + linha  + " e na coluna " + coluna);
	}
}

5 Respostas

sergiotaborda

Por definição uma sequencia aleatória de numeros pode ter repetições.
Se a sequencia não tem repetições ela não é aleatória.

Vc pode usar Random para criar uma sequencia aleatória e incluir uma logica para não ter repetições.
Isso é simples de fazer. Crie uma classe e use um Set

T

Se você precisa embaralhar números (cartas do baralho), ou sortear apenas uns poucos números (números da Sena), então você pode usar Collections.shuffle. Um exemplo bobo:

public void imprimirBaralho () {
    List<Integer> cartas = new ArrayList<Integer>();
    for (int i = 1; i <= 52; ++i) {
        cartas.add (i);
    }
    Collections.shuffle (cartas);
    // Imprimindo as primeiras 4 cartas que foram embaralhadas...
    for (int i = 0; i < 4; ++i) {
        System.out.println (cartas.get (i));
    }
}
Dieval_Guizelini

Acho que isso pode te ajudar:

http://demoniodemaxwell.wordpress.com/2007/11/23/geracao-de-numeros-aleatorios/

Eu não tenho certeza, mas a classe SecureRandom acho que foi criada para suprimir essa necessidade também:

http://java.sun.com/j2se/1.4.2/docs/api/java/security/SecureRandom.html

fw

Ps: Apesar da solução do thigol ser mais simples.

P

thingol:
Se você precisa embaralhar números (cartas do baralho), ou sortear apenas uns poucos números (números da Sena), então você pode usar Collections.shuffle. Um exemplo bobo:

thingol,

sua dica me ajudou. Precisei embaralhar um lista do tipo “java.util.LinkedList” e com Collections.shuffle foi muito fácil.

Obrigado.

F

Um HashSet é uma boa opção

int valor=0;
        HashSet<Integer> has_lista = new HashSet<Integer>();   
    for (int i = 1; i < 1000; ++i) {   
         valor=(int)(Math.random()*1000);
        has_lista.add (valor);   
    }

o HashSet não aceita repetições

Criado 3 de março de 2008
Ultima resposta 10 de abr. de 2008
Respostas 5
Participantes 6