Você precisa anotar que números já saíram, para que você tente novamente pegar um novo número. É igual a jogar dados; volta e meia sai um número que já saiu. Então você precisa jogar o dado de novo, até que apareça um número que não apareceu antes.
public static void main(String[] args) {
Random rand = new Random();
ArrayList<Integer> list = new ArrayList<Integer>();
int quantidadeDeNumeros = 10;
for (int count = 0; i < quantidadeDeNumeros;i++) {
int numeroAuxiliar = rand.nextInt(10); // ou rand.nextInt();
// enquanto o número contiver na lista
// é lido outro número
while (list.contains(numeroAuxiliar)) {
numeroAuxiliar = rand.nextInt(); // ou rand.nextInt();
}
list.add(numeroAuxiliar);
}
System.out.println(list);
}
Vamos lá a ver se aprendem a usar OO para este problema.
Não use Random.
Não repetir = usar Set
Escolher números aletatoriamente num intervalo discreto ( de numeros inteiros) é a mesma coisa que sortear esses mesmos numeros de um conjunto.
Sortear numero de um conjunto faz -se assim:
public <T> Collection<T> sortear(Set<T> conjuntoDeTodosOsElementosPossiveis , int quantosSeraoSorteados){
// se o conjunto não tem elementos suficientes dá erro
if( conjuntoDeTodosOsElementosPossiveis.size() < quantosSeraoSorteados){
throw new IllegalArgumentException("Não ha " + quantosSeraoSorteados + " elementos no conjunto");
}
// o método suffle altera apenas listas e modifica o objeto passado. Por isso copiamos tudo para uma lista primeiro
List<T> conjunto = new ArrayList<T>(conjuntoDeTodosOsElementosPossiveis ); // isto faz a copia
// sorteia
Collections.shuffle(conjunto); // shuffle significa "embaralhar'
Collection<T> resultado = new ArrayList<T>(quantosSeraoSorteados);
for(int i = 0; i < quantosSeraoSorteados; i++){
resultado.add(conjunto.get(0)); // sempre pega o primeiro. à medida que são removidos ha mesmos elementos
}
return resultado;
}
Sortear de 4 numeros de 1 a 20
//cria o conjunto de numeros
Set<Integer> numeros = new Hashset<Integer>();
for( int i = 1 ; i <= 20 ;i++){
numeros.add(i);
}
// usa o método
Collection<Integer> sorteados = sortear(numeros, 4);
Resumindo um pouco o que o sergiotaborda disse, se vc quer sortear 4 números aleatorios de 1 a 20, pode criar uma lista, inserir os elementos 1, 2, 3, … , 19, 20 nessa lista e depois embaralhá-la.
[code]public static void main(String[] args) {
List<Integer> lstNumeros = new ArrayList<Integer>();
for (int i = 0; i < 20; i++) {
lstNumeros.add(new Integer(i + 1));
}
Collections.shuffle(lstNumeros); // Embaralha os números
System.out.println("Numeros escolhidos:");
for(int i = 0; i < 4; i++){
System.out.print(lstNumeros.get(i) + " ");
}
}[/code]