Anlegen eines 2 dim Array mit Point Elementen

vas

Mitglied
Hallo!

Ich (Gelegenheitsprogrammierer) habe ein kleines Verständnisproblem:

Die Werte von Zahlenpaaren sollen in einer Matrix gespeichert werden. Für die Zahlenpaare habe ich eine lokale Klasse Point mit public Membern definiert (ähnlich einem C struct).

Die Matrix ist der 2-dim Array matData, in den also die Point Elemente eingefügt werden sollen
Das funktioniert auch soweit, wenn ich explizit Point-Objekte anlege und zuweise.

Die beiden auskommentierten Zuweisungen (s.u. Quellcode) führen auf eine NullPointerException, warum ist das so?


Code:
   private void test()
   { 
        
      class Point
      {
         int x;
         int y;
      }
     
      Point[][] matData = new Point[3][3]; 
      
      // matData[1][1].x = 13;      <-   NullPointerException
      // matData[1][1].y = 17;
      
      Point p = new Point();
      p.x = 13;
      p.y = 17;
      
      matData[1][1] = p;
      
      System.out.println(" * test " + matData[1][1].x);      // -> 13
      System.out.println(" * test " + matData[1][1].y);      // -> 17

      return;
   }

Vielleicht kann mir jemand auf die Sprünge helfen?

mfg vas
 
Hallo,

der new-Operator legt nur den Platz für die Elemente der Matrix an, aber füllt diese dann mit null (in C++ wäre das anders). Du musst also erstmal eine neue Point-Instanz anlegen, bevor du auf dessen Instanzvariablen zugreifst, d.h. [c]matData[1][1] = new Point()[/c]. Wenn du einen Konstruktor zu Point hinzufügst, der x und y gleich mit speichert, kannst du alles in einer Zeile machen: [c]matData[1][1] = new Point(13, 17); [/c]
 
Zuletzt bearbeitet:
Du legst ein mehrdimensionales Array an.
Wie eine Tabelle mit 3 Spalte und 3 Zeilen.
In jedes Feld der Tabelle kannst du jetzt ein Point reinschreiben.

Das heißt aber auch, dass du das erstmal machen musst. Das Array ist nicht von alleine befüllt.
Deshalb muss du wie im nicht auskommentierten zunächst ein Punkt einfügen und dann kannst du auch drauf zugreifen.
In den leeren Felder ist sonst nur die null-Referenz und da du auf diese zugreifst bekommst du auch die entsprechende Exception.

€dit: zu spät
 
Zuletzt bearbeitet:
Ah, das war mir nicht klar, das zunächst null-Referenzen in den Array eingetragen werden. Danke an Klösp + rme!

vas
 
Zuletzt bearbeitet:

Zurück
Oben