NullPointerException

4 respostas
P

Pessoal,
já vi a seguinte construção de array bidimensional,
int [][] integer = new int[3][];
mas quando tenho acessar dá NullPointerException, como no exemplo abaixo,

class Teste{
    public static void main(String[] args)
    {
      int [][] integer = new int[3][];
      integer[0][0] = 2;
     // System.out.println(integer[0][0]);
      
    }
}

Isso não ficou claro p/ mim, alguem poderia explicar o pq.
Obrigado.

4 Respostas

R

quando vc constroi dessa maneira, vc está dizendo que o primeiro nivel terá 3 arrays unidimensinais null…

integer[0] = null;
integer[1] = null;
integer[2] = null;

então quando vc faz

integer[0][0]

ele tenta fazer algo como

integer[0].elementAtIndex(0)

só que integer[0] é null e o resultado é como uma tentativa de fazer

null.elementAtIndex(0)

e, por isso, dá NullPointerException.

[]'s

Zakim

colega…

uma coisa é declarar um array bidimensional sem valor e a outra instanciar ela sem valor…

acredito que isso nunca va funcionar…

se vc qr usar uma lista sem precisar colocar o tamanho, utilize listas dinamicas

espero ter ajudado

diego2005

Um array bidimensional nada mais é so que um array que contem vários arrays.

int [][] i = new int[3][];

O array i é uma array que contém 3 arrays (que ainda não null, pois não foram criados).

Então:

i[0] == null i[1] == null i[2] == null

Cada array do array i pode ter um tamanho diferente:

i[0] = new int[1]; i[1] = new int[2]; i[2] = new int[3];

T+

Raff

Cara lembre - se que um array em Java é sempre um Objeto mesmo se ele contem elementos primitivos. Como o diego disse quando voce usa uma declaração como essa que voce usou int [] [] i = new [3][];

na verdade o que voce criou até a foi um vetor que contém tres campos para vetores de tipos primitivos inteiros, mas note tbm que você ainda naun criou esses vetores. Portanto cada campo do vetor [color=red]i[/color] contém [color=blue]null[/color] por isso o motivo da Exceção, pois o "compilador estava esperando que você construisse um vetor para as posições do array poder referenciar."Mas como você fez você passou um tipo int ao invez de um [color=red]OBJETO ARRAY [/color] .

quando você fez isso, [color=darkred]foi ai que você errou[/color] !

i[0][0] = 2 ;//isso é incoreto pois espera um Objeto não um primitivo int.

i[0] = new int[2];// correto

Cara se tiver muito erro de portugue não liga não pois estou morrendo de sono agora são 0:35, e eu tenho que acordar cedo para trampar :shock: :thumbup: :thumbup:

Criado 24 de julho de 2007
Ultima resposta 25 de jul. de 2007
Respostas 4
Participantes 5