Armazenando em ArrayList e imprimindo

2 respostas
B

O lance é que tenho a classe "Pessoa" e a classe "Familia" para armazenar as pessoas de uma determinada familia, aqui vão elas:

Classe pessoa....
public class Pessoa {

    private String nome;
    private int idade;
    private Boolean mae;
    private Boolean pai;

    public Pessoa(String nome, int idade, Boolean pai, Boolean mae) {
        this.nome = nome;
        this.idade = idade;
        this.mae = mae;
        this.pai = pai;
    }

    public String getNome() {
        return nome;
    }

    public int getIdade() {
        return idade;
    }
    public Boolean getMae() {
        return mae;
    }
    public Boolean getPai() {
        return pai;
    }
    
}

Classe Familia...

public class Familia {

    private String sobrenome;
    private ArrayList<Pessoa> membros = new ArrayList<Pessoa>();
    private Pessoa maisvelho = new Pessoa("", 0, false, false);
    private boolean jatempai = false;
    private boolean jatemmae = false;

    public Familia(String sobrenome) {
        this.sobrenome = sobrenome;

    }

    public void incluirPessoa(Pessoa p) {
        if (p.getMae() && p.getPai() == true) {
            System.out.println("NAO PODE SER PAI E MAE");
            return;
        }
        if (p.getMae() == true) {
            if (jatemmae == false) {
                jatemmae = true;
            //   System.out.println("ADD UMA MAE");

            } else {
                return;
            }
        }
        if (p.getPai() == true) {
            if (jatempai == false) {
                jatempai = true;
//                System.out.println("ADD UM PAI");

            } else {
                return;
            }
        }
        membros.add(p);
    }
   
    public ArrayList<Pessoa> getMembros() {
        return membros;
    }

    public String getSobrenome() {
        return sobrenome;
    }

    public Pessoa getPessoaMaiorIdade() {
        Pessoa pvelho = new Pessoa("", 0, false, false);
        for (int x = 0; x < membros.size(); x++) {
            if (membros.get(x).getIdade() > pvelho.getIdade()) {
                pvelho = membros.get(x);
            }
        }
        return pvelho;
    }
    
    public Pessoa getMembroMaisVelho() {
        int idade = 0;
        Pessoa p = null;
        for(int i = 0; i< membros.size(); i++) {
            p = membros.get(i);
            if (p.getIdade() > idade) {
                idade = p.getIdade();
                System.out.println ("achou " +p);
            }
        }
        return p;
    }

    public void imprimirPessoasdaFamilia() {
        for (int x = 0; x < membros.size(); x++) {
            System.out.println(membros.get(x).getNome());
        }
        //return membros.get(indice).getNome() + membros.get(indice).getIdade();
    }
}

Beleza, oque eu faço eh armazenar pessoas dentro de um Array do tipo Pessoa aí tenho esse código do main:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        GrupoFamilia gf = new GrupoFamilia();

        Familia f1 = new Familia("Maciel");
        Pessoa p1 = new Pessoa("Joao", 15, true, false);
        f1.incluirPessoa(p1);
        p1 = new Pessoa("Tiburcio", 24, false, false);
        f1.incluirPessoa(p1);
        p1 = new Pessoa("Maria", 18, false, true);
        f1.incluirPessoa(p1);
        gf.incluirFamilia(f1);
        


        f1 = new Familia("Bardoso");
        p1 = new Pessoa("Pedro", 5, false, false);
        f1.incluirPessoa(p1);
        p1 = new Pessoa("Joaquina", 35, false, true);
        f1.incluirPessoa(p1);
        p1 = new Pessoa("Paula", 8, false, false);
        f1.incluirPessoa(p1);
        gf.incluirFamilia(f1);
        
        gf.imprimirFamilias();

como vou uasr uma interface gráfica nao tenho como que ficar mudando o nome do objeto do tipo familia ow pessoa, aí eu fiz tudo em f1 e p1, logo preciso de alguem pra armazenar essas familias, nao é? Aí criei a classe grupofamilia:

public class GrupoFamilia {

    private ArrayList<Familia> familias = new ArrayList<Familia>();
   

    public void incluirFamilia(Familia f) {
        familias.add(f);
    }

    public ArrayList<Familia> getFamilias() {
        return familias;

    }

    public  void imprimirFamilias() {
        for (int x = 0; x < familias.size(); x++) {
            System.out.println(familias.get(x).getSobrenome());
        }
        
    }

    public Familia getMaisVelho() {
        Familia fmaisvelho = new Familia("");
        for (int x = 0; x < familias.size(); x++) {
            if (familias.get(x).getPessoaMaiorIdade().getIdade() > fmaisvelho.getPessoaMaiorIdade().getIdade()) {
                fmaisvelho = familias.get(x);
            }
        }
        return fmaisvelho;
    }
}

Tem uns métodos perdidos ae pra ver quem é o mais velho, mas agora isso é irrelevante. O lance é que quando mando imprimir as familias, ele imprime as 2 que cadastrei, mas quando vou imprimir os membros, não ta rolando. Como fica o lance de imprimir os membros? Tentei uasr o metodo de imprimir pessoas que tá dentro do "familia" mas mesmo assim ele só chama as 3 pessoas da segunad familia, comose tivesse perdido as pessoas da primeira. oq to fazendo de errado?

Obrigado

Mal o post gigante :D

2 Respostas

Andre_Fonseca

oi

vou colocar um jeito aqui e depois você melhora o que achar que precisa

trabalha com listas e listas de listas, talvez confunda um pouco, se precisar de mais validação você coloca blz??

primeiro você cria a sua classe Pessoa assim (não precisa de família e nem de grupofamilia)

sobrescrevi o toString para faciliar na hora de chamar o System.out.println()

public class Pessoa {

	private String nome;
	private String sobrenome;
	private int idade;  
	private Pessoa pai;
	private Pessoa mae;	
	
	public Pessoa(String nome, String sobrenome, int idade, Pessoa mae,
			Pessoa pai) {
		
		super();
		this.idade = idade;
		this.mae = mae;
		this.nome = nome;
		this.pai = pai;
		this.sobrenome = sobrenome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public Pessoa getPai() {
		return pai;
	}

	public void setPai(Pessoa pai) {
		this.pai = pai;
	}

	public Pessoa getMae() {
		return mae;
	}

	public void setMae(Pessoa mae) {
		this.mae = mae;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
	
	@Override
	public String toString() {
		return nome+":"+sobrenome+":"+idade;
	}
	
}

ai para testar você faria algo assim

public class Main {

	private static final String FAMILIA_BARDOSO = "Bardoso";
	
	private static List<List><Pessoa>> todasFamiliasList;
	
	public static void main(String[] args) {

		todasFamiliasList = new ArrayList<List><Pessoa>>();
		
		List<Pessoa> familiaBardoso = new ArrayList<Pessoa>();
		
		// isso quer dizer que o patriarca da familia nao tem pai e mae
		Pessoa paiBardoso = new Pessoa("Joaquim",FAMILIA_BARDOSO,45,null,null);
		Pessoa maeBardoso = new Pessoa("Maria",FAMILIA_BARDOSO,43,null,null);
		Pessoa pedroBardoso = new Pessoa("Pedro","Bardoso",22,paiBardoso,maeBardoso);
		
                // adiciona os membros da familia bardoso
		familiaBardoso.add(paiBardoso);
		familiaBardoso.add(maeBardoso);
		familiaBardoso.add(pedroBardoso);
		
                // adiciona a familia bardoso na lista de familias
		todasFamiliasList.add(familiaBardoso);
		
                // imprime pessoa
		imprimirPessoa(paiBardoso);
                // imprime familia bardoso
		imprimirFamilia(FAMILIA_BARDOSO);		
                // imprime todas familias
		imprimirTodasFamilias();  
	}

	private static void imprimirPessoa(Pessoa paiBardoso) {
		System.out.println("imprimindo pessoa ...");
		System.out.println(paiBardoso);		
	}

	private static void imprimirFamilia(String familiaBardoso) {
		System.out.println("imprimindo familia "+familiaBardoso+" ...");
		for (List<Pessoa> familia: todasFamiliasList) {
			for (Pessoa pessoa : familia) {
				if (pessoa.getSobrenome().equalsIgnoreCase(familiaBardoso)) {
					System.out.println(pessoa);
				}
			}
		}
	}
	
	private static void imprimirTodasFamilias() {
		System.out.println("imprimindo todas familias ...");
		System.out.println(todasFamiliasList);
	}	
}
B

Eu sei que da pra fazer assim, mas eu quero trabalhar mais com o conceito Orientação a Objeto e as relações entre classe. E se pensar como OO acho que a Classe Familia armazena as Familias e Pessoa as Pessoas, mas valeu ae
:smiley:

Criado 2 de outubro de 2008
Ultima resposta 3 de out. de 2008
Respostas 2
Participantes 2