Sorteio com ArrayList

2 respostas
R

(OBS: meu primeiro post. Não encontrei solução aqui ainda)

A ideia e de criar um "Amigo oculto/secreto" !
Preciso fazer com que aconteça um sorteio a partir de um método .
deve funcionar de modo que nenhum participante fique sem amigo e não se pode repetir nenhum participante.
em seguida devo fazer outro método para visualizar os amigos sorteados.

o problema é que não consigo fazer o sorteio usando ArrayList.

ESTOU TENTANDO ...mas ate agora so consegui exibir um sorteio . alguém pode me ajudar ?

package amigooculto;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import javax.swing.JOptionPane;

public class AmigoOculto 
{
    ArrayList<ListaAmigos> dados = new ArrayList<>();
    ArrayList<ListaAmigos> Sorteio = new ArrayList<>();
    ArrayList<String> AmigosSorteados = new ArrayList<>();
    
    
    public void Cadastro()
    {
        ListaAmigos lista = new ListaAmigos();
	
		lista.setNome(JOptionPane.showInputDialog("Infome o seu nome completo:"));
		lista.setPresente(JOptionPane.showInputDialog("Infome o presente que voce deseja:"));
                
		dados.add(lista);
    }
    
    public void Sorteio()
    {
        Collections.shuffle(dados);
        System.out.println(dados.toString());
        
        
        Random sorteio = new Random();
        
        ListaAmigos lista = new ListaAmigos();
        
        int NumSorteado;
        
        for(int contador = 0; contador < dados.size(); contador++)
        {
            lista.setSorteou(dados.get(contador).getNome());
            NumSorteado = sorteio.nextInt(dados.size());
            AmigosSorteados.add(dados.get(NumSorteado).getNome());
            
            while(AmigosSorteados.contains(dados.get(NumSorteado).getNome()) == true || 
                    lista.getSorteou() == dados.get(NumSorteado).getNome())
            {
                NumSorteado = sorteio.nextInt(dados.size());
            }
            lista.setSorteado(dados.get(NumSorteado).getNome());
		
			Sorteio.add(lista);
        }
    }
    public void Vizualizar()
    {
        for(int contador = 0; contador < Sorteio.size(); contador++)
		{
			System.out.println(Sorteio.get(contador).getSorteou() + " tirou: " + Sorteio.get(contador).getSorteado());
		}
    }
    public void QuantidadeElementos()
    {
        
        int tam = dados.size();
        System.out.println("a lista possui: " + tam + " amigos");
        
    }
    public void reiniciar()
    {
        if (dados.size() > 0){
         
         dados.removeAll(dados);
         
         System.out.println("Todos os amigos foram excluidos");
             
         }
     else{
         System.out.println("Nenhum amigo foi armazenado");
     }
    }
    
    public static void main(String[] args) throws vazio
    {
        AmigoOculto A = new AmigoOculto();
        
        int op = 0;
        
        while(true)
        {
            op = Integer.parseInt(JOptionPane.showInputDialog(null, "MENU:\n\n1. Cadastrao\n2. Sortear\n3. Vizualizar\n4. Quantidade de amigos\n5. Reiniciar \n\nDigite a opção:"));
            
            switch (op)
            {
                case 1:
                    A.Cadastro();
                    String NomeUser = "";
                    NomeUser = JOptionPane.showInputDialog("confirme o seu nome");
                     if(NomeUser.isEmpty() == true)
		{
			throw new vazio();	
		}
                NomeUser = NomeUser.trim();
                    break;
                case 2:
                    A.Sorteio();
                    break;
                case 3:
                    A.Vizualizar();
                    break;
                case 4:
                    A.QuantidadeElementos();
                    break;
                case 5:
                    A.reiniciar();
                    break;
            }
        }
    }
}
A OUTRA CLASSE ESTA AQUI :
package amigooculto;
public class ListaAmigos 
{
	private String Nome;
	private String Presente;
	private String Sorteou;
	private String Sorteado;
	
	public String getNome() 
	{
		return Nome;
	}
	
	public void setNome(String nome) 
	{
		Nome = nome;
	}
	
	public String getPresente() 
	{
		return Presente;
	}
	
	public void setPresente(String presente) 
	{
		Presente = presente;
	}

	public String getSorteou() 
	{
		return Sorteou;
	}

	public void setSorteou(String sorteou) 
	{
		Sorteou  = sorteou;
	}

	public String getSorteado() 
	{
		return Sorteado;
	}

	public void setSorteado(String sorteado) 
	{
		Sorteado = sorteado;
	}
	
	
	
}

2 Respostas

Rodrigo_Sasaki

Olá :slight_smile: Bem vindo ao GUJ!

Só uma dica, quando for postar código use as tags code.

Basicamente é só pegar o que está entre as tags de negrito e trocar o b por code

YoungCaesar

Olá tudo bom?

Achei seu código bem complicado e refiz seu método de vizualizar() e o sorteio(), segue:

public void sorteio()  
    {  
    	Collections.shuffle(dados);
    	int ultimoIndex = dados.size() - 1;
    	
		for (int i = 0; i < dados.size(); i++)
		{
			dados.get(i).setSorteado(dados.get(ultimoIndex).getNome());
			Sorteio.add(dados.get(i));

			ultimoIndex--;
		}
    }
    
    public void vizualizar()  
    {  
        for(int contador = 0; contador < Sorteio.size(); contador++)  
        {  
            System.out.println(Sorteio.get(contador).getNome() + " tirou: " + Sorteio.get(contador).getSorteado());  
        }  
    }

Agora as dicas:

1- Por convenção métodos e variáveis são criados no padrão camelCase começando sempre com letra minúscula, acho bom você ir se acostumando a isso em seus projetos.
2- Eu não mudei a modelagem de suas classes mais aconselho a revisar seus componentes. Por ex.: porque a ListaAmigos (Porque você chamou de lista?) possui Sorteado e Sorteou? não deveria ser somente Sorteado?

No mais é isso, continue praticando e qualquer dúvida posta ai :)

Criado 5 de dezembro de 2013
Ultima resposta 6 de dez. de 2013
Respostas 2
Participantes 3