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:
Conceitos básicos de Programação OO; Método toString( ): Implementar as classes a
seguir:
a) Classe: Pessoa
i) Atributos da classe Pessoa:
nome (string) → não pode receber um valor nulo ou string vazia;
idade (inteiro) → não pode receber um valor menor que 0;
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 apresentada no curso 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 boolean 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:
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á!