import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class Main
{
private static final int INCLUIR_A_ESP = 1;
private static final int INCLUIR_A_MESTDOUT = 2;
private static final int LISTAR = 3;
private static final int SAIR = 4;
private static int opcao, i, nRegistro;
public static void main(String[] args)
{
boolean continuar = true;
List<Aluno> lista = new ArrayList<Aluno>();
while(continuar)
{
opcao = Integer.parseInt(JOptionPane.showInputDialog(
"Escolha a opcao:\n1) Cadatrar Aluno Especificação.\n2) Cadastrar Aluno Metrado ou Doutorado.\n3) Listar Alunos.\n4) Sair."));
if(opcao == INCLUIR_A_ESP)
{
Especificacao espec = new Especificacao();
espec.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
espec.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
espec.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
espec.setMonografia(Boolean.parseBoolean(JOptionPane.showInputDialog("Aluno fez a monografia? Sim ou Não?")));
lista.add(espec);
}
else if(opcao == INCLUIR_A_MESTDOUT)
{
MestDout md = new MestDout();
md.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
md.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
md.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
md.setTitulo(JOptionPane.showInputDialog("Digite o titulo da tese:"));
md.setData(JOptionPane.showInputDialog("Digite a data da defesa:"));
md.setConceito(Float.parseFloat(JOptionPane.showInputDialog("Digite o titulo da tese:")));
lista.add(md);
}
else if(opcao == LISTAR)
{
nRegistro = lista.size();
for(i=0;i<nRegistro;i++)
{
String sTexto = "";
sTexto += "\nNome do Aluno: " + lista.get(i).getNome();
sTexto += "\nCódigo da matriculo: " + lista.get(i).getCodMat();
sTexto += "\nNumero de creditos cadastrados: " + lista.get(i).getNumCred();
//QUERO TESTAR VER SE O REGISTRO EM QUESTÃO POSSUI lista.get(i).getTitulo() para ver se é
//aluno do tipo Especificacao ou MestradoDoutorado
//Como proceder?
/*
if()
{
sTexto += "\n";
}
*/
}
}
else if(opcao == SAIR)
{
continuar = false;
}
}
}
}
public class Aluno
{
private String nome;
private int codMat, numCred;
public Aluno()
{
this.nome = "";
this.codMat = 0;
this.numCred = 0;
}
public Aluno(String sNome, int iCodMat, int iNumCred)
{
this.nome = sNome;
this.codMat = iCodMat;
this.numCred = iNumCred;
}
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public int getCodMat()
{
return codMat;
}
public void setCodMat(int codMat)
{
this.codMat = codMat;
}
public int getNumCred()
{
return numCred;
}
public void setNumCred(int numCred)
{
this.numCred = numCred;
}
}
public class Especificacao extends Aluno
{
private boolean monografia;
public Especificacao()
{
super();
monografia = false;
}
public boolean getMonografia()
{
return monografia;
}
public void setMonografia(boolean monografia)
{
this.monografia = monografia;
}
}
public class MestDout extends Aluno
{
private String titulo, data;
private float conceito;
public MestDout()
{
super();
this.titulo = "";
this.data= "";
this.conceito = 0;
}
public String getTitulo()
{
return titulo;
}
public void setTitulo(String titulo)
{
this.titulo = titulo;
}
public String getData()
{
return data;
}
public void setData(String data)
{
this.data = data;
}
public float getConceito()
{
return conceito;
}
public void setConceito(float conceito)
{
this.conceito = conceito;
}
}
Amigo, se entendi o que você quer fazer, você pode utilizar o instanceof
.
Estou no celular, não sei se vou conseguir postar o código no formato mas… segue:
Tente fazer algo assim:
if(lista.get(i) instanceof MestDout) {
System.out.println("Instância de MestOut");
} else {
System.out.println("Instância de outro tipo");
}
Espero ter ajudado!
Abs
na verdade quero isso:
if(lista.get(i).getTitulo())
{
sTexto += "\n";
}
Quero testar se o aluno cadastrado possui este campo, para pode saber de que classe ele é; porem o getTitulo é da subclasse MestDout , e estou conseguindo apenas os metodos da super, queria distinguir se o aluno é da Especificação ou da MestDout vendo se ele possui os campos que é de cada classe.
getTitulo()
getData()
getConceito()
getMonografia()
Todos os objetos que estão na lista tem o método getTitulo() ou só objetos do tipo MestDout?
Só os dos tipo MestDout, certo?
Logo, para que você possa acessar esse método você precisa identificar se o objeto é desse tipo e se for, fazer o cast para MestDout.
E pra saber de qual tipo o objeto é usa-se o instanceof
if(lista.get(i) instanceof MestDout) {
System.out.println(((MestDout) lista.get(i)).getTitulo());
}
mas no if eu quero testar se eu consigo pegar o gettitulo e ver se esta vazio.
exemplo:
if(lista.get(i).getTitulo() != "") //sei que não se compara string assim, é só pra entender minha ideia
{
sTexto += " bla bla bla";
}
if(!lista.get(i).getTitulo().isEmpty()) //sou novato em java acho que seria algo assim
{
sTexto += " bla bla bla";
}
if(lista.get(i) instanceof MestDout) {
if(!((MestDout)lista.get(i)).getTitulo().isEmpty()) {
sTexto += " bla bla bla";
}
}
Funcionou?
não, pede pra mudar o cast pra boolean, e quando muda diz que getTitulo não existe em Aluno.
Primeiramente, inclua na classe Aluno os métodos vazios:
public void setTitulo(String titulo)
{
}
public void setData(String data)
{
}
public void setConceito(float conceito)
{
}
public void setMonografia(boolean monografia)
{
}
Após, modifique o Main:
public class Main {
private static final int INCLUIR_A_ESP = 1;
private static final int INCLUIR_A_MESTDOUT = 2;
private static final int LISTAR = 3;
private static final int SAIR = 4;
private static int opcao, i, nRegistro;
private static Aluno aluno;// modifiquei
public static void main(String[] args)
{
boolean continuar = true;
List<Aluno> lista = new ArrayList<Aluno>();
while(continuar)
{
opcao = Integer.parseInt(JOptionPane.showInputDialog(
"Escolha a opcao:\n1) Cadatrar Aluno Especificação.\n2) Cadastrar Aluno Metrado ou Doutorado.\n3) Listar Alunos.\n4) Sair."));
if(opcao == INCLUIR_A_ESP)
{
aluno = new Especificacao();//perceba o polimorfismo
aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
aluno.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
aluno.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
aluno.setMonografia(Boolean.parseBoolean(JOptionPane.showInputDialog("Aluno fez a monografia? Sim ou Não?")));
lista.add(aluno);
}
else if(opcao == INCLUIR_A_MESTDOUT)
{
aluno = new MestDout();//perceba o polimorfismo
aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
aluno.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
aluno.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
aluno.setTitulo(JOptionPane.showInputDialog("Digite o titulo da tese:"));
aluno.setData(JOptionPane.showInputDialog("Digite a data da defesa:"));
aluno.setConceito(Float.parseFloat(JOptionPane.showInputDialog("Conceito?:")));//modifiquei ele pedia o título de novo
lista.add(aluno);
}
else if(opcao == LISTAR)
{
nRegistro = lista.size();
for(i=0;i<nRegistro;i++)
{
String sTexto = "";
sTexto += "\nNome do Aluno: " + lista.get(i).getNome();
sTexto += "\nCódigo da matriculo: " + lista.get(i).getCodMat();
sTexto += "\nNumero de creditos cadastrados: " + lista.get(i).getNumCred();
//QUERO TESTAR VER SE O REGISTRO EM QUESTÃO POSSUI lista.get(i).getTitulo() para ver se é
//aluno do tipo Especificacao ou MestradoDoutorado
//Como proceder?
if(lista.get(i) instanceof MestDout)//identifica qual classe foi instanciada
{
sTexto += "\nAluno com mestrado";//um exemplo
}
}
}
else if(opcao == SAIR)
{
continuar = false;
}
}
}
}
Tinha um erro no código que postei
Tente novamente por favor (editei o código)
Deu certo??
ok, até ai deu certo e entendi, porem dentro do if preciso pegar o valor do getTitulo, como proceder?
Na classe Aluno, coloquei os 3 Sets (em branco?) que me passou, não deveria ter os Gets?
A classe aluno deve ter os demais métodos?
Isso não quebra a coesão do seu modelo??
Quem deve ter o método getTitulo() não é somente a classe MestDout??
Se eu fosse você tiraria esses métodos da classe aluno.
Sobre o if… cara você deve mexer no if para ele se adaptar ao o que você quer…
Use o método getTitulo() (como já está sendo feito). A única diferença é que o código que postei verifica se ele é vazio, que é o que você disse que queria fazer.
Desculpe a msgm era pro jbezerrajr, referente a maneira que ele esboçou
ok, até ai deu certo e entendi, porem dentro do if preciso pegar o valor do getTitulo, como proceder?
Na classe Aluno, coloquei os 3 Sets (em branco?) que me passou, não deveria ter os Gets?
if(lista.get(i) instanceof MestDout) {
if(((MestDout)lista.get(i)).getTitulo().equals("valor que você quer comparar") {
sTexto += " bla bla bla";
}
}
entendi, consegui ficou assim:
if(lista.get(i) instanceof MestDout)
{
sTexto += "\nO Titulo da tese é: " + ((MestDout)lista.get(i)).getTitulo();
}
o cast seria pra fazer Aluno voltar a ser MestDout
, assim conseguindo usar o getTitulo
correto?