Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

danielswater

[Resolvido] Exercicio em Java e OO

Recommended Posts

E ai pessoal beleza?

Seguinte, estou fazendo um exercício em Java e OO que consiste no seguinte:

 

1-Cadastrar professores e disciplinas

2-fazer uma busca pelo nome da disciplina e mostrar o prof. que ministra

3-Buscar por uma titulação e mostrar os prof. com a tal titulaçao

 

Cadastrar o que precisa eu cadastro normal, o lance está na hora de fazer as procuras, quando eu digito o nome da disciplina que eu cadastrei para fazer a busca no vetor e mostrar o professor, o programa para.

 

Obs: Estou fazendo pelo Eclipse e ele me da a seguinte mensagem:

 

Exception in thread "main" java.lang.NullPointerException

at CadastroProfessor.main(CadastroProfessor.java:38)

 

Segue meu código:

 

import javax.swing.*;
public class CadastroProfessor {

	public static void main(String[] args) {
		
		while(true){
	           
	       int op=Integer.parseInt(JOptionPane.showInputDialog("1-Cadastrar Prof. e Disciplinas  2-Buscar Disciplinas  3-Buscar Titulação  4-Sair"));
		   
		   Professor pro[]=new Professor[100];
           Disciplina dis[]=new Disciplina[100];
           
           //Cadastra Professores e Disciplinas
           
           switch (op){
           case 1:        	   
        	   int p=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de Professores que deseja cadatrar"));
        	   for(int i=0; i<=p; i++){
        		   pro[i]=new Professor();
        		   pro[i].setNome(JOptionPane.showInputDialog("Digite o nome do Professor"));
        		   pro[i].setTitulacao(JOptionPane.showInputDialog("Digite a titulação do Professor"));
        		   pro[i].setCargah(Integer.parseInt(JOptionPane.showInputDialog("Digite a carga horária do Professor")));
        	   }        		   
        		   int d=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de Disciplinas que deseja cadastrar"));
        		   for(int i=0; i<=d; i++){
        			   dis[i]=new Disciplina();
        			   dis[i].setNome(JOptionPane.showInputDialog("Digite o nome da Disciplina"));
        			   dis[i].setCargaho(Integer.parseInt(JOptionPane.showInputDialog("Digite a carga horária da Disciplina")));
        			   dis[i].setProfessor(pro[i]);
        		   }
        		   break;
        		   
        		   //Busca pelo nome da Disciplina e mostra o Professor que ministra
        		   
           case 2:
        	   String busca=JOptionPane.showInputDialog("Digite o nome da Disciplina a ser buscada");
        	   for(int i=0; i<=100; i++){
        		   if(busca.equalsIgnoreCase(dis[i].getNome()));
        		   JOptionPane.showMessageDialog(null,"Disciplina:" + "" + dis[i].getNome() + "" + "e ministrada por" + "" + dis[i].getProfessor().getNome());
        		   }
        	       break;
        	       
        	       //Busca a titulação e mostra todos professores com essa titulação
        	       
           case 3:
        	   String titBusca=JOptionPane.showInputDialog("Digite a Titulação do Professor");
        	   for(int i=0; i<=100; i++){
        		   if(titBusca.equalsIgnoreCase(pro[i].getTitulacao()));
        		   JOptionPane.showMessageDialog(null,"Professores com essa titulação:" + "" + pro[i].getNome());
        	   }
           }
		}
	}
}
        		  

Alguma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você está tentando acessar um método de um objeto nulo do vetor 'dis'. O grande erro é que você instancia os vetores a cada loop do while. Então, no momento que o usuário cadastra os professores o vetor fica preenchido. Mas no próximo loop você o instanciará novamente, e os valores serão perdidos.

 

Solução:

Tira a instância do loop while.

Professor pro[]=new Professor[100]; 
Disciplina dis[]=new Disciplina[100]; 
while { ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você está tentando acessar um método de um objeto nulo do vetor 'dis'. O grande erro é que você instancia os vetores a cada loop do while. Então, no momento que o usuário cadastra os professores o vetor fica preenchido. Mas no próximo loop você o instanciará novamente, e os valores serão perdidos.

 

Solução:

Tira a instância do loop while.

Professor pro[]=new Professor[100]; 
Disciplina dis[]=new Disciplina[100]; 
while { ...

Então Vergil, ate funcionou, porém se eu cadastro 2 professores e 2 disciplinas por exemplo, e peço para buscar uma disciplina, ele sempre me mostra a primeira disciplina cadastrada :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.