Programa de sorteio por nomes

6 respostas
gabrielmelo

Salve rapaziada,

Estou fazendo um programinha que faz sorteio por nomes. Eis o código:
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());
		}
	}
}

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

6 Respostas

Roger75

Coloque os nomes sorteados num Set até dar 3 elementos.

gabrielmelo

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 ?

ricardosoares

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); }

gabrielmelo
Valeu pela força, ficou assim o código.
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);
				}


			}
		}
	}
}

[]'s

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.

Felagund

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.

Poxa vida, ia falar exatamente isso eheheh.

o shuffle já vai randomizar sua lista, basta pegar as 3 primeiras posições.

Criado 31 de agosto de 2010
Ultima resposta 1 de set. de 2010
Respostas 6
Participantes 5