Erro: Exception in thread "main" java.lang.NullPointerException (projeto = Agenda)

5 respostas
F

Olá pessoal,
sou iniciante em java
tive como trabalho criar uma agenda telefonica, que conste nome, telefone, endereço, sexo, idade
para isso criei uma matriz 5X50 (50 é a capacidade de contatos)
Uso o Eclipse para criar os códigos
O código e esse ae

import java.io.*;
import java.util.Scanner;
public class Agenda{

//declaração variáveis globais
static Scanner x = new Scanner(System.in);
static String M[][] = new String [50][5];
static String c;
    
public static void zerar(){
for(int i = 0;i<50;i++){
for(int j = 0;j<5;j++){
M[i][j] = "_";
}}
}

public static void main(String args[])throws IOException{
int key;
String nome;
int f;

System.out.println("Agenda");
System.out.println("Digite a opção desejada");
System.out.print("1)----> Consultar agenda\n2)----> Inserir contato\n3)----> Editar contato\n4)----> Excluir contato:  ");
key = x.nextInt();
switch(key){
case 1:
    System.out.println("Digite o nome a ser consultado");
    nome = x.next();
   f =  consulta(nome);    
    mostrar(f);
 break;
case 2:
    System.out.println("Digite o nome a ser inserido");
    nome = x.next();
    inserçao(nome);
break;
case 3:
break;
case 4:
    System.out.println("Digite o nome do contato a ser excluido");
    nome = x.next();
    excluir(nome);
    break;
 }
}     

public static int consulta(String name){
int x = 0 ;
for(int i = 0;i< 50; i++){  
        if(M[i][1].equals(name)){
            x = i;
            }else{
            x = -1;
     }
    }
    return(x);
}


public static void mostrar(int x){
System.out.println("Nome: " + M[x][1]);
System.out.println("Telefone: " + M[x][2]);
System.out.println("Endereço: " + M[x][3]);
System.out.println("Idade: " + M[x][4]);
System.out.println("Sexo: " + M[x][5]);
}

public static void inserçao(String nome)throws IOException{
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String tel, end, id, sexo;
    int z;
    z = consulta(nome);
    if(z==-1){
        for(int i = 0;i< 50; i++){
        if(M[i][1].equals("")){
    System.out.println("Digite o nome a ser inserido");
    nome = x.next();
    M[i][1] = nome;
    System.out.println("Digite o telefone do contato");
    tel = x.next();
    M[i][2] = tel;
    System.out.println("Digite o endereço do contato");
    end = x.next();
    M[i][3] = end;
    System.out.println("Digite a idade do contato");
    id = x.next();
    M[i][4] = id;
    System.out.println("Digite o sexo do contato");
    sexo = x.next();
    M[i][5] = sexo;
}}
}
}

public static void excluir(String nome)throws IOException{
  int v;
  int j, f;
  f = consulta(nome);
  
  if(f==-1){
      System.out.println("Nome não consta na agenda");
    }else{
        for(j = 0;j<5; j++){ 
    System.out.println(M[f][j]);}
        System.out.print("Deseja realmente excluir este contato?(1-> excluir / outra tecla -> sair)");
        v = x.nextInt();
        if(v==1){
            for(j = 0; j<5; j++);
            M[f][j] = "_";
        }
    }
}
  

}

Quando eu mando rodar, aparece no console do eclipse os prompts normais. Ao escolher qualquer opção, aparece o seguinte erro:
Exception in thread "main" java.lang.NullPointerException
at Agenda.consulta(Agenda.java:51)
at Agenda.main(Agenda.java:30)

Dei uma olhada pela internet mas nao entendi sobre o que se trata esse erro.
Poderiam me ajudar?
Obrigado

5 Respostas

B

Vamos por partes

Exception in thread "main" java.lang.NullPointerException at Agenda.consulta(Agenda.java:51) at Agenda.main(Agenda.java:30)

Um NullPointerException aconteceu na linha 51 do arquivo Agenda.java:

if(M[i][1].equals(name)){

Um NullPointerException acontece quando acessamos algum atributo ou método de uma instância que não existe. Neste caso M na posição i, 1 está nulo, e você tenta acessar o método equals dele.

Solução: Instancie a variável com um objeto.

Obs: Arrays de objetos começam com todas as posições com null.

F

é pq nao entendo mto dessa nomenclatura java
instanciar uma variavel com um objeto
no caso a matriz M[][] seria uma variável ou o objeto?
obs; ainda nao estudei OO

B

FelipeR:
é pq nao entendo mto dessa nomenclatura java
instanciar uma variavel com um objeto
no caso a matriz M[][] seria uma variável ou o objeto?
obs; ainda nao estudei OO

Sem entrar em detalhes técnicos:

variáveis são lugares para guardar valores.

Em Java, estes valores podem ser tipos primitivos ou objetos.

M é o nome de um variável do tipo String[][], ou Array de Array de Strings.

A criação de um objeto, usando o operador new é o que chamamos de instanciar um objeto.

No caso desse M, ele é instanciado com new String[50][5], ou seja, criamos um objeto do tipo Array de Array de Strings, e o associamos à variável M.

Arrays são objetos que guardam outros objetos, e por enquanto todas essas posições estão vazias.

O teu método zerar é que coisa de instanciar todas essas posições desse Array de Array de String com a String “_”

lina

Oi,

Exemplo:

public static int consulta(String name){ int x = 0 ; for(int i = 0;i< 50; i++){ if(M[i][1].equals(name)){ x = i; }else{ x = -1; } } return(x); }

Você está permitindo o operador a utilizar o método consulta sem realmente ter um nome inserido em sua agenda. Ou seja, ele não utilizou o método insert e já foi fazer uma pesquisa.

Sendo assim, a linha M[i][1].equals(name) retornara NullPointer, pois M[i][1] = nullo.

Você pode fazer.:

public static int consulta(String name){ int x = 0 ; for(int i = 0;i< 50; i++){ if(M[i][1] != null && M[i][1].equals(name)){ x = i; }else{ x = -1; // Nao encontrou resultado } } return(x); }

Tchauzin!

lina

Oi,

Esqueci de um detalhe… seu método mostrar ocorrerá ArrayIndexOut se você não fizer.:

public static void mostrar(int x){ if (x >= 0) { System.out.println("Nome: " + M[x][1]); System.out.println("Telefone: " + M[x][2]); System.out.println("Endereço: " + M[x][3]); System.out.println("Idade: " + M[x][4]); System.out.println("Sexo: " + M[x][5]); } else { System.out.println("Nome não encontrado"); } }

Tchauzin!

Criado 14 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 5
Participantes 3