Erro cabuloso nesse source code!

Crie um algoritmo que permita manter um cadastro de cidades, com as seguintes funcionalidades:
[list] O limite de cidades cadastradas deve ser de 100;[/list]
[list] Para cada cidade é necessário cadastrar: nome, estado, quantidade de habitantes, PIB e DDD;[/list]
[list] A qualquer momento deve ser possível escolher entre cadastrar uma nova cidade ou pesquisar uma cidade existente. Para isso, deve ser exibido um menu ao usuário;[/list]
[list]A pesquisa de cidades deverá ser feita por nome;[/list]
[list] Deve haver uma opção no menu para sair do programa.[/list]



package Exercicio8;

import java.util.Scanner;

public class Exercicio8 {
    public static int count=0;
    public static void main(String[] args) {
        Scanner scan= new Scanner(System.in);
        int lin=100;
        int col=5;
        int op;
        String[][] cidade=new String[lin][col];
        do{
        System.out.println("Escolha a opção\n1-Cadastrar Nova Cidade\n2-Pesquisar\n3-Sair");
        op=scan.nextInt();
        if(op==1){
                cadastrar(cidade, lin, col);
        }
        if(op==2){    
                String nome;
                System.out.print("Digite o nome para busca: ");
                nome=scan.next();
                pesquisar(cidade, lin, col,nome);
        }
        if(op==3){
            System.exit(1);
        }
        else{
            System.out.println("Digite uma opção valida!");
        }
        }while(op!=3);
    }
    public static void cadastrar(String[][] cidade,int lin, int col){
        Scanner scan= new Scanner(System.in);
        String nome="", estado, qtd_Hab, pib, ddd;
        for(int i=count;i<count+1;i++){
            for(int j=0;j<col;j++){
                switch(j){
                 case 0:
                     System.out.println("Digite o nome da cidade nº"+(i+1));
                     nome=scan.next();
                     cidade[i][j]=nome;
                     break;
                 case 1:
                     System.out.println("Digite o estado da cidade "+nome);
                     estado=scan.next();
                     cidade[i][j]=estado;
                     break;
                 case 2:
                     System.out.println("Digite a quantidade de habitantes de "+nome);
                     qtd_Hab=scan.next();
                     cidade[i][j]=qtd_Hab;
                     break;
                case 3:
                     System.out.println("Digite o pib de "+nome);
                     pib=scan.next();
                     cidade[i][j]=pib;
                     break;
                case 4:
                     System.out.println("Digite o ddd da cidade "+nome);
                     ddd=scan.next();
                     cidade[i][j]=ddd;
                     break;
             }
            }
        }
        count++;
    }
    public static void pesquisar(String[][] cidade,int lin, int col,String name){
        for(int i=0;i<lin;i++){
                if(cidade[i][0].equals(name)){
                    System.out.println("Nome: "+cidade[i][0]);
                    System.out.println("Estado: "+cidade[i][1]);
                    System.out.println("Quantidade de habitantes: "+cidade[i][2]);
                    System.out.println("PIB: "+cidade[i][3]);
                    System.out.println("DDD: "+cidade[i][4]);
                }
            }
    }
}

Se o usuario cadastrar as cidades e depois fazer uma busca a busca retomara a resposta certa mais aparece um erro no final.
Pq ta acontecendo isso???

Qual é o erro?

+1

:thumbup:

Exception in thread “main” java.lang.NullPointerException
at Exercicio8.Exercicio8.pesquisar(Exercicio8.java:71)
at Exercicio8.Exercicio8.main(Exercicio8.java:23)
Java Result: 1

Repara no código de erro que ele mostra a linha que deu o erro, linha 71.

System.out.println("Quantidade de habitantes: "+cidade[i][2]);
O array que deve estar no “i” deve estar null. Aí quando você tenta chamar o 2 ele te joga o null pointer exception.

Resolvido(não sei como)!
No laço:

for(int i=0;i<lin;i++){  
                if(cidade[i][0].equals(name)){  
                    System.out.println("Nome: "+cidade[i][0]);  
                    System.out.println("Estado: "+cidade[i][1]);  
                    System.out.println("Quantidade de habitantes: "+cidade[i][2]);  
                    System.out.println("PIB: "+cidade[i][3]);  
                    System.out.println("DDD: "+cidade[i][4]);  
                }  
            }  

Eu mudei para:

for(int i=0;i<count;i++){
                if(cidade[i][0].equals(name)){
                    System.out.println("Nome: "+cidade[i][0]);
                    System.out.println("Estado: "+cidade[i][1]);
                    System.out.println("Quantidade de habitantes: "+cidade[i][2]);
                    System.out.println("PIB: "+cidade[i][3]);
                    System.out.println("DDD: "+cidade[i][4]);
                }
            }

Deu certo. Desapareceu o erro…
Porque???

É o professor que mandou usar arrays bidimensionais ?

Na prática raramente se usam arrays bidimensionais (na verdade, se você, em um problema na vida prática que não seja relacionado a fazer contas com matrizes, está usando um array bidimensional, alguma coisa está errada).

O correto é usar uma lista ou array de objetos do tipo Cidade, com os atributos Nome, Estado, Quantidade de Habitantes, PIB e DDD (sendo os dois primeiros atributos String, e os três últimos numéricos. )

São as famosas “listas de exercicios” de lógica de programação para serem feitas em java!!!

você criou a variavel lin=100;
no primeiro for vc estava tentando ler 100 vezes os dados, sendo que você inseriu apenas count (pode ser 1, 2, 3, 50, n, que vem do teu cont++ [numero de inserções]).
ao mudar para i<cont e não mais i<lin, você disse:

Hei java, leia (no for) apenas a quantidade de inserções que eu fiz.

;}