Java Array/Variable an eine Methode/Klasse übergeben

sverebom

Vice Admiral
Registriert
Aug. 2004
Beiträge
6.304
Guten Morgen,

ich hoffe, die Überschrift passt auf mein Anliegen. Bin noch blutiger Anfänger in Java und bin daher noch etwas unsicher beim Vokabular.

Zu meinem Anliegen: Ich möchte in einer Klasse ein Array erzeugen und anschließend eine Methode aus einer anderen Klasse laden, welche dann auf das Array zugreifen und mit den dort hinterlegten Informationen arbeiten soll. Diese triviale Problem stellt mich immer vor Hürden, bei denen ich merke, dass ich noch weit davon entfernt bin, das Vokabular und Schema von Java verinnerlicht zu haben (ich werde wohl auch gleich erst einmal eine Webseite basteln, einfach um wieder das Gefühl zu haben, wenigstens etwas können).

Hier mein aktueller Ansatz, die (mittlerweile leicht verzweifelnd) einfach stur nach dem Schema eines Pratikums nachgebaut habe. Immerhin schmeißt mit NetBeans keine kryptische Fehlermeldung an den Kopf, aber die Methode scheint das Array dennoch nicht zu kennen.

Code:
public class test {

    public test() {  }

    public void testarray() {

        String[] array = new String [3];
            array[0] = "test1";
            array[1] = "test2";
            array[2] = "test3";

    }

    public void sendarray(test array) {    }
    
}


Code:
public class test2 {

    private void test2() {    }

    public void start(test array) {   }
   
}

Ich sag schon mal Danke für jeden Schubser in die richtige Richtung.
 
Was mir als erstes auffällt, ist dass die Arraydefinition in der Methode testarray ins nichts verschwindet. Um es in der anderen Klasse verwenden zu können, musst du es lokal im Objekt oder in der Klasse allgemein speichern.

Es müsste eine Objektvariable angelegt werden wie hier:

Code:
public class test {

    public String[] arraylokal;

    public test() {  }

    public void testarray() {
        String[] array = new String [3];
        array[0] = "test1";
        array[1] = "test2";
        array[2] = "test3";
        this.arraylokal = array; //hier passiert die Belegung bzw. Speicherung
    }

    public void sendarray(test array) {    }
    
}

In der anderen Klasse kannst du dann beispielsweise so darauf zugreifen:

Code:
public class test2 {

    private void test2() {    }

    public void start(test param_test) {
        param_test.arraylokal[x]; //Zugriff auf Stelle x vom Array
    }
   
}

Achso, zum Ausführen brauchst du natürlich noch eine ausführbare Methode, mit der der Ablauf angestroßen wird, meistens genannt "public static void main(string[] args)". Weiß nicht, ob du schon eine hast. Ansonsten wäre z.B. möglich:

Code:
public class test3 {

    public static void main(String[] args) {
        test = new test();
        test2 ) new test2();
        test2.start(test);
    }

}
 
Zuletzt bearbeitet:
Ich vermute mal die Methode Start in der Klasse Class2 soll mit dem Array arbeiten.
Dann musst du im Kopf der Methode nur sagen das du ein Array haben willst.
Code:
public void start(string[] array) {   }

Und an der stelle wo du das Array aufrufen willst schreibst du:
Code:
Class2Instanz.start(array);
Das wird vermutlich in der Methode testarray passieren, da nur dort das Array bekannt ist.
 
Zuletzt bearbeitet:
Danke für die Antworten
Mittlerweile bin ich selber auf die richtige Herangehensweise gekommen. Meine Lösung sieht zwar etwas anders aus, aber im Grunde geht es ja nur darum, der Methode klipp und klar zu sagen, dass da ein Array ankommt. An nichts anderem hat es letzten Endes gehangen.

Es scheint ein Naturgesetz zu sein, dass man stundenlang über einem Problem hängt und nicht weiter kommt, aber sobald man der Welt sein Unwissen in Form einer Frage in einem Forum mitgeteilt hat, kommt man von alleine auf die Lösung :/

Nochmals danke :)

Edit: Momentan sieht es wie folgt und es scheint alles so zu funktionieren, wie ich es möchte:
Code:
public class test {

    public test() {  

        String[] array = new String [3];
            array[0] = "test1";
            array[1] = "test2";
            array[2] = "test3";

        new test2(array);

    }
    
}

Code:
public class test2 {

    public test2(String[] array) {

        String test;
        test = array[1];

        System.out.println(test);

    }
   
}
 
Zuletzt bearbeitet:
Nun habe ich eine weitere Frage, die so trivial ist, dass ich dafür kein eigenen Thread aufmache. Und zwar hätte ich gerne einen Hinweis, wie ich ein mehrdimensionales Array

char[][] board = new char [6][7];

schon bei der Initialisierung komplett mit einem Zeichen füllen kann, ohne jeden Wert des Arrays einzeln initialisieren zu müssen, was dann so aussähe:

board[1][0] = '\u00A0';
board[2][0] = '\u00A0';
board[3][0] = '\u00A0';
.
.
.

Komme ich da nur mit einer Schleife weiter (wie ich es jetzt gemacht habe) oder geht das auch eleganter?

Außerdem würde ich gerne wissen, wo mit ein Array eigentlich gefüllt ist, wenn man keine Werte initialisiert. Klar, mit nichts, aber vielleicht enthalten leere Werte doch etwas, wonach man bspw. mit einer if-Anweisung fragen kann. Anders gefragt, kann ich bspw. mit einer if-Anweisung prüfen, ob ein Wert größer als nichts (nicht mal 0) ist, also "if (board[0][0] != ??? "?

Meine Bücher und diverse Webseiten haben mit elider nicht weiter geholfen.
 
Zuletzt bearbeitet:
Ja das geht nur mit einer Schleife.

Und den Wert den du suchst heißt null. Das ist noch etwas anderes als 0.
 
Ja, ich hab mir schon gedacht, dass es null sein müsste, aber es tut net. NetBeans meckert, dass die Datentypen nicht zusammen passen würden (array = char vs. nulltyp), zumindest wenn ich es so mache:

if (board[row][move] == null) board[row][move] = 'X';

Wie müsste die Anweisung denn korrekt lauten, damit es funktionieren soll?

Aktuell habe ich das Array mit einer For-Schleife mit geschützten Leerzeichen gefüllt und das funktioniert auch wunderbar mit meinen Abfragen. Wenn ich ebenso nach Belieben nach null fragen könnte, könnte ich mir das Befüllen des Arrays sparen, was aber nur drei Zeilen Code ausmacht und sonst nichts bringen würde. Ein "empty char" funtkioniert auch nicht.
 
Zuletzt bearbeitet:
Hi GevatterTod,

mit welchen Werten die Felder des Arrays initialisiert werden, hängt von dem Datentyp ab, den Du nutzen willst (selbiges gilt für Variablen). Wenn Du Objekte benutzt, dann ist es null, aber wenn Du primitive Datentypen nutzt (z.B.: int, float, char, ...), dann hängt der Wert von dem jeweiligem Datentyp ab. Dies gilt natürlich immer dann, wenn Du nicht explizit einen Wert angibst. Hier findest Du eine kleine Tabelle mit den Werten.

schöne Grüße
munchkin
 

Ähnliche Themen

Zurück
Oben