Como gerar 3 números aleatórios e que nunca se repitam
Números aleatórios
12 Respostas
Como gerar 3 números aleatórios e que nunca se repitamCara, posso não estar ajudando, mas podes tentar usar a classe Random, e para que não se repitam podes por numa lista por exemplo, e antes de adicionar verifica se ja esta lá...
LinkedList lista = new LinkedList();
int x = generator.nextInt(10);
if (!lista.contais(x))
{
lista.add(x);
}
Se quiser dar uma olhada aqui pra ver como funciona o Random, quem sabe não descobres o que precisas e até mais algumas coisas... :)
[url]http://java.sun.com/j2se/1.5.0/docs/api/java/util/Random.html[/url]
Pensando melhor, se são só 3 numeros, podes gerar 2 com o random e comparar pra ver se são iguais, se não forem gera o terceiro e compara denovo, mas se for mais que isso ja começa a ficar “feio” fazer assim…
Espero que te ajude…
Você poderia utilizar a classe Random e armazenar os valores em três variávies. Daí, sempre que for gerando os valores, checa se eles são repetidos. Se sim, basta gerar outro número e comparar novamente até que nenhum se repita…
[]'s.
Assim:
private static final Random RANDOM = new Random();
public static void main(String[] args) {
// valor máximo para sortear
int maximo = 50;
// onde serão armazenados os valores (não se repetem)
HashSet<Integer> numerosSorteados = new HashSet<Integer>();
// enquanto houverem menos do que 3 elementos, adicionar mais um
while (numerosSorteados.size() < 3) {
numerosSorteados.add(RANDOM.nextInt(maximo));
}
// depois, faz o que for preciso com o vetor
System.out.println(numerosSorteados);
}
Se forem números dentro de um subset, como uma os os 6 números entre os 60 da sena, você pode usar o método Collections.shuffle:
//Criamos a lista dos números possíveis
List<Integer> possibilidades = new ArrayList<Integer>();
for (int = 1; i <= 60; i++) {
possibilidades.add(i);
}
//Embaralhamos a lista
Collections.shuffle(possibilidades);
//Retornamos os 6 primeiros elementos
List<Integer> sorteados = new ArrayList<Integer>();
for (int i = 0; i < 6; i++) {
sorteados.add(possibilidades.get(i));
}
Um exemplo “a lá” megasena:
Set<Integer> numerosSorteados = new TreeSet<Integer>();
while (numerosSorteados.size() < 3) {
Integer numeroSorteado = Double.valueOf((Math.random() * 60) + 1).intValue();
numerosSorteados.add(numeroSorteado);
}
Galera ta usando o Set, mas não sei se o criador do topico sabe, mas o motivo pelo qual estão usando, é que o Set não aceita números repetidos.
Ow to vendo q as respostas estão fluino veja bem, tentei fazer da forma q todos vcs falram, mas o numero se repete tbm, tentei usar o relogio do PC, porém ele gera um numero muito alto, e eu errei são 4 número q não podem se repetir, tem como usar o metodo q usar o relogio do pc q gere entre 0 e 20?
:-o
Ow to vendo q as respostas estão fluino veja bem, tentei fazer da forma q todos vcs falram, mas o numero se repete tbm, tentei usar o relogio do PC, porém ele gera um numero muito alto, e eu errei são 4 número q não podem se repetir, tem como usar o metodo q usar o relogio do pc q gere entre 0 e 20?:-o
//Variável de instância da classe que vai conter todos já sorteados
Set<Integer> numerosJaSorteados = new TreeSet<Integer>();
//Variável local do método que vai conter o sorteio atual
Set<Integer> numerosSorteados = new TreeSet<Integer>();
//Se já alcançou a capacidade máxima não faz nada
if (numerosJaSorteados.size() == 20) {
return;
}
//Enquanto não sortear 4 números
while (numerosSorteados.size() < 4) {
//Realiza o sorteio
Integer numeroSorteado = Double.valueOf(Math.random() * 20).intValue();
//Verifique se já foi sorteado alguma vez
if (!numerosJaSorteados.contains(numeroSorteado) {
numerosSorteados.add(numeroSorteado);
}
}
//Faz o que vc quiser com os número sorteados atuais
//Armazena os números sorteados na variável de instância da classe
numerosJaSorteados.addAll(numerosSorteados);
Do modo acima não vai se repetir enquanto existir a instância da classe. Mas se vc precisar de um mecanismo persistência já teria que utilizar arquivo ou banco de dados.
Flw.
Assim:É só trocar o valor máximo de 50 para 20 e a quantidade de números de 3 para 4.private static final Random RANDOM = new Random(); public static void main(String[] args) { // valor máximo para sortear int maximo = 50; // onde serão armazenados os valores (não se repetem) HashSet<Integer> numerosSorteados = new HashSet<Integer>(); // enquanto houverem menos do que 3 elementos, adicionar mais um while (numerosSorteados.size() < 3) { numerosSorteados.add(RANDOM.nextInt(maximo)); } // depois, faz o que for preciso com o vetor System.out.println(numerosSorteados); }
Se o conjunto for pequeno, por exemplo números da mega sena, você pode também incluir todos 60 números dentro de qualquer coleção, e a cada número retirado, você o elimina da coleção. A implementação é bem simples.
É lógico que o do vinny da certo -.-
import java.util.Collections;
import java.util.List;
public class lalalalala {
public static void main(String[] args) {
List<Integer> possibilidades = new ArrayList<Integer>();
for (int i= 1; i <= 60; i++) {
possibilidades.add(i);
}
//Embaralhamos a lista
Collections.shuffle(possibilidades);
//Retornamos os 6 primeiros elementos
List<Integer> sorteados = new ArrayList<Integer>();
for (int i = 0; i < 6; i++) {
sorteados.add(possibilidades.get(i));
}
System.out.println(sorteados);
}
}