# Array Konstruktor



## snibbe (10. Dez 2011)

Hallo,

ich bearbeite gerade folgende Teilaufgabe. In einer Klasse Gitter habe ich ein leeres Gitter mit einer beliebigen Kantenlänge zu erstellen. Der Konstruktor lautet dazu:

```
Gitter (int kantenlaenge)
```
Es handelt sich hierbei um ein quadratisches zweidimensionales Array.

In einer Anwendung soll dann der Konstruktor aufgerufen und die kantenlaenge festgelegt werden.

Bei einem Array muss ich aber, sofern ich das richtig verstanden habe, ja bereits Namen vergeben. 
Daher sieht mein Konstruktor wie folgt aus (die Variable int kantenlaenge wurde bereits erzeugt):

```
public Gitter(int kantenlaenge)	{
char welt [][] = new char [kantenlaenge][kantenlaenge]; //Array wird später mit Satzzeichen gefüllt
}
```

In der Anwendung rufe ich diesen testweise mit

```
Gitter welt = new Gitter(5);
```
auf.

Der Compiler meckert zwar nicht, allerdings habe ich dazu folgende Frage:

In der Klasse Gitter habe ich noch weitere Methoden zu bearbeiten, welche z.T. auf das array zugreifen müssen. Z.B. für die Ausgabe. Wenn ich aber in einer beliebigen Methode welt verwende, so wird das Array ja nicht gefunden. 
Meine Ausgaben Methode: 

```
public void ausgeben()	{

System.out.println();

for(int i = 0; i < kantenlaenge; i++){
for(int j = 0; j < kantenlaenge; j++){
System.out.print(" " + welt[i][j]); }
System.out.print('\n');}
System.out.println();
}
```
Wie kann ich hier aus der Anwendung darauf zugreifen (welt.ausgeben() würde ja nicht funktionieren)?
Oder habe ich den Konstruktor falsch erstellt? Wenn ich das Array außerhalb des Konstruktors erstelle, habe ich zwar in allen Methoden die Möglichkeit darauf zuzugreifen, doch funktioniert dann ja die Zuweisung der kantenlaenge nicht mehr.

Vielen Dank im Voraus.


----------



## codechaos (10. Dez 2011)

Hallo snibbe!

Um auf Variablen/Arrays innerhalb einer Klasse zuzugreifen gibt es mehrere Varianten. Zuerst einmal die "naive" Variante. Hier wird das Attribut als public deklariert.

```
public class Gitter {
	public char[][] welt;
	public Gitter(int kantenlaenge) {
		this.welt = new char[kantenlaenge][kantenlaenge];
	}
}
```
Damit könntest du dir erst ein neues Gitter Objekt erzeugen und dann direkt auf das Array zugreifen.
	
	
	
	





```
/* ... */
public void eineMethode() {
	Gitter instanz = new Gitter(5);
        // Hier ist der Arrayzugriff
	char[][] weltWerte = instanz.welt;
	// oder zum Beispiel so
	System.out.println(instanz.welt[0][1]);
}
/* ... */
```
Diese Lösung hat allerdings den Nebeneffekt, dass man nicht nur lesend, sondern auch schreibend auf das Array zugreifen kann. Häufig gilt es genau dies zu verhindern, weil man zum Beispiel im Team arbeitet und die Kollegen durch ihren Code keine unerwünschten Seiteneffekte auslösen können sollten.
Dafür bietet sich eine Methode an, die entweder das ganze Array zurückgibt oder nur einzelne Werte.

```
/* ...*/
// Variante 1:
public char[][] getWelt() {
	return this.welt;
}

// Variante 2:
public char getValueAt(int x, int y) {
	return this.welt[x][y];
}
/* ... */
```


----------



## snibbe (10. Dez 2011)

Vielen Dank für die ausführliche Erläuterung. Nun funktioniert auch alles =)


----------

