Ajuda em array de objetos

1 resposta
D

Oi gente estou com dúvidas em array de objetos, preciso de ajuda!
Vou colocar logo a questão aqui e o que eu ja fiz:

<em>Conceitos básicos de Programação OO; Método toString( ): Implementar as classes a</em>

<em>seguir:</em>

<em>a) Classe: Pessoa</em>

<em>i) Atributos da classe Pessoa:</em>

<em>nome (string)  não pode receber um valor nulo ou string vazia;</em>

<em>idade (inteiro)  não pode receber um valor menor que 0;</em>

<em>filhos (Array de objetos do tipo Pessoa)  não pode manter um array nulo.</em>

<em>ii) Implementar apenas um construtor recebendo valores para os atributos nome e idade da</em>

<em>classe Pessoa. OBS: este construtor deverá inicializar o atributo filhos com um array de</em>

<em>tamanho 3.</em>

<em>iii) Utilizar a técnica de encapsulamento apresentada no curso e implementar métodos get e</em>

<em>set para todos os atributos (ver observação abaixo).</em>

<em>iv) OBS: Não implementar o método set para o atributo filhos. O atributo filhos  será</em>

<em>manipulado pelo método cadastrarFilho da classe Pessoa detalhado a seguir.</em>

<em>v) O método boolean cadastrarFilho(Pessoa filho) insere um objeto do tipo Pessoa no</em>

<em>array de filhos da Pessoa. O método retorna verdadeiro se o filho foi cadastrado com</em>

<em>sucesso e falso quando o array de filhos estiver cheio ou se o objeto filho passado como</em>

<em>parâmetro é nulo.</em>

<em>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:</em>

Dados da pessoa:
Nome: xxxxxxxxxxxxxxx
Idade: xx
Filhos: xxxxxxxxxxxxx
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx

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 uma 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.

O QUE EU JÁ FIZ:

public class Pessoa {

private String nome;
private int idade;
private Pessoa[] filhos;
private int contador;

Pessoa(String n, int i) {
	setNome(n);
	setIdade(i);
	filhos = new Pessoa[3];
	contador = 0;
	
}

public void setNome(String n) {
	if(n != null && n.trim().length() > 0) {
		nome = n;
	}
}

public String getNome() {
	return nome;
}

public void setIdade(int i) {
	if(i >= 0) {
		idade = i;
	}
}

public int getIdade() {
	return idade;
}

public Pessoa[] getFilhos() {
	return filhos;
}

public boolean cadastrarFilho(Pessoa filho) {
	if(contador == 3 || filho == null) {
		return false;
	} else {
		filhos[contador] = filho;
		contador++;
		return true;
	}
}

public String toString() {
	String s = "Nome: " + nome +
			"\nIdade: " + idade +
			"\nFilhos: \n";
	for(int i = 0; i < contador; i++) {
		s += filhos[i].toString() + "\n";
	}
	return s;
	
}

import javax.swing.JOptionPane;
public class AplicacaoPessoa {

public static void main(String[] args) {
	
	String op = "";
	
	String nome = JOptionPane.showInputDialog("Digite seu nome:");
	int idade = Integer.parseInt(JOptionPane.showInputDialog("Digite sua idade:"));
	Pessoa p = new Pessoa(nome, idade);
	
	do {
		
		op = JOptionPane.showInputDialog("Digite a opção desejada: \n1. Cadastrar filho \n2. Imprimir dados \n0. Sair");
		
		if(op.equals("1")) {
			String nomeFilho = JOptionPane.showInputDialog("Digite o nome do seu filho:");
			int idadeFilho = Integer.parseInt(JOptionPane.showInputDialog("Digite a idade do seu filho:"));
			Pessoa f = new Pessoa(nomeFilho, idadeFilho);
			boolean status = p.cadastrarFilho(f);
			if(status) {
				JOptionPane.showMessageDialog(null, "Filho cadastrado com sucesso!");
			} else {
				JOptionPane.showMessageDialog(null, "Filho não cadastrado!");
				System.out.println(p.toString());
			}
		} else if (op.equals("2")) {
			System.out.println(p.toString());
		}
		
	}while(!op.equals("0"));

}

}

O problema é que quando vou rodar a aplicação, os filhos que estão implementados no método toString() não aparecem no formato correto. É como se o array não estivesse “funcionando” hehehehe espero que tenham entendido minha dúvida. Já agradeço desde já!

1 Resposta

A

Como a questão disse, não é necessário imprimir todos os dados dos filhos, apenas os nomes, então ao invés de usar toString() nos filhos, utilize apenas getNome().

Criado 17 de novembro de 2017
Ultima resposta 17 de nov. de 2017
Respostas 1
Participantes 2