Daniel: Array Deklaration

Hallo Zusammen

Habe wiedereinmal ein Problem:

Ich habe in meinem Script in einer Methode folgende Array-Deklaration, in welcher zuerst die benötigten Dimensionen ermittelt werden und anschliessend das strArr definiert wird:

String[][] strArr = new String[intCountRows][intCountCols];

Eigentlich sollte auch von anderen Klassen auf dieses Array zugegriffen werden, aber wenn ich dies als Klassenvariable deklariere

String[][] strArr = new String[5][5];

muss ich bereits die Dimensionen wissen. Gibt es eine Möglichkeit dies zu umgehen? Oder hat vielleicht jemand eine bessere Idee?

Im Voraus besten Dank für die Hilfe!

Gruss Daniel

  1. Eigentlich sollte auch von anderen Klassen auf dieses Array zugegriffen werden, aber wenn ich dies als Klassenvariable deklariere

    String[][] strArr = new String[5][5];

    muss ich bereits die Dimensionen wissen. Gibt es eine Möglichkeit dies zu umgehen? Oder hat vielleicht jemand eine bessere Idee?

    natürlich mußt du beim Erzeugen des Arrays wissen wie groß es ist, wenn die Größe unbekannt ist kannst du z.B. java.util.vector nehmen. Das ist natürlich dann etwas langsamer.

    wenn du die Variable mit static als Klassenvariable definieren willst, habe ich zwei Vorschläge:

    1.) Willst du das wirklich? Bei korrekter Objektorientierter Programmierung ist das nur selten notwendig, insbesondere das von anderen Klassen aus direkt darauf zugreifen ist unschön.

    2.) Du kannst den Klassen-Konstruktor (static { ... } ) benutzen, um das Array anzulegen. Der wird direkt nach dem Laden der Klasse ausgeführt. Natürlich kann man aus dem statischen Kontext heraus nur andere statische Methoden aufrufen. Wenn dein ganzes Programm aus statischen Methoden bestehen sollte hast du (fast) wie C in Java programmiert :-)

    Dominik

  2. Guude!

    Eigentlich sollte auch von anderen Klassen auf dieses Array zugegriffen werden, aber wenn ich dies als Klassenvariable deklariere

    String[][] strArr = new String[5][5];

    muss ich bereits die Dimensionen wissen. Gibt es eine Möglichkeit dies zu umgehen? Oder hat vielleicht jemand eine bessere Idee?

    Verwende bei der Deklaration

    String[][] strArr = null;

    und weise der Variable erst dann das 2-dimensionale Array zu, sobald Du die genauen Dimensionen kennst. In den anderen Klassen kannst Du strArr auf null prüfen.

    Alternative: Wenn Du bei so etwas die genauen Dimensionen nicht kennst, lohnt es sich u.U. mit Collections zu arbeiten, beispielsweise mit Vektoren, die beliebig viele Objekte aufnehmen können. Collections kannst Du auch ineinander schachteln, sodass sich mehr-dimensionale Strukturen ergeben.

    LG ausm Hesseland
    Lemmy

    --
    Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
    1. Hi!

      Habe die Idee mit der NULL-Deklaration versucht. Ergibt mir aber immer eine NullpointerException...?! Entweder ich habe dich da falsch verstanden oder es hat sich sonst einen Fehler eingeschlichen...?!

      import java.io.*;

      public class TestArray {
          public String[][] strArr = null;

      public static void main(String[] args) {

      TestArray TestArray = new TestArray();
              System.out.println(TestArray.strArr[0][0]);

      }

      public TestArray() {

      int intCountBooks = 5;
          int intCountFields = 5;

      //Hier kommen dann natürlich kompliziertere Dimensions-Berechnungen hin...

      String[][] strArr = new String[intCountBooks][intCountFields];

      strArr[0][0] = "Wert00";
              strArr[0][1] = "Wert01";
              strArr[1][0] = "Wert10";
              strArr[1][1] = "Wert11";
          }
      }

      1. Guude!

        public class TestArray {
            public String[][] strArr = null;

        Soweit richtig, aber...

        String[][] strArr = new String[intCountBooks][intCountFields];

        ...hier erzeugst Du ein neues Array. Lass an dieser Stelle den Typ (String[][]) weg, und es funktioniert.

        LG ausm Hesseland
        Lemmy

        --
        Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
        1. Jetzt klappts! Danke!