Element in Array nach unten verschieben

bola

Mitglied
Moin,
ich habe gerade folgendes Problem:
Ich habe ein einfaches Spielfeld, das aus Punkten besteht. Außerdem eine "Spielfigur". Diese soll nun nach links, rechts, oben und unten verschoben werden. Jeweils um eine Stelle.
Das funktioniert, bis auf nach unten. Hier springt die Spielfigur ans Ende des Arrays.
So langsam bin ich mit meinem Latein am Ende. Ich hoffe, ihr könnt helfen.

Java:
case "s":
                    for(int i = 0; i < spielfeld.length-1; i++){
                        for(int j = 0; j < spielfeld.length; j++){
                            if(spielfeld[i][j].equals("P")) {
                                spielfeld[i][j] = ".";
                                spielfeld[i+1][j] = "P";
                                break;
                            }
                        }
                    }
 
Hallo,

das "break" unterbricht nur die innere for-Schleife (über j). Die äußere for-Schleife (über i) läuft weiter. Dadurch wird das "P" bis ans Ende durchgereicht.

Gruß
Fritz
 
Besten Dank, Fritz. Das funktioniert. Nun kommt es aber zum nächsten Problem:
Das P springt eine Zeile tiefer, hoch, links und rechts funktioniert danach auch, nur noch weiter runter nicht.
 
Genau. So sieht der Spaß jetzt aus:
Java:
case "s":
                    for(int i = 0; i < spielfeld.length-1; i++){
                        for(int j = 0; j < spielfeld.length; j++){
                            if(spielfeld[i][j].equals("P")) {
                                spielfeld[i][j] = ".";
                                spielfeld[i+1][j] = "P";
                                break;
                            }
                        }
                        break;
                    } 
                    break;
Sobald ich versuche, ein zweites Mal s zu drücken, funktionieren auch die anderen Bewegungen nicht mehr. Drücke ich aber x, um das Programm zu beenden, kommt entsprechende Meldung.
 
Wieso hast du denn jetzt drei break Anweisungen drin? Reichen nicht zwei aus um jeweils dir for-schleifen zu beenden, also das Break aus der if Anweisung raus nehmen?
 
Das dritte break Brauchst du für case 's': 🙂
Aber Ja das break sollte aus der if raus in die for Schleife 🙂
 
Ich habe jetzt mal etwas rumprobiert. Irgendwie funktioniert doch nix so richtig, wie es soll. Per d geht das P z.B. nur bis zur drittletzten Spalte.
Starte ich mit dem P in der letzten Zeile, funktioniert w für hoch plötzlich nicht mehr.
Als würde die for-Schleife das Array nicht komplett durchlaufen. Als würde etwas fehlen, auf das sich das P bewegen kann. 😕
 
Dann probiere es doch mal so:
Java:
boolean gefunden = false;
for(int i = 0; i < spielfeld.length-1 && !gefunden; i++){
    for(int j = 0; j < spielfeld.length; j++){
        if(spielfeld[i][j].equals("P")) {
            spielfeld[i][j] = ".";
            spielfeld[i+1][j] = "P";
            gefunden = true;
            break;
        }
    }
}
Eine Alternative dazu wäre ein Label.
 
Das ist es. Vielen Dank.
Edit: Zu früh gefreut. Das Problem, dass das P bis zur viertletzten Spalte nur geht und danach gar nix mehr funktioniert, bleibt trotzdem
 
Zuletzt bearbeitet:
Hallo,

ist dein Spielfeld quadratisch?
Ansonsten ist deine Schleife über j falsch; die Bedingung muss lauten:
Java:
j < spielfeld[i].length

Gruß
Fritz
 

Neue Themen


Zurück
Oben