Como resolver "Exception in thread "main" java.lang.NullPointerException"?

/*
 * Uma pesquisa com as pessoas adultas (acima de 18 anos) que utilizam o serviço do
 * Posto de Saúde da Zona Leste será realizada na primeira sexta-feira de junho, das
 * 08:00 Ã s 12:00.
 * pesquisa serão perguntados:
 *  . Nome
 *  . Sexo
 *  . Peso
 *  . Altura
 *  . Idade
 * Ao final da pesquisa,deverão ser calculados:
 *  . Número de homens adultos
 *  . Média de peso dos homens adultos
 *  . IMC dos homens adultos
 *  . Percentual de homens obesos (todas as classificações)
 *
 *  . Número de mulheres adultas
 *  . Media de peso das mulheres adultas
 *  . IMC das mulheres adultas.
 *  . Percentual de pessoas obesas (todas as classificações)
 *
 *  . Número de pessoas entrevistadas
 *  . Media de peso das pessoas entrevistadas
 *  . IMC das pessoas entrevistadas
 *  . Percentual de pessoas obesas (todas as classificações)
 * 
 * Observaçoes :
 * Não se sabe ao certo quantas pessoas serão entrevistadas pela pesquisa.
 * Considere um número máxihomens_obesos de 1000 entrevistados.
 * A cada nova entrevistado o programa deve perguntar se a pesquija já
 * encerrou (se não existe mais pessoas a serem entrevistadas ou se ja terminou
 * o horário da entrevista). Caso tenha encerrado, deverá ser finalizada a rotina
 * de inclusão de dados na pesquisa e exibir o menu com as seguintes informaçoes:
 *  . Exibir lista de entrevistados.
 *  . Exibir os cálculos dos homens adultos.
 *  . Exibir os cálculos das mulheres adultas.
 *  . Exibir todos que estão obesos.
 *  . Exibir a lista de todos os pesquisados por ordem de situação:
 *          - Abaixo do normal.
 *          - Normal.
 *          - Obeso (todas as classificaçoes).
 */

import javax.swing.JOptionPane;

/**
 *
 * @author Bruno Ferreira e Barbara Mangili
 */
public class TRABALHO {
	
	public static void main(String[] args) {
		// Informaçoes
		int []idade = new int[1000];
		double []altura = new double[1000];
		double []peso = new double[1000];
		String []nome=new String[1000];
		String []sexo=new String[1000];
		double []IMC=new double[1000];

		// variavel de saida
		int n=1;
		int final1=1;

		// estatisticas

		// Gordos
		int homens_obesos=0;
		int mulheres_obesas=0;
		int pessoas_obesas=0;

		// Normais
		int homens_normais=0;
		int mulheres_normais=0;
		int pessoas_normais=0;

		// Anorexos
		int homens_leves=0;
		int mulheres_leves=0;
		int pessoas_leves=0;

		// coleta de informaçoes
		int pessoas=0;
		int homens=0;
		int mulheres=0;
		
		for(int cont1=0; cont1<1000; cont1++) {
			while(n!=0) {
				pessoas+=1;
				nome[cont1] = (JOptionPane.showInputDialog(null, "Nome:"));
				sexo[cont1] = (JOptionPane.showInputDialog(null, "Sexo (masculino ou feminino ou m ou f|):"));
				peso[cont1] = Double.parseDouble(JOptionPane.showInputDialog(null, "Peso:"));
				altura[cont1] = Double.parseDouble(JOptionPane.showInputDialog(null, "Altura:"));
				idade[cont1] = Integer.parseInt(JOptionPane.showInputDialog(null, "Idade:"));
				IMC[cont1] = peso[cont1]/(altura[cont1]*altura[cont1]);
				
				// Comparaçao Sexo
				JOptionPane.showMessageDialog(null,IMC[cont1]+" = "+peso[cont1]+" /( "+altura[cont1]+" * "+altura[cont1]+")" );
				
				if(sexo[cont1] == "masculino" || sexo[cont1] == "m") {
					homens++;
					
					if(IMC[cont1] < 20) {
						homens_leves = homens_leves+1;
						pessoas_leves = pessoas_leves+1;
					} else if(IMC[cont1] >= 20 && IMC[cont1] < 24.9) {
						homens_normais = homens_normais + 1;
						pessoas_normais = pessoas_normais + 1;
					} else if(IMC[cont1]>25) {
						homens_obesos=homens_obesos+1;
						pessoas_obesas=pessoas_obesas+1;
					}
				} else if(sexo[cont1] == "feminino" || sexo[cont1] == "f") {
					mulheres++;
					
					if(IMC[cont1] < 19) {
						pessoas_leves=pessoas_leves+1;
						mulheres_leves=mulheres_leves+1;
					} else if(IMC[cont1] >= 19 && IMC[cont1] < 23.9) {
						pessoas_normais = pessoas_normais + 1;
						mulheres_normais = mulheres_normais + 1;
					} else if(IMC[cont1] > 24) {
						pessoas_obesas = pessoas_obesas+1;
						mulheres_obesas = mulheres_obesas+1;
					}
				}
				
				// Menor de Idade
				if(idade[cont1] < 18) {
					if(sexo[cont1] == "masculino" || sexo[cont1] == "m") {
						homens--;
					} else if(sexo[cont1] == "feminino" || sexo[cont1] == "f") {
						mulheres--;
					}
					
					pessoas--;
					nome[cont1] = "Descartado";
					sexo[cont1] = "Descartado";
					peso[cont1] = 0;
					altura[cont1] = 0;
					idade[cont1] = 0;
					IMC[cont1] = 0;
					
					if(cont1 > 0) {
						cont1--;
					}
					
					JOptionPane.showMessageDialog(null, "IDADE INAPROPRIADA DADOS DESCARTADOS");
				}
				
				// SAIDA
				n = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite 0 para sair caso queria continuar qualquer outro numero:"));
				
				if(n==0) {
					cont1 = 1000;
				}
			}
		}
		
		JOptionPane.showMessageDialog(null,"Certo pesquisa finalizada agora vá aos dados");
		
		while(final1!=0) {
			final1 = Integer.parseInt((JOptionPane.showInputDialog(null, "Digite um numero correspondente as opçoes:"
				+"\n0.Sair"
				+"\n1.Nome das pessoas obesas"
				+"\n2.Numero de homens mulheres e geral em cada ixa de peso"
				+"\n3.Exibir todas informaçoes dos candidatos"
				+"\n4.Exibir calculos"
				+"\n5.Medias de peso"
				+"\n6.Medias de IMC ")));
			
			switch(final1) {
				case 1:
					for(int cont1 = 0; cont1 <= pessoas; cont1++) {
						if(sexo[cont1].equalsIgnoreCase("m") || sexo[cont1].equalsIgnoreCase("masculino")) {
							if(IMC[cont1] > 24.9) {
								JOptionPane.showMessageDialog(null, nome[cont1]);
							}
						} else if(sexo[cont1].equalsIgnoreCase("f") || sexo[cont1].equalsIgnoreCase("feminino")) {
							if(IMC[cont1] > 23.9) {
								JOptionPane.showMessageDialog(null, nome[cont1]);
							}
						} else if (homens_obesos==0 && mulheres_obesas==0) {
							JOptionPane.showMessageDialog(null, "Ta todo mundo BUNITO");
						}
					}
					break;
					
				case 2:
					// Homens
					JOptionPane.showMessageDialog(null, "Homens\nObesos: " + homens_obesos+"\nNormais: " + homens_normais + "\nBaixo do peso: " + homens_leves);
					
					// Mulheres
					JOptionPane.showMessageDialog(null, "Mulheres\nObesas: " + mulheres_obesas + "\nNormais: " + mulheres_normais + "\nBaixo do peso: " + mulheres_leves);
					
					// Pessoas
					JOptionPane.showMessageDialog(null, "Total\nObesos: " + pessoas_obesas + "\nNormais: " + pessoas_normais + "\nBaixo do peso: " + pessoas_leves);
					
					break;
				
				case 3:
					for(int cont1 = 0; cont1 <= pessoas; cont1++) {
						JOptionPane.showMessageDialog(null,"Informaçoes\nnome:" + nome[cont1] + "\nidade:" + idade[cont1] + "\npeso:" + peso[cont1] + "\nsexo:" + sexo[cont1] + "\naltura:" + altura[cont1]);
					}
					break;
				
				case 4:
					// Calculos
					JOptionPane.showMessageDialog(null, "IMC=Peso/altura²");
					break;
				
				case 5:
					//Medias de peso
					double mediapesog=0;
					double mediapesom=0;
					double mediapesof=0;
					
					for (int cont1 = 0; cont1 < pessoas; cont1++) {
						mediapesog = mediapesog + IMC[cont1];
						
						if(sexo[cont1] == "m" || sexo[cont1] == "masculino") {
							mediapesom=mediapesom+IMC[cont1];
						} else {
							mediapesof = mediapesof + IMC[cont1];
						}
					}
					
					mediapesog=mediapesog/pessoas;
					mediapesom=mediapesom/homens;
					mediapesof=mediapesof/mulheres;
					JOptionPane.showMessageDialog(null, "IMC=Peso/altura²");
					break;
				
				case 6:
					// Medias de IMC
					double mediaimcg=0;
					double mediaimcm=0;
					double mediaimcf=0;
					
					for (int cont1 = 0; cont1 < pessoas; cont1++) {
						mediaimcg = mediaimcg + IMC[cont1];
						
						if(sexo[cont1].equalsIgnoreCase("m") || sexo[cont1].equalsIgnoreCase("masculino")) {
							mediaimcm=mediaimcm+IMC[cont1];
						} else {
							mediaimcf=mediaimcf+IMC[cont1];
						}
					}
					
					JOptionPane.showMessageDialog(null, "IMC=Peso/altura²");
					break;
					
				default:
					JOptionPane.showMessageDialog(null, "Voce escolheu sair!");
					break;
			}
		}
	}
}

NullPointerException acontece quando você tenta invocar um método em uma referência que aponta para null. Por exemplo:

List<Integer> listaX = null; // variavel listaX aponta para null
listaX.size(); // NullPointerException

Ou então:

void funcao(Object parametro) {
    parametro.wait(); // null pointer exception, pois parametro == null
}
//...
funcao(null);

Quando acontece a exceção, vai aparecer no console a linha do teu código que está causando esse erro. Procure essa linha, descubra qual referência aponta para null e corrija isso. É erro de lógica, você esqueceu de instanciar um objeto ou setou a referência para null explicitamente.

1 curtida