import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Sorteia {
public String sorteia (){
List<String> lista = new ArrayList<String>() ;
lista.add ("Francisco Lucimar") ;
lista.add ("Gustavo Oliveira") ;
lista.add ("Hermenegildo Coelho") ;
lista.add ("Janaina de Paula") ;
lista.add ("Jasiel Figueiredo") ;
lista.add ("Jhony Weslem") ;
lista.add ("Judson Leal") ;
lista.add ("Larissa Gomes") ;
lista.add ("Maria Érica") ;
lista.add ("Matheus Félix") ;
lista.add ("Melchior Felix") ;
lista.add ("Naisson Gomes") ;
lista.add ("Railda Oliveira") ;
Collections.shuffle(lista) ;
// pega qualquer indice.
return lista.get((int)Math.random() * lista.size());
}
public static void main(String []args){
Sorteia sorteia = new Sorteia();
for(int i = 0; i<1; i++){
System.out.println(sorteia.sorteia());
}
}
}
Desculpem, não sei porque o texto não saiu, mas eu quero ajuda pra mudar meu código, pois este faz repetição no sorteio de nomes. Como devo fazer com que ele realize o sorteio sem repetir um nome sorteado?
Olá
Conheço 3 formas, sendo duas mantendo todos os elementos na lista, vai ser necessário mudar seu código dependendo da forma q escolher, mas para todas elas será necessário q a lista seja atributo da classw:
public class Sorteia {
List<String> lista = new ArrayList<String>() ;
public String sorteia (){
// List<String> lista = new ArrayList<String>() ; movido
lista.add ("Francisco Lucimar") ;
1 - Crie uma segunda lista
List<String> listaSorteio = new ArrayList<String>(lista);
String sorteado = listaSorteio.remove((int) (Math.random() * listaSorteio.size()));
2 - Trocando elementos com um contador de elementos
int qtdElementos = lista.size();
int indice = (int)(Math.random() * qtdElementos);
String sorteado = lista.remove((int) (Math.random() * qtdElementos));
listaSorteio.add(sorteado); // o elemento será adicionado no final
qtdElementos = qtdElementos - 1; // para não pegar os ultimos elementos q ja foram sorteados
3 - Usar o remove ao invés do get, entretanto não mantém os elementos na lista
return lista.remove((int)(Math.random() * lista.size()));
Observação:
(int)Math.random() * lista.size()
e
(int)(Math.random() * lista.size())
terão resultados diferentes
Obrigado por responder diego12, fiz o 3 método que não mantém os elementos na lista, porém ao executar ele continua repetindo elementos que já foram sorteados. Enquanto ao 1 método tenho uma dúvida, é necessário adicionar os elementos na primeira e na segunda lista? E qual é o retorno que eu uso no final?
public class Testes {
private static final List<String> LISTA = new ArrayList<String>();
public static void inicializaLista() {
LISTA.add("Francisco Lucimar");
LISTA.add("Gustavo Oliveira");
LISTA.add("Hermenegildo Coelho");
LISTA.add("Janaina de Paula");
LISTA.add("Jasiel Figueiredo");
LISTA.add("Jhony Weslem");
LISTA.add("Judson Leal");
LISTA.add("Larissa Gomes");
LISTA.add("Maria Érica");
LISTA.add("Matheus Félix");
LISTA.add("Melchior Felix");
LISTA.add("Naisson Gomes");
LISTA.add("Railda Oliveira");
}
public static int randInt(int min, int max) {
return (min + (int)(Math.random() * ((max - min) + 1)));
}
public static String sorteia() {
Collections.shuffle(LISTA);
int index = randInt(0, LISTA.size() - 1);
return LISTA.remove(index);
}
public static void main(String[] args) {
inicializaLista();
int size = LISTA.size();
for(int i = 0; i < size; i++){
System.out.println(sorteia());
}
}
}
Muito bom, deu certo aqui!