Gostaria de uma ajuda para debugar um código que fiz hoje.
Por alto é uma herança entre a superclasse Mamifero e uma subclasse Macaco. A seguir o código e ao final a dificuldade.
Classe Mamifero
public class Mamifero {
protected int idadeAmamentacao;
protected int idadeVida;
protected String descricaoEspecie;
protected long tamanhoNormal;
public Mamifero () {
}
}
Classe Macaco
public class Macaco extends Mamifero {
private String porte;
public Macaco() {
this.idadeAmamentacao = (Integer.parseInt(Leitura.janelaEntrada("Entre com a idade de amamentação do animal", "Amamentação")));
this.idadeVida = (Integer.parseInt(Leitura.janelaEntrada("Entre com a idade de vida do animal", "Idade")));
this.descricaoEspecie = Leitura.janelaEntrada("Entre com a descrição do animal", "Descrição");
this.tamanhoNormal = (Long.parseLong(Leitura.janelaEntrada("Entre com o tamanho normal do animal", "Tamanho")));
this.setPorte((Leitura.janelaEntrada("Entre com o porte do animal", "Porte")));;
}
public String getPorte() {
return porte;
}
public void setPorte(String porte) {
this.porte = porte;
}
}
Main
import java.util.ArrayList;
public class Principal {
public static void main(String[] args) {
boolean loop = false;
ArrayList<Mamifero> cadastro = new ArrayList<Mamifero>();
System.out.println("Cadastrando macaco");
Macaco macaco = new Macaco();
cadastro.add(macaco);
// AQUI DENTRO INSTANCIAR O OBJETO MACACO NÃO ABRE AS TELAS JOPTIONPANE SÓ ACIMA.
/*
do {
int opcao = Leitura.lerOpcao();
switch (opcao) {
case 1: {
System.out.println("Cadastrando macaco");
Macaco macaco = new Macaco();
cadastro.add(macaco);
loop=false;
}
}
} while (loop==true);
*/
System.out.println(cadastro.get(0).descricaoEspecie);
}
}
Classe Leitura
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Leitura {
public static String janelaEntrada (String mensagem, String titulo) {
String entrada = JOptionPane.showInputDialog(null, mensagem, titulo, JOptionPane.QUESTION_MESSAGE);
return entrada;
}
public static Integer lerInt () {
Scanner ler = new Scanner(System.in);
return ler.nextInt();
}
public static Integer lerOpcao () {
boolean loop = false;
int opcao = 0;
do {
try {
opcao = lerInt();
loop = Validacao.isOpcao(opcao);
} catch (java.util.InputMismatchException ime) {
System.out.println("\nDigite apenas um número !\n");
System.out.print("Entre novamente com a opção : ");
loop = true;
}
} while(loop==true);
return opcao;
}
}
Classe Validação
public class Validacao {
public static boolean isOpcao (int opcao) {
if (opcao==1||opcao==2||opcao==3||opcao==4)
return false;
else {
System.out.println("\nOpcão inválida !\n");
System.out.print("Entre novamente com a opção : ");
return true;
}
}
}
Na classe Principal crio uma instância do objeto macaco e as telas do JOptionPane aparecem solicitando os dados. Ao comentar esse trecho do código e retirar os comentários do trecho com loop do e switch case, a instanciação da classe Macaco exibe as telas do JOptionPane.
Alguém poderia me dar uma luz ?
ps. Na validação existem outras opções de um menu que apresento para cadastrar outros objetos como baleia e elefante mas foquei em macaco pois acredito que quando resolver é só replicar a solução.
Muito obrigado !

