Sorteio de número pré-definidos

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!!!

http://72.5.124.55/j2se/1.4.2/docs/api/java/util/Collections.html#shuffle(java.util.List,%20java.util.Random)

[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.

Ficou legal, Sergio. :slight_smile: