Fala galera,
O meu problema é o seguinte:
Tenho 3 números, e quero fazer um sorteio entre esses 3 números.
Conheço o metodo Math.random(), mas o mesmo só faz o sorteio de numeros sequenciais.
Se eu tiver por exemplo, 10 - 5 - 11 - 22. Como faço para fazer um sorteio com esses 4 números?
Valeu galera!!!
[quote=luciano87]Fala galera,
O meu problema é o seguinte:
Tenho 3 números, e quero fazer um sorteio entre esses 3 números.
Conheço o metodo Math.random(), mas o mesmo só faz o sorteio de numeros sequenciais.
Se eu tiver por exemplo, 10 - 5 - 11 - 22. Como faço para fazer um sorteio com esses 4 números?
Valeu galera!!![/quote]
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(5);
list.add(11);
list.add(12);
Collections.suffle(list);
Integer numeroSorteado = list.get(0);
Collections.suffle(list);
Integer outroNumeroSorteado = list.get(0);
ou
class Elector<T> {
List<T> elements;
public Elector (T ... elements){
this.elements = new ArrayList(Arrays.asList(elements));
}
public T draw(){
Collections.suffle(elements);
return list.get(0);
}
}
//uso
Elector<Integer> elector = Elector<Integer>(11,5,12,22);
Integer numeroSorteado = elector.draw();
Integer outroNumeroSorteado = elector.draw();
Se os números não são sequenciais, ponha os números num vetor e sorteie os índices.
[code]int numeros[] = new int[] {10, 5, 11, 22};
Random random = new Random();
int ind = random.nextInt(numeros.length);
System.out.println(“O número sorteado foi:” + numeros[ind]):
ind = random.nextInt(numeros.length);
System.out.println(“O número sorteado foi:” + numeros[ind]):
ind = random.nextInt(numeros.length);
System.out.println(“O número sorteado foi:” + numeros[ind]):
ind = random.nextInt(numeros.length);
System.out.println(“O número sorteado foi:” + numeros[ind]):
[/code]
Acho que o método shuffle (que embaralha a lista inteira) é meio ineficiente se você só quer sortear um número.
[quote=ViniGodoy]Se os números são sequenciais, ponha os números fora de sequencia num vetor e sorteie os índices.
[/quote]
Mas para por fora da sequencia já tem que fazer suffle. Claro que pode fazer na mão , mas no caso geral, teria.
Tomando a sua dica de eficiencia
[code] class Elector {
T[] elements;
Random random = new Random();
public Elector (T ... elements){
this.elements = elements;
}
// coloca fora de ordem sempre que necessário
public void suffle(){
List<T> list = new ArrayList<T>(Arrays.asList(elements));
Collections.suffle(list);
list.toArray(elements);
}
public T draw(){
return elements[random.nextInt(elements.length)];
}
} [/code]
Assim se o programador já sabe que estão fora de ordem, não precisa de invocar shuffle. Em caso de duvida pode invocar shuffle.