Jump to content

Archived

This topic is now archived and is closed to further replies.

danielswater

[Resolvido] Cade o maldito erro?

Recommended Posts

Galera beleza?

Seguinte, já tentei achar aonde está o erro neste exercício e confesso que não sei

O código e este:

 

import javax.swing.*;
public class CadastroProfessor {

	public static void main(String[] args) {
		
 	   Professor pro[]=new Professor[100];
       Disciplina dis[]=new Disciplina[100];
		
		while(true){
	           
	       int op=Integer.parseInt(JOptionPane.showInputDialog("1-Cadastrar Prof. e Disciplinas  2-Buscar Disciplinas  3-Buscar Titulação  4-Sair"));
		              
           //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());
        }
                       break;
               }
           }
		}
	}
}

O problema está no case 2, que fecha o programa e não volta para o menu inicial, sei até que e por causa do bloco, só que não acho como corrigir este erro, so falta isso para concluir este maldito exercício

Alguma luz?

 

obs: sei também que está completamente tosca a identação mas n estou me importando com isso nesse momento

Share this post


Link to post
Share on other sites

De cara já vi que no seu case 2 ocorre um estouro de memória (ArrayIndexOutOfBounds). Se seu vetor tem 100 posições, então você deve percorrer as posições de 0 a 99.

Errado

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()); 
                       } 
               }

Correto

for(int i=0; i<100; i++) {...}

PS: Sim, sua identação está tosca.

Share this post


Link to post
Share on other sites

Amigo, você esta percorrendo todas as diciplinas mas nem todas existem. 0.o"

 

Faça uma variavel que armazene a quantidade de disciplinas cadastradas e utilize ela no laço.

 

Boa sorte com essa identação aew (uma das mais cabulosas que já vi... xD)

Share this post


Link to post
Share on other sites

Amigo, você esta percorrendo todas as diciplinas mas nem todas existem. 0.o"

 

Faça uma variavel que armazene a quantidade de disciplinas cadastradas e utilize ela no laço.

 

Boa sorte com essa identação aew (uma das mais cabulosas que já vi... xD)

 

Cara, isso que você falou está aqui:

dis[i].setNome(JOptionPane.showInputDialog("Digite o nome da Disciplina"));

E também esta no laço, no case 2

Share this post


Link to post
Share on other sites

Não era isso que eu queria dizer.

 

Olhe seu laço como está:

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());
    }
}

Caso o usuário não cadastre 100 disciplinas o seu laço irá percorrer objetos que não existem. Faça essa modificação:

// no inicio do programa declare a variável
int qt_disciplinas;
...

// use ela na pergunta:
qt_disciplinas = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de Disciplinas que deseja cadastrar"));
...

// e use ela no laço
for(int i=0; i<=qt_disciplinas; i++)
...

Sacou?

Share this post


Link to post
Share on other sites

Huuummmm....saquei sim, vou testar daqui a pouco e ja volto aqui p dar um parecer

Só uma coisa, não sei nao se vai funcionar porque se você observar o case 3, está identico ao case 2 e funciona perfeitamente. Depois que realiza a busca e acha a titulação, ele volta para o menu principal, o que nao acontece com o case 2

Share this post


Link to post
Share on other sites

Pode ser que dê certo, mas fatalmente uma hora ou outra vai dar erro pelo mesmo motivo.

 

Huuummmm....saquei sim, vou testar daqui a pouco e ja volto aqui p dar um parecer

Só uma coisa, não sei nao se vai funcionar porque se você observar o case 3, está identico ao case 2 e funciona perfeitamente. Depois que realiza a busca e acha a titulação, ele volta para o menu principal, o que nao acontece com o case 2

 

Para minimizar os erros sugiro:

 

1º Crie as variáveis "p" e "d" antes do case 1 e sete elas com 0.

int p = 0;
int d = 0;

2º Adequação da mudança do 1º item

p = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de Professores que deseja cadatrar"));
d=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de Disciplinas que deseja cadastrar"));

 

3º Corrija os laços com para ele passar somente nos dados que voce criou.

 

Para disciplina

for(int i=0; i<d; i++)

Para professor

for(int i=0; i<p; i++)

Share this post


Link to post
Share on other sites

Na verdade agora que eu vi minha sugestão é identica a do Danilo, mals!

 

Então, o erro provavel é NullPointerException e como o Vergil disse ainda pode ocorrer um ArrayIndexOutOfBounds.

Share this post


Link to post
Share on other sites

Por isso tem o 2 passo do meu post.

 

Então Daniloinf, só que o problema é que se eu criar as variaveis "p" e "d", da como variáveis duplicadas, não rola

 

Share this post


Link to post
Share on other sites

Desculpa Kandrade, na verdade era para responder para você mesmo, não para o Daniloinf, mas enfim, agradeço os dois

 

Ok, inicializeis as variaveis "p" e "d" com 0 antes do case 1, tava dando variavel duplicada porque eu nao tirei o int da parada :S

Mas mesmo assim, no laço do case 2:

case 2:
String busca=JOptionPane.showInputDialog("Digite o nome da Disciplina a ser buscada");
for(int i=0; i<d; i++){
ele da como a variavel local "d" nao pode ser inicializada :(

 

Mesmo assim, continuo achando que o problema e no fechamento do bloco, pois so quando vou realizar uma busca pela disciplina que o painel fecha

Share this post


Link to post
Share on other sites

Cara, não tive como testar o código pois não tenho as classes que você usa, mas tenho certeza que este código esta certo agora:

import javax.swing.*;
public class CadastroProfessor {

    public static void main(String[] args) {

        int p, d, op;
        Professor pro[]=new Professor[100];
        Disciplina dis[]=new Disciplina[100];

        while(true){

            op = Integer.parseInt(JOptionPane.showInputDialog("1-Cadastrar Prof. e Disciplinas  2-Buscar Disciplinas  3-Buscar Titulação  4-Sair"));

            //Cadastra Professores e Disciplinas
            switch (op){
                case 1:
                    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")));
                    }
                    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<d; 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<p; i++)
                        if(titBusca.equalsIgnoreCase(pro[i].getTitulacao()))
                            JOptionPane.showMessageDialog(null,"Professores com essa titulação:" + " " + pro[i].getNome());
                    break;
            }
        }
    }
}

Share this post


Link to post
Share on other sites

Continua dando erro, dessa vez no public class CadastroProfessor e no break do case 2. Pede para inserir o fechamento dos blocos "}"...não sei mais o que eu faço :(

 

Tem como você postar aqui as mensagens de erro que são mostradas?

Share this post


Link to post
Share on other sites

Puts brother, não consigo enxergar esse erros ai não, talvéz você colocou alguma quebra de linha onde não podia, mas aqui vai o cógido com os fechamentos certinhos:

 

import javax.swing.*;
public class CadastroProfessor {

    public static void main(String[] args) {

        int p, d, op;
        Professor pro[]=new Professor[100];
        Disciplina dis[]=new Disciplina[100];

        while(true){

            op = Integer.parseInt(JOptionPane.showInputDialog("1-Cadastrar Prof. e Disciplinas  2-Buscar Disciplinas  3-Buscar Titulação  4-Sair"));

            //Cadastra Professores e Disciplinas
            switch (op){
                case 1:
                    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")));
                    }
                    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<d; 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<p; i++){
                        if(titBusca.equalsIgnoreCase(pro[i].getTitulacao())){
                            JOptionPane.showMessageDialog(null,"Professores com essa titulação:" + " " + pro[i].getNome());
						}
					}
                    break;
				
            }
        }
    }
}

Share this post


Link to post
Share on other sites

Cara, mesma coisa que eu tinha feito

Simplesmente copiei e colei o seu codigo no eclipse, continua dando o erro de que as variáveis "p" e "d" nao foram inicializadas. Cara Juro que nunca vi isso na minha vida, ta certo que sou iniciante mas pelo jeito você e o Vergil não são. Que eu faço? me mato?

Share this post


Link to post
Share on other sites

kkkkkkk, calma brother não desiste assim não...

 

Uma coisa que eu faço quando encontro problemas causados por entidades maligas é deixar ele pra tráz e fazer outros exercícios, dps você da uma olhada nele e tenta arrumar, se der pau outra vez eu começo ele do zero...

 

Se você quiser pode me mandar os códigos desse exercício que eu dou uma olhado e tento arrumar amanhã.

 

Boa sorte aew bro, =]

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.