Armazenando em ArrayList e imprimindo

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…

[code]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;
}

}[/code]

Classe Familia…

[code]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();
}

}
[/code]

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

[code]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();[/code]

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:

[code]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;
}

}[/code]

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 :smiley:

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()

[code]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;
}

}[/code]

ai para testar você faria algo assim

[code]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);
}	

}[/code]

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: