Instanciar um vetor de objeto

3 respostas
P

Galera, estou com um problema aqui.
Estou tentando instanciar um vetor de objeto mas não está funcionando.
Não tem erro de sitaxe, mas ao executar da o seguinte erro:
Exception in thread “main” java.lang.NullPointerException
at gerenciaProfessores.main(gerenciaProfessores.java:27)

Descobri que o problema está ao criar o vetor de objeto, pq eu já testei declarar a variável, ao invés de vetor, como uma variável simples, e aí funcionou.
Segue o código:

mport javax.swing.JOptionPane;
public class gerenciaProfessores {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String ler;
		int qt = 10;
		Professor[] vetProf = new Professor[qt];
		int cont = 0;
		int opcao;
		
		do{
			ler = (JOptionPane.showInputDialog("Informe a opção:\n1-Inserir\n2-Pesquisar"));
			opcao = Integer.parseInt(ler);
		} while (opcao < 1 || opcao > 2);
		
		switch (opcao){
		case 1:
			if (cont > 9){
				JOptionPane.showMessageDialog(null, "Cadastro completo!");
				break;
			}
			
			ler = JOptionPane.showInputDialog("Informe o nome do professor");
			vetProf[1].setNome(ler);
			ler = (JOptionPane.showInputDialog("Informe as horas semanais trabalhadas pelo professor"));
			double h = Double.parseDouble(ler);
			vetProf[cont].setHoras(h);
			ler = (JOptionPane.showInputDialog("Informe o título do professor"));
			vetProf[cont].setTitulo(ler);
			cont++;
			break;
		case 2:
			ler = (JOptionPane.showInputDialog("Informe o nome do professor para pesquisa"));
			for (int i=0; i<10; i++){
				int verificar=0;
				if (vetProf[i].getNome() == ler){
					ler = JOptionPane.showInputDialog("Informe a opção desejada:\n1-Calc. Sal. Bruto\n2-Calc. INSS\n3-Calc. IR\n4-Calc. Sal. Liq");
					int op = Integer.parseInt(ler);
					if (op == 1){
						vetProf[i].salarioBruto();
					}
					else if(op == 2){
						vetProf[i].INSS();
					}
					else if (op == 3){
						vetProf[i].IR();
					}
					else if (op == 4){
						vetProf[i].salarioLiquido();
					}
					else JOptionPane.showMessageDialog(null, "Opção inválida!");
				}
				else verificar++;
				
				if (verificar > 0){
					JOptionPane.showMessageDialog(null, "Nome inexistente!");
				}
			}
			break;
		default:
			JOptionPane.showMessageDialog(null, "Erro do programa.");
			System.exit(0);
		}
	}

}

Valeu.

3 Respostas

diego2005

Cara, você criou o vetor corretamente, mas você não pode fazer isso:

vetProf[1].setNome(ler);

pois você não tem nenhum objeto professor criado na posição 1 do seu vetor. O que você pode fazer é o seguinte:

public static void main(String[] args) {   
    String ler;   
    int qt = 10;   
    Professor[] vetProf = new Professor[qt];   
    
    for (int i = 0; i < vetProf.length; i++) {
        Professor[i] = new Professor();
    }
}

Ou então trabalhar com alguma coleção (como ArrayList) pra não ter que preocupar com o tamanho do seu vetor.

T+

Loiane

Você apenas instanciou o vetor de Professores, agora falta instaciar os objetos Professor em cada posição do vetor.

Professor[] vetProf = new Professor[qt];
for (int i=0; i<qt; i++){
       vetProf[i] = new Professor();
}
P

Muito obrigado Diego e Loiane!!!

Realamente, não tinha percebido isto!

Na verdade, foi a professora que não teve a boa vontade de explicar isto!

Valeu!

Criado 18 de maio de 2009
Ultima resposta 18 de mai. de 2009
Respostas 3
Participantes 3