Exercicio com array de objetos

23 respostas Resolvido
X

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?

23 Respostas

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

mas como eu faço isso no metodo?

X

mas como ficaria isso no metodo lá?

FearX

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

X

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;
	}

}

X

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

staroski

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

FearX

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.

X

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;
}

}

X

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;
}
X

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

staroski

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.

X

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

X

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

staroski

Mas já está no próprio enunciado:

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

é assim, certo?

staroski

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.

X

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

FearX
Solucao aceita

Vamos lá, @Xablau:

Sua classe Pessoa tem um atributo Pessoa. Uma classe pode ter um atributo dela mesma? Claro que pode, estamos trabalhando com objetos.

public class Pessoa {
 private String nome;
private int idade;
Pessoa[]filhos = new Pessoas[3]; // conforme enunciado, cada pessoa pode ter até três filhos.

//código omitido
}

Nessa classe, você vai ter o método adicionaFilhos. Para adicionar um filho, deve ser passado quem será adicionado. Um filho é um objeto do tipo Pessoa, certo? Então, toda vez que você adiciona um filho, você adiciona uma pessoa.

public boolean cadastrarFilho(Pessoa filhoQueVaiSerAdicionado) {
    for (i=0; i <= filhos.length; i++){ // Percorre todo o vetor "filhos"
        if (filhos[i] == null){ // Se o vetor na posição i for nulo, significa que  espaço
            filhos[i]= filhoQueVaiSerAdicionado; // Ou seja, achou espaço. Aqui, você está adicionando o objeto Pessoa na posição vazia do seu vetor filho
            return true;
        }
    }
return false;
}

Você também pode não passar um parâmetro e criar o filho no método. Vai da regra.

Não dá pra ser mais claro que isso.

X

finalmente entendi, se filhos[i] != null significa que o array está cheio, logo não poderemos cadastrar mais filhos

FearX

Se algum elemento de filho for null, significa que tem espaço naquela posição.

X

entendi, obrigado por esclarecer

Criado 16 de abril de 2019
Ultima resposta 18 de abr. de 2019
Respostas 23
Participantes 3