Salve rapaziada,
Estou fazendo um programinha que faz sorteio por nomes. Eis o código:
[code]package br.com.teste;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Sorteio {
public String sorteia (){
List<String> lista = new ArrayList<String>() ;
lista.add ("Maria") ;
lista.add ("Pedro") ;
lista.add ("João") ;
lista.add ("Francisco") ;
lista.add ("Luiza") ;
lista.add ("Maristela") ;
lista.add ("Anderson") ;
lista.add ("Helena") ;
lista.add ("Patricia") ;
lista.add ("Daniele") ;
Collections.shuffle(lista) ;
// pega qualquer indice.
return lista.get((int)Math.random() * lista.size());
}
public static void main(String []args){
Sorteio sorteio = new Sorteio();
for(int i = 0; i<3; i++){
System.out.println(sorteio.sorteia());
}
}
}
[/code]
Só que estou sem saber como faço para imprimir uma lista de 3 pessoas sem repetição a cada vez que eu for executar o código. Por exemplo:
Pedro
Luiza
Maria
E assim vai, se alguém puder me ajudar com uma dica agradeço.
Valew
Coloque os nomes sorteados num Set até dar 3 elementos.
Tipo o List<String> lista = new ArrayList<String>() ;
vira Set<String> lista = new HashSet<String>();
depois como faço para embraralhar novamente com o Set o Collections.shuffle embaralhava. E o get eu pegava o sorteado. Com o Set como ficaria ?
List<String> lista = new ArrayList<String>();
lista.add("Maria");
lista.add("Pedro");
lista.add("João");
lista.add("Francisco");
lista.add("Luiza");
lista.add("Maristela");
lista.add("Anderson");
lista.add("Helena");
lista.add("Patricia");
lista.add("Daniele");
Collections.shuffle(lista);
for (int i = 0; i < 3; i++) {
int escolha = (int) Math.random() * lista.size();
System.out.println(lista.get(escolha));
lista.remove(escolha);
}
Valeu pela força, ficou assim o código.
[code]package br.com.teste;
import java.util.ArrayList;
import java.util.Collections;
import java.util.*;
public class Sorteio {
public static String sorteia (){
List<String> lista = new ArrayList<String>();
lista.add ("Maria") ;
lista.add ("Pedro") ;
lista.add ("João") ;
lista.add ("Francisco") ;
lista.add ("Luiza") ;
lista.add ("Maristela") ;
lista.add ("Anderson") ;
lista.add ("Helena") ;
lista.add ("Patricia") ;
lista.add ("Daniele") ;
Collections.shuffle(lista) ;
// pega qualquer indice.
return lista.get((int)Math.random() * lista.size());
}
public static void main(String []args){
Set sorteados = new HashSet();
String aux = "";
for(int i = 0; i<3; i++){
boolean novo = false;
while (!novo) {
aux = sorteia();
if (!sorteados.contains(aux)) {
System.out.println(aux);
novo = true;
sorteados.add(aux);
}
}
}
}
}
[/code]
[]'s
pmlm
#6
Se já fazes o shuffle, para que o Random?
Fazendo o shuffle e pegando os três primeiros da lista, tens sempre três nomes diferentes.
[quote=pmlm]Se já fazes o shuffle, para que o Random?
Fazendo o shuffle e pegando os três primeiros da lista, tens sempre três nomes diferentes.
[/quote]
Poxa vida, ia falar exatamente isso eheheh.
o shuffle já vai randomizar sua lista, basta pegar as 3 primeiras posições.