2012-12-04 6 views
2
public class example 
{ 
    static class point 
    { 
     int x; 
     int y; 
    } 

    static void main(String args[]) 
    { 
     point p = new point(); 
     point[] p1 = new point[5]; 
     point[][] p2 = new point[5][5]; 

     p.x = 5; //No problem 
     p[0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException 
     p[0][0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException 
    } 

Comment puis-je initialiser p []. X et p [] []. X?Comment initialiser un tableau à deux dimensions?

+3

s'il vous plaît toujours utiliser CamelCase pour vous classnames. – schippi

+0

Les éléments de tableau s'initialisent à la valeur par défaut pour le type d'élément donné. Quelle est la valeur par défaut d'un objet? Pourquoi mon ceci conduit à un ** NULL ** - PointerException? –

+0

-1 car il n'y a pas de différence entre un tableau 1, 2 et 42. En tant que développeur, il est crucial d'isoler le problème [réel]. –

Répondre

5

Vous devez initialiser manuellement le tableau entier et tous les niveaux si à plusieurs niveaux:

point[] p1 = new point[5]; 
// Now the whole array contains only null elements 

for (int i = 0; i < 5; i++) 
    p1[i] = new point(); 

p1[0].x = 1; // Will be okay 
+0

qu'en est-il du tableau 2D je dois initialiser le tableau entier manuellement? –

+1

Oui, vous devez. Utilisez un double pour la boucle pour cela. Pas de réelle différence sur le nombre de dimensions, chaque élément existe mais tous contiennent des références nulles à la création. – Matzi

0
point p = new point(); 

Il est l'objet point. Cet objet point est un tableau 1D. Il contient point références d'objets. Vous devez créer un objet point et de garder dans le tableau comme -

for (int i = 0; i < 5; i++) 
    p1[i] = new point(); 

p1[0].x = 1; 

Et pour un tableau 2D -

point[][] p2 = new point[5][5]; 

for (int i = 0; i < 5; i++){ 
    for (int j = 0; j < 5; j++) 
     p1[i][j] = new point(); 
} 
p[0][0].x = 5; 
0

Lorsque vous construisez un tableau d'objets, le tableau lui-même est construit, mais l'individu les éléments sont initialisés à null. Donc, en supposant Point() est le constructeur que vous voulez,

Point[] p1 = new Point[5]; 
for (int i = 0; i < p1.length; ++i) { 
    p1[i] = new Point(); 
} 
2

penser de cette façon; quand vous faites new point[5] (vous devriez suivre les normes de codage et nommez vos classes avec une première lettre majuscule btw.), vous obtenez un tableau avec chaque élément étant la valeur par défaut pour ce type (dans ce cas null). Le tableau est initialisée, mais si vous voulez des éléments individuels du tableau à initialisés, vous devez le faire aussi bien, que ce soit dans la première ligne comme celui-ci:

point[] p1 = new point[] { new point(), new point() }; 

(La méthode ci-dessus va créer un tableau avec chaque élément déjà initialisés de la taille minimale qui pourra accueillir ces éléments - dans ce cas 2.)

Ou en boucle à travers le réseau et en ajoutant des points manuellement:

point[] p1 = new point[5]; 
for (int i = 0; i < p1.length; i++) { 
    point[i] = new point(); 
} 

ces deux concepts peuvent être étendus à tableaux multidimensionnels:

point[] p2 = new point[][] { 
    new point[] { new point(), new point() } 
    new point[] { new point(), new point() } 
}; 

Ou

point[] p2 = new point[5][5]; 
for (int i = 0; i < p2.length; i++) { 
    for (int j = 0; j < p2[i].length; j++) { 
     p2[i][j] = new point(); 
    } 
} 
Questions connexes