4
respostas

Dúvidas

Boa noite, alguém saberia me explicar o porque quando peço para imprimir o vetor na posição 2 está saindo assim: Pessoa@15db9742 ? Outra pergunta: Como posso adicionar os animais também dentro desse vetor de membros da família? Última pergunta: Como posso pedir para imprimir todo o array de vez com os valores?

Obrigada!

class Casa {

    String nome;
    Pessoa membrosFamilia[];
    Animal membrosPets;

    void adiciona(Pessoa x) {
        for(int i=0; i<membrosFamilia.length; i++) {
            if(membrosFamilia[i] == null) {
                this.membrosFamilia[i] = x;
            }else{
                continue;
            }

        }
    }

}


class Pessoa {
    String nome;
    int idade;

    void mostra(){
        System.out.println("Nome da pessoa: " + this.nome);
        System.out.println("Idade da pessoa: " + this.idade);
    }
}


class Animal {
    String nome;
    int idade;


    void mostra() {
        System.out.println("Nome do caozinho: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Idade Humana:  " + this.idadeHumana());
    }

    int idadeHumana() {
        return this.idade = this.idade*7;
    }

}


class Principal {
    public static void main(String[] args) {

        Casa c1 = new Casa();
        c1.nome = "Moreira Lima";
        c1.membrosFamilia = new Pessoa[7];
        c1.membrosPets = new Animal();



        Pessoa p1 = new Pessoa(); // membros da família (pessoas)
        p1.nome="Taina";
        p1.idade=28;
        c1.adiciona(p1);

        Pessoa p2 = new Pessoa();
        p2.nome="Deborah";
        p2.idade=57;
        c1.adiciona(p2);

        Pessoa p3 = new Pessoa();
        p3.nome="Sergio";
        p3.idade=58;
        c1.adiciona(p3);

        Pessoa p4 = new Pessoa();
        p4.nome="Geisa";
        p4.idade=30;
        c1.adiciona(p4);



        Animal a1 = new Animal();    //animais
        a1.nome="Sofia";
        a1.idade=7;

        Animal a2 = new Animal();
        a2.nome="Boris";
        a2.idade=11;


        System.out.println(c1.membrosFamilia[2]);


    }
}
4 respostas

ta imprimindo o endereço da memoria, primeiro porque voce só ta chamando o endereço não o atributo do objeto.. Outra coisa o metodo adiciona não está de maneira correta você só está adicionando um objeto devido ao for.. e se você quiser adicionar um pet em um membro da familia você poderia criar uma classe mais abstrata pra utilizar nisso, enfim.. espero ter ajudado..

Olá Taina! Então, vou respoder cada pergunta sua, vamos la!

1 - Porque quando peço para imprimir o vetor na posição 2 está saindo assim: Pessoa@15db9742 ?

R: Isto esta acontecendo porque o método System.out.println() e deve receber como parâmetro uma String. No entanto, quando passamos um Objeto como parâmetro, automaticamente o Compilador chama um método presente na classe Object do Java, o método toString(). Como toda classe me java herda da classe Object, então toda classe possui esse método. Por padrão, esse método devolve uma String que corresponde ao endereço do Objeto na memória. Logo o que é impresso (Pessoa@15db9742) é o endereço do Objeto na memória. Para solucionar isso, basta você sobrescrever o método na sua classe fazendo ele retornar uma String que você deseje. Exemplo:

@Override
    public String toString() {
        return nome;
    }

Desta forma, o método quando for chamado, retornará o nome da pessoa e será impresso o nome da mesma.

2 - Como posso adicionar os animais também dentro desse vetor de membros da família?

R: Como o João disse, você pode criar uma classe abstrata e fazer suas classes Pessoa e Animal herdarem dessa classe. Veja que suas classes Pessoa e Animal tem atributos em comum, então você pode agrupar tudo isso em uma Classe e fazer suas classes herdarem desta e ao invés de sua array ser de Pessoa, ela passa a ser dessa Classe abstrata. Por você estar ainda no curso básico de java, você ainda não viu isto, mas com o decorrer do curso você verá mais sobre isso. Porém vou deixar como exemplo:

public abstract class Membro {
    String nome;
    int idade;

    public abstract void mostra();
}
public class Pessoa extends Membro{

    @Override
    public void mostra() {
        System.out.println("Nome da pessoa: " + this.nome);
        System.out.println("Idade da pessoa: " + this.idade);
    }

}
public class Animal extends Membro{

    @Override
    public void mostra() {
        System.out.println("Nome do caozinho: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Idade Humana:  " + this.idadeHumana());
    }

    int idadeHumana() {
        return this.idade = this.idade*7;
    }

}
class Casa {

    String nome;
    Membro membrosFamilia[];
    Animal membrosPets;

    void adiciona(Membro x) {
        for(int i=0; i<membrosFamilia.length; i++) {
            if(membrosFamilia[i] == null) {
                this.membrosFamilia[i] = x;
                    break;
            }else{
                continue;
            }

        }
    }

}

3 - Como posso pedir para imprimir todo o array de vez com os valores?

R: Basta você usar o System.out,println(), porém como parâmetro você passa chama o método estático da classe Arrays. Ficando da seguinte forma:

System.out.println(Arrays.toString(c1.membrosFamilia));

Não se preocupe que posteriormente no curso você também verá sobre isso.

Enfim, espero ter ajudado! Bons Estudos!

Primeiramente obrigada pela ajuda para o João e o Romário. Romário, entendi bem direitinho, você explicou super bem. Agora so queria tirar umas outras pequenas dúvidas.

No caso da 1ª solução eu fiz e deu certinho, mas tenho a duvida em onde colocar o codigo. Eu coloquei primeiramente na classe Casa e nao deu, dai depois eu coloquei na classe Pessoa e deu. Então eu tenho que colocar aquele codigo sempre na classe que o vetor que eu criei pertence? No caso o vetor é do tipo Pessoa então eu coloco o código @override na classe Pessoa, por isso?

Na 3ª solução eu coloquei o System.out.println(Arrays.toString(c1.membrosFamilia)); mas deu esse erro no final:

teste_seulement.java:95: error: cannot find symbol System.out.println(Arrays.toString(c1.membrosFamilia)); ^ symbol: variable Arrays location: class Principal 1 error

obrigada!

Isso mesmo Taina! Veja que quem sera impresso é a Pessoa. Então o codigo deve estar nessa classe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software