dass der rover auf der Position leigt wo ein Hindernis liegt.Was muss passieren, damit die findeRover-Methode eine Exception wirft?
dass der rover auf der Position leigt wo ein Hindernis liegt.
verwirrt mich gerade hahahaaEin kleiner Tipp: Der Text der Exception sagt schon alles aus...
Das würde bedeuten, dass das Programm mit einer Exception abbricht.dass der rover auf der Position leigt wo ein Hindernis liegt.
ja genau aber das wäre doch nicht vorteilhaft, wäre es nicht besser wenn man den rover auf den hinderniss anzeigen lässt?Das würde bedeuten, dass das Programm mit einer Exception abbricht.
ja genau aber das wäre doch nicht vorteilhaft, wäre es nicht besser wenn man den rover auf den hinderniss anzeigen lässt?
und wenn nein wie solll ich die expetion gestalten?
Alter Schwede... Es ist wirklich schwer, Dich auf irgendwas hinzuweisen, ohne Dir die ganze Lösung vorzukauen. Hast Du das Programm schon einmal ausgeführt? Wird denn eine Exception geworfen? Wenn nein, was ist der Grund dafür?ja genau aber das wäre doch nicht vorteilhaft, wäre es nicht besser wenn man den rover auf den hinderniss anzeigen lässt?
Alter Schwede... Es ist wirklich schwer, Dich auf irgendwas hinzuweisen, ohne Dir die ganze Lösung vorzukauen. Hast Du das Programm schon einmal ausgeführt? Wird denn eine Exception geworfen? Wenn nein, was ist der Grund dafür?
private static int[] findeRover() {
Set<Entry<int[], String>> entrySet = marsKarte.entrySet();
for (Entry<int[], String> entry : entrySet) {
if (entry.getValue() != null && !entry.getValue().equals("#"))
return entry.getKey();
}
throw new IllegalStateException("Rover missing in action");
}
Sollte aber klappt nicht weil der River sich dort befindet wo ein Hindernis liegt.Wir halten fest: der Rover ist vorhanden. Funktioniert denn die Bewegungsmethode?
Sollte aber klappt nicht
Wir halten fest: der Rover ist vorhanden.
weil der rover immer vorhanden ist, und die bedinungen nie eintreffen
Die Frage war nicht, ob Du den Rover angezeigt bekommst, sondern ob die Bewegungsmethode funktioniert. Das kannst und solltest Du überprüfen, indem Du Dir z. B. die Position des Rovers in Form von Koordinaten ausgeben lässt.Sollte aber klappt nicht weil der River sich dort befindet wo ein Hindernis liegt.
Ja das funktioniert, die Methode klappt. Ich habe dies mit anderen strings getestet.Die Frage war nicht, ob Du den Rover angezeigt bekommst, sondern ob die Bewegungsmethode funktioniert. Das kannst und solltest Du überprüfen, indem Du Dir z. B. die Position des Rovers in Form von Koordinaten ausgeben lässt.
Was passiert, wenn die Methode abkackt?Die Methode kackt nur an wenn halt ein Hindernis da
Der River kann kein Schritt machen.Was passiert, wenn die Methode abkackt?
Liest Du eigentlich meine Kommentare?den sieht man doch garnicht den rover, wie soll sich die koordiante ändern?
Das kannst und solltest Du überprüfen, indem Du Dir z. B. die Position des Rovers in Form von Koordinaten ausgeben lässt.
den sieht man doch garnicht den rover, wie soll sich die koordiante ändern?
Wir halten fest: der Rover ist vorhanden.
keine Ahnung um ehrlich zu seinNur weil du den Rover nicht siehst, bedeutet das nicht, dass er keine Koordinaten hat, die sich ändern oder geändert haben.
Wir haben ja bereits festgestellt:
er hat die selben koordianten wie der hinderniss selbst, das heißtNur weil du den Rover nicht siehst, bedeutet das nicht, dass er keine Koordinaten hat, die sich ändern oder geändert haben.
Wir haben ja bereits festgestellt:
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }) == null) {
System.out.print(" ");
continue;
}
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#"))
System.out.print("#");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n"))
System.out.print("^");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("s"))
System.out.print("V");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("e"))
System.out.print(">");
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("w"))
System.out.print("<");
nehmen wir an rover hat gleiche koordianten wie wie hindernisse, dann würd er die untere if bedinung die für den rover zuständig ist, garnicht printen?
man könnte doch theoretisch die bedinung hier ändern?
Versuch's doch mal.man könnte doch theoretisch die bedinung hier ändern?
Mein Rücken tut schon wehAha... Wir kommen der Sache näher.
Versuch's doch mal.
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }) == null) {
System.out.print(" ");
continue;
}
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#") && getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n") )
System.out.print("^"); //hier aber funz net
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#"))
System.out.print("#");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n"))
System.out.print("^");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("s"))
System.out.print("V");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("e"))
System.out.print(">");
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("w"))
System.out.print("<");
}
Mein Rücken tut schon weh
habe weiter rumpboriert, und ich bin auf etwas gekommen, also zu aller erst weiß ich das in de rmove Methode die aktuelle positiov´n immer geändert wird das heißt, der Pfeil bewegt sich und die akutelle Position ändert sich mit, nehmen wir an der Pfeil würde in der if bedinung von move auf ein Hindernis landen, dann könnte man theoretisch eine if abfrage am ende der Methode machen der so aussiehtAha... Wir kommen der Sache näher.
Versuch's doch mal.
//der code de rmethode
if(getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#")){
//marsKarte.put(aktuellePosition, "w|e|s|n");
}
Ja, die Methode für die Bewegung funktioniert also.also zu aller erst weiß ich das in de rmove Methode die aktuelle positiov´n immer geändert wird das heißt, der Pfeil bewegt sich und die akutelle Position ändert sich mit
Ja. Suche nach dem Grund, warum es nicht funktioniert.if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#") && getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n") ) System.out.print("^"); //hier aber funz net
Denke der Grund warum das nicht liegt ist weil die Hindernisse und Rover die gleichen Koordinaten haben. Und man dann zusammen Printet.Ja, die Methode für die Bewegung funktioniert also.
Zu Deinem Kommentar #125:
Ja. Suche nach dem Grund, warum es nicht funktioniert.
Die von Dir geänderte Bedingung kann übrigens niemals true sein, denn dann müsste gelten "#".equals("n").
Du bist an der Stelle schon ganz nah dran, herauszufinden, wo der Bug liegt. @kneitzel hat Dir schon am Anfang einen entscheidenden Hinweis diesbezüglich gegeben.
ist meine Idee mit den selben koordianten erstmal richtig?Wenn Du im Augenblick "zu tot" bist, musst Du eine Pause einlegen und dann später erneut dran gehen.
Wir werden die Aufgabe nicht für Dich lösen. Wir helfen Dir mit Hinweisen, damit Du Dir das nötige Wissen / eine mögliche Vorgehensweise erarbeiten kannst.
Also müsstest Du eine Lösungsidee erarbeiten. Spiel es ggf. auf einem Zettel durch. Was könnte man denn alles machen um das zu ändern?
Meine Frage wäre jetzt ob man eine Expception schmeißen musst oder dass so fixen dass der Roboter da rauf ist ?Wenn Du im Augenblick "zu tot" bist, musst Du eine Pause einlegen und dann später erneut dran gehen.
Wir werden die Aufgabe nicht für Dich lösen. Wir helfen Dir mit Hinweisen, damit Du Dir das nötige Wissen / eine mögliche Vorgehensweise erarbeiten kannst.
Also müsstest Du eine Lösungsidee erarbeiten. Spiel es ggf. auf einem Zettel durch. Was könnte man denn alles machen um das zu ändern?
Ja, das geht in die richtige Richtung. Ich würde vor allem den Gedanken mit dem selben key weiterspielen...ist meine Idee mit den selben koordianten erstmal richtig?
Erst mal sollst Du nur dafür sorgen, dass der Rover nicht von der Karte verschwindet.Meine Frage wäre jetzt ob man eine Expception schmeißen musst oder dass so fixen dass der Roboter da rauf ist ?
Dafür würde eine if abfrage in frage kommen.Ja, das geht in die richtige Richtung. Ich würde vor allem den Gedanken mit dem selben key weiterspielen...
Erst mal sollst Du nur dafür sorgen, dass der Rover nicht von der Karte verschwindet.
also muss ich es so fixen dass er funzt, vllt liegt es an der Datenstruktur, denn wenn ich überlege dass die beiden die gleichen koordianten haben dann weiß ich ja dass die in map gespeichert sind aber die map kann doch nur ein inhat besitzen?Also hier kommt etwas ins Spiel, was "Debugging" genannt wird. Idealerweise lässt man dazu die Software Schritt für Schritt laufen bzw. lässt die Software bis zu einem sogenannten Breakpoint laufen, ab dem man dann Schritt für Schritt die Software ausführen lassen kann. Zusätzlich zeigt einem der Debugger auch den Inhalt von Variablen an und so ....
Wenn Dir das erst einmal zu komplex scheint, dann gibt es die Möglichkeit, andere Dinge zu machen:
- Die trivialste ist, dass man weitere Ausgaben einbaut. Also an gewissen Stellen wird einfach ausgegeben, wo Du Dich befindest gefolgt von den Variablen, die Dich interessieren.
- Du kannst das aber auch deutlich komplexer machen. So könntest Du z.B. eine Funktion schreiben, die den Inhalt der Karte ausgibt. Und zwar nicht die "graphische" Ausgabe, die Du schon hast, sondern wirklich alle Werte. Also sprich: Du gehst hin und für jeden gespeicherten Wert gibst du aus: Die Koordinate und den dazu gespeicherten String. Dann kannst Du diese Funktion an beliebigen Stellen ausführen. Ggf. zusammen mit Unterbrechungen, d.h. nach der Ausgabe musst Du einmal Enter drücken weil Du die Zeile einliest. Das könntest Du z.B. bei jeder Änderung aufrufen....
Und deine Frage bezüglich Exception:
Wenn Du für die Software einen Zustand definierst, der nicht gestattet ist und findest, dass dieser Zustand eintritt, dann ist es denkbar, eine Exception zu werfen. Aber damit hast Du das Problem nicht gelöst! Das Ergebnis ist ggf., dass die Applikation direkt beendet wird. (Stell Dir vor du arbeitest relativ lange an einer Applikation und dann schließt die sich einfach so - und Deine Daten sind weg. Willst Du das?)
Also eine Exception zu werfen ist erst einmal blöd - Du willst ja, dass die Applikation sicher läuft! Also solltest Du schauen, was wann wie das Problem verursacht und dir dann überlegen, wo Du eingreifen willst. Hier kommt dann auch oft der Produkt-Owner ins Spiel, denn der definiert ja, was das gewünschte Verhalten ist.
Wenn der Rover bei der Initialisierung auf ein Hindernis gesetzt wird, was ist dann?
a) Das ist ein Zustand, der OK, ist. Wenn der Rover auf einem Hindernis steht, dann soll "M" ausgegeben werden. (Das M ist jetzt zufällig ausgewählt worden)
b) Es darf immer nur ein Objekt auf einem Feld sein, wenn der Rover auf ein besetztes Feld kommt, dann verschwindet das bisherige Objekt.
c) Der Rover darf nicht auf ein Objekt gesetzt werden, Bewegungen dürfen dies nicht zulassen, bei der Initialisierung muss der Rover so lange gesetzt werden, bis der Rover auf ein leeres Feld gesetzt wird ...
d) ....
Es gibt hier sehr viele Idee. Was "richtig" oder "erwünscht" ist, muss festgelegt werden. Das können wir aber nicht. Das weisst Du evtl. auf Grund der Aufgabenstellung.
Wir lernen das noch, wenn ich weiß wie es gehen würde dann würde es machen hahaah. Jungs hilft mir 100 Punkte zu bekommen.Also diese Frage musst Du Dir selbst beantworten. Die Möglichkeiten (Debugger, zusätzliche Ausgaben) dazu habe ich Dir genannt.
Wichtig ist: Keine Vermutungen sondern prüfe es! (In der professionellen Softwareentwicklung hätte man für alles auch sogenannte Unit Tests!)
Und bezüglich der vorhandenen Problematik hatte ich schon was geschrieben. Schau dir die Antwort #54 im Detail an.
Nah bei mir ist das so dass ich Lösungen direkt verstehenAlso ich bezweifle, dass jemand hier Deine Aufgabe erledigen wird. Und das, was ich Dir geschrieben habe, solltest Du können, denn Du hast alle notwendigen Dinge bereits im Code.
In der get Funktion siehst Du, wie Du über alle Elemente der Karte gehen kannst. Und Ausgaben auf dem Bildschirm hast Du auch schon gemacht. Also solltest Du in der Lage sein, alle Entry elemente der Map auf dem Bildschirm auszugeben.
Also wenn Du 100 Punkte haben willst, dann tue etwas dafür. Die 100 Punkte setzen nun einmal gewisses Wissen und gewisse Aktivitäten voraus. Also eigne Dir das notwendige Wissen an und führe Aktivitäten durch! Oder verzichte schlicht auf die 100 Punkte.
Wobei ich bezweifle, dass die Lösung selbst zu 100 Punkten führen wird. Sobald die Lehrkraft Fragen stellt wird sofort klar, dass die Lösung nicht von Dir stammen kann, denn Du wirst nicht erläutern können, was Du aus welchem Grund wie gelöst hast. Im ungünstigsten Fall würde die Lehrkraft dir 0 Punkte geben weil Du versucht hast, eine fremde Leistung als Deine auszugeben, was ein Betrug ist....
Ich brauche nur den vodeansatz mit pseudicodeNah bei mir ist das so dass ich Lösungen direkt verstehen
Ich versteh es ja. Aber mir fehlt der Tipp was genau ich machen muss ?
Okay meien frage wäre wie prüfe ich ob der rover auf den # liegt ? Weiß nicht wie und wo ich das anstellen soll?Also hier kommt etwas ins Spiel, was "Debugging" genannt wird. Idealerweise lässt man dazu die Software Schritt für Schritt laufen bzw. lässt die Software bis zu einem sogenannten Breakpoint laufen, ab dem man dann Schritt für Schritt die Software ausführen lassen kann. Zusätzlich zeigt einem der Debugger auch den Inhalt von Variablen an und so ....
Wenn Dir das erst einmal zu komplex scheint, dann gibt es die Möglichkeit, andere Dinge zu machen:
- Die trivialste ist, dass man weitere Ausgaben einbaut. Also an gewissen Stellen wird einfach ausgegeben, wo Du Dich befindest gefolgt von den Variablen, die Dich interessieren.
- Du kannst das aber auch deutlich komplexer machen. So könntest Du z.B. eine Funktion schreiben, die den Inhalt der Karte ausgibt. Und zwar nicht die "graphische" Ausgabe, die Du schon hast, sondern wirklich alle Werte. Also sprich: Du gehst hin und für jeden gespeicherten Wert gibst du aus: Die Koordinate und den dazu gespeicherten String. Dann kannst Du diese Funktion an beliebigen Stellen ausführen. Ggf. zusammen mit Unterbrechungen, d.h. nach der Ausgabe musst Du einmal Enter drücken weil Du die Zeile einliest. Das könntest Du z.B. bei jeder Änderung aufrufen....
Und deine Frage bezüglich Exception:
Wenn Du für die Software einen Zustand definierst, der nicht gestattet ist und findest, dass dieser Zustand eintritt, dann ist es denkbar, eine Exception zu werfen. Aber damit hast Du das Problem nicht gelöst! Das Ergebnis ist ggf., dass die Applikation direkt beendet wird. (Stell Dir vor du arbeitest relativ lange an einer Applikation und dann schließt die sich einfach so - und Deine Daten sind weg. Willst Du das?)
Also eine Exception zu werfen ist erst einmal blöd - Du willst ja, dass die Applikation sicher läuft! Also solltest Du schauen, was wann wie das Problem verursacht und dir dann überlegen, wo Du eingreifen willst. Hier kommt dann auch oft der Produkt-Owner ins Spiel, denn der definiert ja, was das gewünschte Verhalten ist.
Wenn der Rover bei der Initialisierung auf ein Hindernis gesetzt wird, was ist dann?
a) Das ist ein Zustand, der OK, ist. Wenn der Rover auf einem Hindernis steht, dann soll "M" ausgegeben werden. (Das M ist jetzt zufällig ausgewählt worden)
b) Es darf immer nur ein Objekt auf einem Feld sein, wenn der Rover auf ein besetztes Feld kommt, dann verschwindet das bisherige Objekt.
c) Der Rover darf nicht auf ein Objekt gesetzt werden, Bewegungen dürfen dies nicht zulassen, bei der Initialisierung muss der Rover so lange gesetzt werden, bis der Rover auf ein leeres Feld gesetzt wird ...
d) ....
Es gibt hier sehr viele Idee. Was "richtig" oder "erwünscht" ist, muss festgelegt werden. Das können wir aber nicht. Das weisst Du evtl. auf Grund der Aufgabenstellung.
Das ist bei fast allen so. Den meisten reichen aber auch die hier stehenden Erklärungen...Nah bei mir ist das so dass ich Lösungen direkt verstehen
Das wurde dir hier auch schon gesagtmein prof hat auf eine email geantwortet, also aufgabe 1 und aufgabe 3 gehören, teilweise zusammen.
ich werde versuchen das so zu machen:Das ist bei fast allen so. Den meisten reichen aber auch die hier stehenden Erklärungen...
Nur hat man seltensten Fällen fertigen Code, den man nur noch verstehen muss....
Das wurde dir hier auch schon gesagt![]()
public static void bewegeRover(char c) {
if(prüfeObHindernisLiegt(c) == false) return;
if (c == 'f') {
/:::::::}
}
public static boolean prüfeObHindernisLiegt(char c){
//prüfe ob der Befehl daz´zu sorgt ob der rover auf ein hindenrisslandet wenn ja return false sonst return true
}
package rover;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
public class Start {
static Random r = new Random();
static LinkedHashMap<int[], String> marsKarte;
static int BREITE_MARSES = 80;
static int HOEHE_MARSES = 20;
static int ROVER_XPOSITION = BREITE_MARSES / 2;
static int ROVER_YPOSITION = HOEHE_MARSES / 2;
public static void erstelleKarteUndSetzeRoverInDieMitte() {
marsKarte = new LinkedHashMap<>();
int[] positionVomHindernis;
for (int i = 0; i < BREITE_MARSES; i++) {
for (int j = 0; j < HOEHE_MARSES; j++) {
positionVomHindernis = new int[] { i, j };
if (r.nextDouble() < 0.25 && !(ROVER_XPOSITION == i && ROVER_YPOSITION == j))
marsKarte.put(positionVomHindernis, "#"); //Füge zur LinkedHashMap die Position auf der sich ein Hindernis befindet.
}
}
marsKarte.put(new int[] {ROVER_XPOSITION , ROVER_YPOSITION }, "n"); //Erzeuge den Roboter auf den jeweiligen Positionen
}
public static int[] bestimmeWidthUndHeight(Set<int[]> KoordinatenVonKarte) {
int[] MaxGrenzeVonKoordinaten = new int[2];
for (int[] e : KoordinatenVonKarte) {
if (e[0] > MaxGrenzeVonKoordinaten[0])
MaxGrenzeVonKoordinaten[0] = e[0];
if (e[1] > MaxGrenzeVonKoordinaten[1])
MaxGrenzeVonKoordinaten[1] = e[1];
}
return MaxGrenzeVonKoordinaten;
}
public static String getRoverUndHindernisse(Map<int[], String> ObjekteVonMarskarte, int[] derzeitigePosition) {
Set<Entry<int[], String>> entrySet = ObjekteVonMarskarte.entrySet();
for (Entry<int[], String> entry : entrySet) {
if (entry.getKey()[0] == derzeitigePosition[0] && entry.getKey()[1] == derzeitigePosition[1])
return entry.getValue();
}
return null;
}
public static void printeDasFeld() {
// Set<int[]> keySet = marsKarte.keySet();
//for (int[] e : keySet) {
//if (e[0] == 39 && e[1] == 10)
//System.err.println(marsKarte.get(e) + " " + e.hashCode());
//}
if(!pruefeObHindernisLiegt()) return; //Falls die Nächste Bewegung auf dem Hindernis sein sollte.
int[] GroesseUndBreite = bestimmeWidthUndHeight(marsKarte.keySet());
for (int j = 0; j < GroesseUndBreite[1]; j++) {
for (int i = 0; i < GroesseUndBreite[0]; i++) {
//System.out.println(i + "," + j + ": " + getRoverUndHindernisse(marsKarte, new int[] { i, j }));
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }) == null) {
System.out.print(" ");
continue;
}
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#"))
System.out.print("#");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n"))
System.out.print("^");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("s"))
System.out.print("V");
else if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("e"))
System.out.print(">");
if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("w"))
System.out.print("<");
}
System.out.println();
}
for (int i = 0; i < GroesseUndBreite[0]; i++) {
System.out.print("=");
}
System.out.println();
}
public static void main(String[] args) {
if (args.length > 1) {
long seed = Long.parseLong(args[1]);
r.setSeed(seed);
// System.out.println("Seed: " + seed);
}
erstelleKarteUndSetzeRoverInDieMitte();
String RichtungsOptionen = args[0];
printeDasFeld();
for (int i = 0; i < RichtungsOptionen.length(); i++) {
bewegeRover(RichtungsOptionen.charAt(i));
printeDasFeld();
}
}
public static void bewegeRover(char c) {
if (c == 'f') {
int[] aktuellePosition = findeRover();
if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("n"))
aktuellePosition[1]--;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("s"))
aktuellePosition[1]++;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("e"))
aktuellePosition[0]++;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("w"))
aktuellePosition[0]--;
} else if (c == 'b') {
int[] aktuellePosition = findeRover();
if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("s"))
aktuellePosition[1]--;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("n"))
aktuellePosition[1]++;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("w"))
aktuellePosition[0]++;
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("e"))
aktuellePosition[0]--;
} else if (c == 'l') {
int[] aktuellePosition = findeRover();
if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("n"))
marsKarte.put(aktuellePosition, "w");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("s"))
marsKarte.put(aktuellePosition, "e");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("e"))
marsKarte.put(aktuellePosition, "n");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("w"))
marsKarte.put(aktuellePosition, "s");
} else if (c == 'r') {
int[] aktuellePosition = findeRover();
if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("w"))
marsKarte.put(aktuellePosition, "n");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("e"))
marsKarte.put(aktuellePosition, "s");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("n"))
marsKarte.put(aktuellePosition, "e");
else if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("s"))
marsKarte.put(aktuellePosition, "w");
}
}
public static boolean pruefeObHindernisLiegt(){
int[] aktuellePosition = findeRover();
if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#"))
return false;
return true;
}
private static int[] findeRover() {
Set<Entry<int[], String>> entrySet = marsKarte.entrySet();
for (Entry<int[], String> entry : entrySet) {
if (entry.getValue() != null && !entry.getValue().equals("#"))
return entry.getKey();
}
throw new IllegalStateException("Rover missing in action");
}
}
Also ich wollte das falls er über ein Hindernis stolpern sollte, also er die gleichen Koordinaten hat, dann sollte er das feld nichtmal also diesen Befehl ignorieren aber das Problem hierbei ist falls danach ein Befehl kommen sollte die besagt geh jetzt nach links und der Rover kann nach links dann bleibt er dennoch an der Position stehen das heißt.Kannst Du einmal erläutern, was Du aus welchem Grund geändert hast?
Ich sehe zum einen die neue Funktion pruefeObHindernisLiegt und den Aufruf in deiner printeDasFeld Funktion. Evtl. gehst Du noch einmal einen Schritt zurück und beschreibst noch einmal, was Du wann genau machen willst. Und dann können wir mal überlegen, was Deine Änderungen überhaupt machen ...