# Spielfeld mit 10x10 Felder



## m.i.m.i (10. Jan 2013)

hallo,

hab eine grundsätzliche frage wie man sowas am besten angeht:

habe ein spielfeld mit 10x10 felder in jedes feld soll eine instanz der klasse "Feld", die folgenden status entweder 0 für leer, 1 für objekt 1, 2 für objekt 2 haben kann. dieser status kann mit getStatus() abgerufen werden und mit setStatus(0/1/2) gesetzt werden. soweit sollte mal alles ok sein.

klasse Feld.java

```
public class Feld{

	public static int status;//0:leer, 1:fuchs, 2:hase

	//konstruktor
	public Feld()
	{	
	status=0;
	}

	//get set
	public static int getStatus()
	{
		return status;
	}
	public static void setStatus(int s)
	{
		status=s;
	}

}
```

aber dann das problem: mein ansatz wäre in der klasse Spiel wird das Spielfeld generiert mit einem 2-dim Array.


```
Feld[][] spielFeld = new Feld[10][10];
```

dann im konstruktor initialisiert mit jeweils 0:


```
public Spiel()
	{
		//initialisiere Felder mit 0
		for (int i=0;i<10;i++){
			for (int j=0;j<10;j++){
				spielFeld[i][j].setStatus(0);
				System.out.print(spielFeld[i][j].getStatus()+"|");
			}System.out.println();
		}
         }
```

nur wenn ich jetzt versuche in einer anderen methode ein feld auf 2 zu setzen, setzt er alle instanzen auf 2 wenn ich das spielfeld ausgebe? warum ist das so? muss ich irgendwie anders das spielfeld anlegen?


```
public void verteileHasen()
	{
	     spielFeld[1][1].setStatus(2);

             //gib aus spielfeld
               for (int c=0;c<10;c++){
			for (int d=0;d<10;d++){
				System.out.print(spielFeld[c][d].getStatus()+"|");
		         }System.out.println();
		
		}
        }
```


----------



## static123454 (10. Jan 2013)

```
public static int status;//0:leer, 1:fuchs, 2:hase
```

Dann erläuter erstmal, warum der Status static seien soll


----------



## m.i.m.i (10. Jan 2013)

hoppla soll eigentlich nicht so sein

geänderte klasse feld:


```
public class Feld{

	private int status;//0:leer, 1:fuchs, 2:hase

	//konstruktor
	public Feld()
	{	
	status=0;
	}

	//get set
	public int getStatus()
	{
		return status;
	}
	public void setStatus(int s)
	{
		status=s;
	}

}
```

daran lags aber leider nicht ich glaub das problem ist ein grundsätzliches


----------



## SlaterB (10. Jan 2013)

Thema erfolgreich beendet oder besteht noch ein Problem?
besser immer deutlich den Stand dokumentieren, darf auch ruhig etwas dauern mit der Antwort

edit: ok, mit Nachtrag

edit: es ist nicht sichtbar wie das Array befüllt wird, vielleicht in allem dasselbe Objekt,
besser ein vollständiges Testprogramm: Array erstellen, befüllen, eins setzen, für alle ausgeben, überall gleich?


----------



## X5-599 (10. Jan 2013)

Entweder ich hab beim Überfliegen etwas übersehen, oder du erzeugst nirgens ein Feld Objekt. Ich tippe mal du machst das an nicht gezeigter Stelle. Und weiter tippe ich du erzeugst genau 1 Feld Objekt und legst das in alle "Fächer" deines zweidimensionalen Arrays. Darum enthält jedes Fach eine Referenz auf dasselbe Objekt.
Lieber sowas:


```
for (int i=0;i<10;i++){
            for (int j=0;j<10;j++){
                spielFeld[i][j] = new Feld();
                //... set status oder was auch immer
            }
}
```


----------



## Spin (10. Jan 2013)

> Entweder ich hab beim Überfliegen etwas übersehen, oder du erzeugst nirgens ein Feld Objekt. Ich tippe mal du machst das an nicht gezeigter Stelle. Und weiter tippe ich du erzeugst genau 1 Feld Objekt und legst das in alle "Fächer" deines zweidimensionalen Arrays. Darum enthält jedes Fach eine Referenz auf dasselbe Objekt.



Gerade beim Schreiben dein Beitrag gesehen :toll:

Genau, der TO erstellt zwar ein Objektarray, aber keine Objekte an der Stelle.

@ Slater 



> edit: es ist nicht sichtbar wie das Array befüllt wird, vielleicht in allem dasselbe Objekt,
> besser ein vollständiges Testprogramm: Array erstellen, befüllen, eins setzen, für alle ausgeben, überall gleich?




```
public Spiel()
    {
        //initialisiere Felder mit 0
        for (int i=0;i<10;i++){
            for (int j=0;j<10;j++){
                spielFeld[i][j].setStatus(0);
                System.out.print(spielFeld[i][j].getStatus()+"|");
            }System.out.println();
        }
         }
```

War doch zu sehen???:L


----------



## SlaterB (10. Jan 2013)

@Spin
das was X5-599 postet ist nicht zu sehen,

dass keine NullPointerException erwähnt wird läßt vermuten dass das Array doch befüllt ist, wann und wo auch immer, aber womit?


----------



## static123454 (10. Jan 2013)

Spin hat gesagt.:


> [...]
> 
> @ Slater
> 
> ...



In der ersten Version hat er jedoch auf die static getter/setter zugegriffen, wodurch er keine Objekte erstellen musste. Nach der Korrektur müsste er das jedoch getan haben oder, wie erwähnt, eine NPE erhalten.


----------



## ursteiner (10. Jan 2013)

```
public static int status;//0:leer, 1:fuchs, 2:hase
```

Wenn du verschiedene Objekte mit verschiedenen stati erzeugen willst, darfst du das Feld status nicht static machen.
Genau wie die Methode get und set Status.


----------



## m.i.m.i (10. Jan 2013)

```
for (int i=0;i<10;i++){
			for (int j=0;j<10;j++){
				spielFeld[i][j]= new Feld();
				spielFeld[i][j].setStatus(0);
				System.out.print(spielFeld[i][j].getStatus()+"|");
			
			}System.out.println();
		
		}
```

diese zeile wars vielen dank an alle!

@SlaterB: hab mich schon gewundert warum jetzt diese nullpointerexception aufgetaucht ist???:L

habt geduld mit mir ich kämpfe mich grad im selbststudium durch mit  private, public, static, ....


----------



## SlaterB (10. Jan 2013)

m.i.m.i hat gesagt.:


> @SlaterB: hab mich schon gewundert warum jetzt diese nullpointerexception aufgetaucht ist???:L


wundern und nicht erwähnen, nette Kombi


----------



## static123454 (10. Jan 2013)

ursteiner hat gesagt.:


> ```
> public static int status;//0:leer, 1:fuchs, 2:hase
> ```
> 
> ...


[OT]Hast du den Thread und die bisherigen Antworten vorher vielleicht mal kurz überflogen? [/OT]

@m.i.m.i.
Wenn neue Fehler auftreten, wäre es Hilfreich diese auch zu benennen. Sonst kann man dir schlecht weiterhelfen.


----------



## m.i.m.i (10. Jan 2013)

sorry, ich dachte das wär wieder ein anderer fehler gewesen, der durch das weglöschen des unnützen codes entstanden ist....


----------



## SlaterB (10. Jan 2013)

> ich dachte das wär wieder ein anderer fehler gewesen

war es ja quasi auch und genau das ruhig erwähnen statt mit 'daran lags aber leider nicht' anzudeuten, das Problem wäre noch dasselbe, und weitere Lösungen suchen zu lassen

freilich kann man sämtliche Umstände auch erahnen, haben ja auch einige


----------

