java erstes projekt

temi

Top Contributor
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?

Es geht doch erst mal nicht darum was besser wäre. Es geht darum, was passieren muss, damit im gegebenen Programm genau diese Exception ausgelöst wird.
 

mihe7

Top Contributor
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?
 
H

Heyoka955

Gast
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?
Java:
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");
    }

weil der rover immer vorhanden ist, und die bedinungen nie eintreffen
 
H

Heyoka955

Gast
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.
Ja das funktioniert, die Methode klappt. Ich habe dies mit anderen strings getestet.
Die Methode kackt nur an wenn halt ein Hindernis da ist aber wenn da kein Hindernis ist also leer Feld dann klappt die
 
H

Heyoka955

Gast
jungs meine Konzentration ist tot, ich weiß das klingt scheiße von mir, aber brauche lösungen. will weiter an aufgabe 2 arbeiten
 
H

Heyoka955

Gast
Nur 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ßt


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

Heyoka955

Gast
Aha... Wir kommen der Sache näher.


Versuch's doch mal.
Mein Rücken tut schon weh
ja habe es in der Methode gemacht wo das Feld geprintet
Java:
        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("<");

            }
 
Zuletzt bearbeitet von einem Moderator:
H

Heyoka955

Gast
Aha... Wir kommen der Sache näher.


Versuch's doch mal.
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 aussieht
Java:
//der code de rmethode
if(getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#")){
            //marsKarte.put(aktuellePosition, "w|e|s|n");
            
        }
 

mihe7

Top Contributor
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, die Methode für die Bewegung funktioniert also.

Zu Deinem Kommentar #125:

if (getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("#") && getRoverUndHindernisse(marsKarte, new int[] { i, j }).equals("n") ) System.out.print("^"); //hier aber funz net
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.
 
H

Heyoka955

Gast
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.
Denke der Grund warum das nicht liegt ist weil die Hindernisse und Rover die gleichen Koordinaten haben. Und man dann zusammen Printet.
Die haben in der Datenstruktur den selben key. Daher wird nur eines von den ausgedrückt. Könntest du vllt die Lösung geben
Ich bin zu tot
 
K

kneitzel

Gast
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?
 
H

Heyoka955

Gast
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?
ist meine Idee mit den selben koordianten erstmal richtig?
denn so kann ich erst weiter kommen, kann mir einer sagen ob ich eine ausnahme werfen soll
 
H

Heyoka955

Gast
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 ?
 

mihe7

Top Contributor
H

Heyoka955

Gast
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.
Dafür würde eine if abfrage in frage kommen.
Man muss entweder gucken ob an dieser Position also an den Koordinaten zwei Inhalte sind also # und ^ oder man muss eine Abfrage machen wo man nach den Nachbarn fragt vom Roboter(ist ja ein array) ...
denke die erste ish bessere Idee.

Und wäre es sinnvoller eine neue Methode zu schreiben oder den Bug in der Methode bewegerover zu fixen.

Ps. Ich habe echt die Geduld eines programmieren
 
K

kneitzel

Gast
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.
 
H

Heyoka955

Gast
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.
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?
 
K

kneitzel

Gast
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.
 
H

Heyoka955

Gast
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.
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.
 
K

kneitzel

Gast
Also 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....
 
H

Heyoka955

Gast
Also 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....
Nah 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 ?
 
K

kneitzel

Gast
Dazu habe ich bereits was geschrieben. Es gibt mehrere Option, welche Richtig ist, musst Du wissen. Und dann kannst Du überlegen, an welcher Stelle Du evtl. eingreifen müsstest. Und das solltest Du ja dann gut können, den es geht dann ja nur darum, eine etwas fehlerhafte Lösung, die Du direkt verstanden hast, etwas anzupassen.
 
H

Heyoka955

Gast
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.
Okay meien frage wäre wie prüfe ich ob der rover auf den # liegt ? Weiß nicht wie und wo ich das anstellen soll?
Denn das war auch meine Idee aber.
 
H

Heyoka955

Gast
mein prof hat auf eine email geantwortet, also aufgabe 1 und aufgabe 3 gehören, teilweise zusammen.


"Wenn der Rover die Hindernisse nicht überfährt, verschwindet das Symptom (und wenn man so will, der Bug). Trotzdem lohnt es sich einmal Gedanken darüber machen, was genau das Problem im Originalcode ist. "
 

mrBrown

Super-Moderator
Mitarbeiter
H

Heyoka955

Gast
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 ;)
ich werde versuchen das so zu machen:

bei der Methode move also bewegeRover werde ich eine eine Methode vom typ boolean hinzufügen die abfragt ob das Befehl der Kommandozeile dazu sorgt dass der Roboter evtl auf einen Hinderniss landet und wenn ja liefert er false ansonsten true? was hälr ihr von der Idee?
Java:
    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
        
        
        
    }
 
H

Heyoka955

Gast
habe die aufgabe gelöst. Jungs das war eig easy, ich hatte leider ein schritt zu früh nachgedacht.
aber es gibt ein probem, wenn ich jetzt scheibe dass er nach links gehen soll, dann tut er es nicht erb bleibt städnig da stehen, woran liegt das




Java:
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");
    }

}


11688
 
K

kneitzel

Gast
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 ...
 
H

Heyoka955

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

Der Rover bleibt immer stehen.

Das könnte daran liegen dass er evtl immer auf der Position des # liegt.

Was könne man machen?

Wäre echt froh wenn ich die Aufgabe heute zu Ende habe
 
K

kneitzel

Gast
Du musst genauer formulieren! Du bist die ganze Zeit extrem ungenau und das könnte der Grund für Deine Probleme sein.

Derzeit prüfst du, ob der Rover auf einem Hindernis ist. Aber Du willst doch den Rover gar nicht auf die Position eines Hindernisses bringen. Und dann prüfst Du in der Ausgabe? Also zeigst einfach nichts an, wenn der Rover auf einem Hindernis ist?

Also nochmal im Detail drüber nachdenken und dann mal genau formulieren, was wann geprüft werden sollte und was dann auf Basis der Erkenntnis gemacht werden muss....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
J Bald erstes Java Buch durchgearbeitet - Wie gehts nun weiter? Java Basics - Anfänger-Themen 6
B erstes Java-Applet Java Basics - Anfänger-Themen 7
G Erstes Java-Programm Java Basics - Anfänger-Themen 10
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 0
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben