Spielfeld mit 10x10 Felder

m.i.m.i

Mitglied
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
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.

Java:
Feld[][] spielFeld = new Feld[10][10];

dann im konstruktor initialisiert mit jeweils 0:

Java:
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?

Java:
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();
		
		}
        }
 
Zuletzt bearbeitet von einem Moderator:
Java:
public static int status;//0:leer, 1:fuchs, 2:hase

Dann erläuter erstmal, warum der Status static seien soll 😉
 
hoppla soll eigentlich nicht so sein

geänderte klasse feld:

Java:
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 🙁
 
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?
 
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:

Java:
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
            }
}
 
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?

Java:
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
 
@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?
 
[...]

@ Slater



Java:
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

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.
 
Code:
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.
 
Java:
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, ....
 
Code:
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.
[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.
 
> 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
 

Zurück
Oben