NullPointerException:

3 respostas
E

E aí amigos,

Preciso de ajuda com a mensagem em título... fiz um Array de Objetos e quando vou procurar um objeto que tenha como "atributo" o "parametro" de entrada, ele retorna esse erro caso o "objeto" não esteja contido no Array...

O código segue...

import java.util.*;
class Time{
  /* Essa classe possui os atributos do Time que serão utilizados na construção
   * da tabela de futebol.
   * */
  String nome;
  
  Time (String n)
  {
    nome = n;
  }
  
  int pontosGanhos = 0;
  int golsMarcados = 0;
  int golsSofridos = 0;
  int saldoGols = golsMarcados - golsSofridos;
  int vitorias = 0;
  int empates = 0;
  
  int golAvarage ()
  {
    if (golsSofridos !=0)
      return golsMarcados / golsSofridos; 
    else
      return golsMarcados;
  }
}

class Campeonato
{
  /* Essa classe acumulará os jogos de futebol para uma tabela de classificação
   * */
  Scanner sc = new Scanner (System.in);
  public static Time[]todosDados;
  int qtiJogos, qtiTimes;
  String advers[][];
  int results[][];
  
  
  void defineTamanho ()
  {
    /* Método define o tamanho das matrizes: A tabela resultados terá tamanho definido conforme
     * quantidade de jogos a serem inseridos. A tabela de classificação também levará em conta
     * quantos times participaram dos jogos.  
     * */
    
    System.out.println ("Quantos jogos deseja inserir no total?");
    qtiJogos = sc.nextInt();
    advers = new String [qtiJogos][2];
    results = new int [qtiJogos][2];
    
    System.out.println ("Quantos diferentes times existem?");
    qtiTimes = sc.nextInt();
    todosDados = new Time[qtiTimes];
    System.out.println(todosDados.length);
  }
  
  
  boolean estaNoArray (Time[]c, String a)
  {
    /* Esse método irá verificar se no array há um objeto que tenha
     * como atributo "nome" a string que é fornecida como parâmetro.
     * */
    boolean achado = false;
    for (int y =0; y <= c.length && !achado; y++)
    {
      if (c[y].nome.equals(a)==true)
      {
        achado = true;
        System.out.println(c[y].nome);
      }
    }
    return achado;
  }
  
  
  Time retornaTime (Time[]c, String s)
  {
    /* Esse método retorna o OBJETO que tem a String de parâmetro como atributo "nome". 
     * */
    boolean achado = false;
    for (int x = 0; x < c.length && !achado; x++)
    {
      if (c[x].nome.equals(s)==true)
      {
        achado = true;
        return c[x];
      }
    }
    return new Time(s);
  }
  
  
  int posicaoLivre (Time[]c)
  {
    /* Esse método retorna o número da próxima posição vazia no Array. 
     * */
    boolean achado = false;
    int posicao = c.length;
    for (int x = 0; x < c.length && !achado; x++)
    {
      if (c[x].nome == null)
      {
        achado = true;
        posicao = x;
      }
    }
    return posicao;
  } 
  
}
a interação, já que estou a utilizar do Dr. Java, é:

Welcome to DrJava.
> Campeonato teste = new Campeonato();
> Time[] a = new Time[3];
> a[0] = new Time("moacir");
> a[1] = new Time("palmeiras");
> teste.estaNoArray (a, "moacir");
moacir
> teste.estaNoArray (a, "palmeiras");
palmeiras
> teste.estaNoArray (a, "corinthians");
NullPointerException:
at Campeonato.estaNoArray(CampeonatoFutebol.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
>

Será que alguém poderia me ajudar???
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:

3 Respostas

R

Olah

só um cuidado…

nesta linha:

for (int y =0; y <= c.length && !achado; y++)

você faz um laço que percorre TODAS as posições do array

você instanciou objetos e referenciou APENAS a 2 posições do array…

> a[0] = new Time(“moacir”);
> a[1] = new Time(“palmeiras”);

naquela loop, quando ele tentar a terceira posição do array, ou seja a[2]… a posição esta null…

neste momento:

if (c[y].nome.equals(a)==true)

vc refenrencia a propriedade nome a um objeto null…

e aí vem a pergunta… pq so acontece qd vc procurou o conrinthias???

> teste.estaNoArray (a, “corinthians”); NullPointerException:

a resposta:

pq, nos outros 2 casos, o loop parou antes de chegar a terceira posição, pois eles existiam… como o corinthians não existe… o loop percorre TODAS as posições…

faz um teste pra ver se é null antes de referenciar o objeto!!!

[]'s

L

Teu array tem 3 posicoes

Time[] a = new Time[3];

vc só criou valor para 2 delas

a[0] = new Time("moacir"); a[1] = new Time("palmeiras");

Porem na execucao do metodo retornaTime, ele vai ler essa terceira posicao (c[2]), e como ela não tem valor, ai da nullpointer… vc tem que testar isso antes

Acho que é isso, não cheguei a rodar aqui

E

Nossa, fuil salvo… nada como falar com quem sabe!!! VALEU!!!

E.

Criado 22 de junho de 2006
Ultima resposta 22 de jun. de 2006
Respostas 3
Participantes 3