kostenloser Webspace werbefrei: lima-city


[Java] Problem beim 2D-Array Überschreiben

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Meine Java-Kenntnisse streben gegen Null, bin gewohnt in C / C++ zu programmieren. Deswegen bin ich mir nicht sicher, ob ich einfach was falsch mache, oder das Problem doch komplexer ist...
    Ich schreibe gerade eine Android App (4-Gewinnt), und habe ein merkwürdiges Problem mit einem Zweidimensionalem Array.

    In meiner Gewinn-Kalkulations-Klasse habe ich global 2 Variablen angelegt.
    private int[][] field = new int[6][7];	// -> field[y][x]
    private int win = 0;	// 0 -> Niemand hat gewonnen, 1 -> Spieler 1 hat gewonnen (rot), 2 -> Spieler 2 hat gewonnen (gelb).


    Die verschiedenen Methoden belegen das Spielfeld "field" dann an der passenden Stelle mit 1 oder 2, setzen also die gelben und roten Steine ins Array.

    Die reset Methode soll dann das Spielfeld wieder leeren...
    public void reset()
    	{	
    		// Reset the Field
    		int x = 0;
    		int y = 0;
    		for(y = 0; y <= 5; y++)
    		{
    			for(x = 0; x <= 6; x++)
    			{
    				field[y][x] = 0;
    			}
    		}
    		// Reset win
    		win = 0;		
    	}


    (Eigentlich wollte ich zum Resetten das Objekt einfach löschen (den Speicher frei geben) und neu anlegen, aber das geht in Java scheinbar nicht...)
    Ich bin davon ausgegangen, dass ich nach dem Reset das Spielfeld wieder neu belegen kann, aber die getter-Methode, die das Spielfeld ausliest gibt an den Stellen, an denen vor dem reset ein Spielstein lag (also im Array nicht 0 stand) nun wieder nicht 0 zurück.
    D.h. beim 2. Spiel (nach einem Reset) kann ich z.B. nicht in die unterste Reihe einwerfen, weil diese schon belegt ist. Der Stein landet dann sozusagen in der Luft, und nicht ganz unten am Boden.

    Ich lade 2 Screens hoch, um mein Problem zu verdeutlichen:
    Vor dem Reset: http://sincer.lima-city.de/4gewinnt/spiel1.png
    Nach dem Reset wieder ein paar Steine aufs Feld gegeben, um das Problem sichtbar zu machen: http://sincer.lima-city.de/4gewinnt/spiel2.png

    Also eigentlich wird nach einem Reset der neue Stein nicht überhalb des gelöschten Steins gelegt, sondern darauf. Öfter resetten bringt auch nichts :P

    Hat jemand eine Idee, woran das liegen könnte?

    lg
    Sincer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Zwei Probleme: Zum Ersten macht man FOR- Schleifen nicht so:
    int i = 0;
    for (i = 0; i < xyz; i++) {
    sondern initialisiert das i zum ersten Mal in der Schleife. Das heißt die obere Zeile fällt einfach weg.
    for (int i = 0; i < xyz; i++) {
    Das sollte jetzt aber nicht schlimm gewesen sein, denn das zweite Problem ist wichtiger: Ein Feld sollte man nach einer der beiden unteren Möglichkeiten zurücksetzen:
    field = new int[6][7];
    // ODER
    field = null;
    Wobei die obere Möglichkeit für dein Problem empfehlenswert ist, immerhin willst du das Feld wieder benutzen und musst es dann nicht neu initialisieren.
    Also brauchst du keine Schleifen. :wink:

    Beitrag zuletzt geändert: 21.8.2010 14:32:23 von toolz
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Vielen Dank für deine rasche Antwort :)
    Leider hat es mein Problem nicht behoben, was mich vermuten lässt, dass es eine andere Ursache als das Spiel-Feld Array hat
    *am Kopf kratz*

    Das mit dem initialisieren der Variablen außerhalb der for-Schleife mache ich normalerweise, damit ich auch außerhalb der Schleife auf den Wert eines Incrementors zugreifen kann. (z.B. wenn man mit Break eine Schleife verlässt...)
    Zugegeben, in diesem Fall brauche ich das nicht ^^

    Das das Array in Java eine Klasse ist, daran muss ich mich noch gewöhnen ^^
    Die Möglichkeit das Array komplett neu anzulegen finde ich n1, da schnell und unkompliziert :)

    ...
    YES!!
    Und da ich nun an einer anderen Stelle angefangen habe, den Fehler zu suchen, habe ich ihn auch gefunden :D
    *freu*

    Vielen Dank für deine Hilfe :)
    Sincer
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!