Ir para conteúdo

Arquivado

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

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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)

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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++)

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

 

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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;
            }
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros 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 :(

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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;
				
            }
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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, =]

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.