Instanciar um vetor de objeto

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.

1 curtida

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:

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

}[/code]

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

T+

1 curtida

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

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!