[Resolvido]Calculo recursivo de tamanho de arvore genealogica

4 respostas
java
P
public int calculaFamilia() {

if(afilhados.size() > 0) {

for(Aluno afilhado: afilhados) {

return (1 + afilhado.calculaFamilia());

}

}

else {

return 1;

}
}

A ideia é que cada Aluno tenha afilhados(Em um arrayList) e quero saber o tamanho da familia de um aluno.
A função dá erro pedindo para retornar um inteiro. Geralmente isso ocorre quando existe a possibilidade de não entrar em um caso que retorne um inteiro, mas não vejo como nesse caso.
Alguém poderia me ajudar?

4 Respostas

V

@Pedro_Araujo Desculpe-me amigo mas esse método não tem nada de recursiva. Quem deve fornecer os dados é o objeto Aluno que já deve conter os objetos Afilhado então tudo o que você precisa fazer é contar.
{

public class Aluno{
    private List<Afilhado> afilhados;
    //construdores, getters and setters

    public int calcularFamilia(){
       int qtdAfilhados = 0;
       afilhados.stream().forEach(afl -> {
            qtdAfilhados += 1
            for(Afilhado afl2 : afl.getListAfilhado()){
                qtdAfilhados += 1
            }
       });
       return qtdAfilhados;
    }

}

}

P

Mas o lance é que os afilhados tbm tem afilhados. Dessa forma que vc montou, apenas parte da família está sendo contada.

V

Alterei o método, dessa forma ele conta cada afilhado de cada aluno e cada afilhado do afilhado…Agora só falta dizer que o afilhado do afilhado tbm tem afilhados…kkkkkkkkkkkkkkkkkkkk.
Dessa forma vai entrar em um loop infinito.

P

Olha, pior que essa é uma possibilidade kkkk. Fiz umas mudanças e criei um atributo tamanhdoDaFamilia (Que começa com 1, pq vc faz parte da própria família) na Classe Aluno e um get para dar uma volta no problema e agora funciona :slight_smile: . Ficou assim:

private int calculaTamanhoDaFamilia() {
		for(Aluno afilhado: afilhados) {
			tamanhoDaFamilia += afilhado.calculaTamanhoDaFamilia(); 
		}
		return tamanhoDaFamilia;

	    }
	    public int TamanhoDaFamilia() {
		   calculaTamanhoDaFamilia();
		   return tamanhoDaFamilia;
Criado 19 de maio de 2018
Ultima resposta 19 de mai. de 2018
Respostas 4
Participantes 2