Exercicio com array de objetos

Implementar as classes a seguir:
a. Classe: Pessoa
i. Atributos da classe Pessoa:

  1. nome(string) -> não pode receber um valor nulo ou
    string vazia;
  2. idade(inteiro) -> não pode receber um valor menor
    que 0;
  3. filhos(Array de objetos do tipo Pessoa) -> não pode
    manter um array nulo.
    ii. Implementar apenas um construtor recebendo valores
    para os atributos nome e idade da classe Pessoa. OBS.:
    este construtor deverá inicializar o atributo filhos com um
    array de tamanho 3.
    iii. Utilizar a técnica de encapsulamento e implementar métodos get e set para todos os
    atributos (ver observação abaixo).
    iv. OBS.: Não implementar o método set para o atributo
    filhos. O atributo filhos só será manipulado pelo método
    cadastrarFilho da classe Pessoa detalhado a seguir.
    v. O método booelan cadastrarFilho(Pessoa filho) insere um
    objeto do tipo Pessoa no array de filhos da Pessoa. O
    método retorna verdadeiro se o filho foi cadastrado com
    sucesso e falso quando o array de filhos estiver cheio ou
    se o objeto filho passado como parâmetro é nulo.
    vi. Na classe Pessoa, implementar o método String toString()
    que retorna uma representação string de um objeto da
    classe Pessoa no seguinte formato:
    OBS.: Para simplificar não é necessário imprimir todos os
    dados dos filhos dos filhos (se houverem), apenas o nome
    de cada um dos filhos.
    b. Implementar ua aplicação chamada AplicacaoPessoa que
    instancia um objeto do tipo Pessoa, a partir do nome e da idade
    informados pelo usuário. Em seguida, o programa deve oferecer
    um menu para o usuário com as seguintes opções:
    i. Cadastrar filho. O usuário deverá informar os dados do
    filho a ser cadastrado;
    ii. Imprimir dados da Pessoa. Nesta opção, o programa deve
    imprimir os valores de todos os atributos do objeto Pessoa
    instanciado fazendo uso do método toString
    implementado.

alguém poderia me ajudar nesse item v? como adiciono objetos no array?

meuArray[posicaoDesejada] = objetoQueQueroAdicionar;
Pessoa filhos = new Pessoa[3];
filhos[0] = new Pessoa();

mas como eu faço isso no metodo?

mas como ficaria isso no metodo lá?

Não temos o seu código para saber, e também não é costume da comunidade resolver exercícios. Mas de forma teórica:

Você tem um atributo do tipo Pessoa chamado filhos. Esse atributo é um vetor e possui tamanho três.

No método, você valida se é possível adicionar algo (a regra que se aplica é: qntFilhos < 3). Se sim, você instancia um objeto pessoa numa posição disponível:

[]'s

meu metodo ficou assim, mas está errado :frowning:

public boolean cadastrarFilho(Pessoa [] filhos) {
	if(filhos<=3) {
	Pessoa filhos = new Pessoa[3];
	filhos[0] = new Pessoa();
	
	return true;
	}
	
	else {
		return false;
	}

}

nesse caso não seria necessário percorrer o Array?

Posta o fonte da classe Pessoa, já criou os atributos nome, idade e filhos?

1 curtida

Toda vez que você chamar o método cadastrarFilho, ele vai criar um array diferente. Você deveria usar o atributo que recebe como parâmetro.

Uma dica: Não adianta copiar e colar o código que você recebe daqui: você precisa entender para fazer.

aqui a classe Pessoa

public class Pessoa {
private String nome;
private int idade;
Pessoa[]filhos;


public Pessoa(String nome, int idade) {
	super();
	this.nome = nome;
	this.idade = idade;
	
	if(this.nome == null || this.nome == "") {
		System.out.println("nome inválido");
}
if(this.idade<0) {
	System.out.println("idade inválida");
}
if(this.filhos == null) {
	System.out.println("array nulo");
}

	
	Pessoa[] filhos = new Pessoa[3];
}




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[] getFilhos() {
	return filhos;
}

}

sim eu sei, eu não quero simplesmente copiar o código, quero entender a logica também. olha depois de muito quebrar a cabeça eu cheguei a esse código, não sei se está certo.

public boolean cadastrarFilho(Pessoa filhos[]) {
	if(filhos.length <= 3) {
	for(int i = 0; i<filhos.length; i++) {
		System.out.println("digite o seu nome: ");
		nome = in.nextLine();
		System.out.println("digite a sua idade: ");
		idade = in.nextInt();
		
		} 
		return true;
	} 
		return false;
}

agora não to conseguindo imprimir pelo metodo toString(); no item vi. :frowning:

O enunciado diz que esse método deveria receber um filho como parâmetro, mas você está passando um array.

O método booelan cadastrarFilho(Pessoa filho) insere um
objeto do tipo Pessoa no array de filhos da Pessoa.

então o resto do metodo estaria errado também, certo?

você poderia me dar um exemplo para eu saber como fazer esse metodo?

Mas já está no próprio enunciado:

public boolean cadastrarFilho(Pessoa filho) {
    // aqui você adiciona o filho recebido por parâmetro ao seu array
}
Pessoa filhos = new Pessoa[3];
filhos[0] = new Pessoa();
filhos[1] = new Pessoa();

é assim, certo?

Não

Sua classe Pessoa possui um atributo filhos.
No método cadastrarFilho você vai inserir o filho recebido por parâmetro na primeira posição vazia do seu array filhos.

1 curtida

desculpa mas eu continuo não sabendo como fazer, teria algum material pra me recomendar sobre esse assunto?