Sorteio de número pré-definidos

5 respostas
L

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

5 Respostas

cv1

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

sergiotaborda

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

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();
ViniGodoy

Se os números não são sequenciais, ponha os números num vetor e sorteie os índices.

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]):

Acho que o método shuffle (que embaralha a lista inteira) é meio ineficiente se você só quer sortear um número.

sergiotaborda
ViniGodoy:
Se os números são sequenciais, ponha os números fora de sequencia num vetor e sorteie os índices.

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

class Elector<T> {  
   
      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)];  
       }  
 }
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.
ViniGodoy

Ficou legal, Sergio. :slight_smile:

Criado 1 de dezembro de 2007
Ultima resposta 2 de dez. de 2007
Respostas 5
Participantes 4