java erstes projekt

  • Themenstarter Themenstarter Heyoka955
  • Beginndatum Beginndatum
ich bin im zweiten Semester, wieos habt ihr alle so hohe erwartungen
Dann überleg mal, wie weit Du schon bist... Du hast eine Hochschulzugangsberechtigung erworben. Und Du hast das erst Semester unbeschadet überstanden. (was ich gut finde!) Also folgen nur noch ca 2,5 Jahre Mindest- oder Regelstudienzeit.
Dementsprechend solltest Du Dich aber nicht wie ein kleines Kind verhalten, etwas lapidar formuliert. 😉
 
Dann überleg mal, wie weit Du schon bist... Du hast eine Hochschulzugangsberechtigung erworben. Und Du hast das erst Semester unbeschadet überstanden. (was ich gut finde!) Also folgen nur noch ca 2,5 Jahre Mindest- oder Regelstudienzeit.
Dementsprechend solltest Du Dich aber nicht wie ein kleines Kind verhalten, etwas lapidar formuliert. 😉
Kannst du denn irgendwie die nächste Position zu die er gehen soll bestimmen?
Kannst du irgendwie ermitteln, was an einer Position liegt?
Wenn du weißt, was an einer Position liegt, kannst du irgendwie testen, ob es ein Hindernis ist?
leider nein,
 
diese codezeilen : marsKarte.put(aktuellePosition, "e") und aktuellePosition[0]--;,

der erstere dient eher zum bestimmen und zweite für die schritte
 
Du musst erstmal ausfinden, was denn jetzt eigentlich die neue Position ist.

Hint: Es ist nur eine der beiden Codezeilen, die du genannt hast.
 
schau also ich will versuchen abzufragen ob der nächste wert auf den der rover liegt ein hinderniss ist, dafür habe ich auch eine Methode geschrieben die das abfängt. Aber mein Problem ist dass ich nicht weiß wie ich es schaffe in der Methode dass rover nicht mehr auf aufm hinderniss liegt sondern auf dem platz davor.

Java:
    //public static boolean pruefeObHindernisLiegt(){
        //int[] aktuellePosition = findeRover();
        //if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#")){
           
            //geh zurück zur vorherigen position
        //}
        //return true;
    //}

wenn du mr nicht helfen kannst, dann wäre es cool wenn du mir die lösung geben würdest.
Bin mit nerven am ende.
15 stundne für ein kleines Problem, wie gut dass ich eh im Consulting oder projekt Management gehen will. lol haha
Auch im Consulting, bzw. vor allem da, braucht man Leute die Ahnung haben und sicherlich nicht dich...
 
diese codezeilen : marsKarte.put(aktuellePosition, "e") und aktuellePosition[0]--;,

der erstere dient eher zum bestimmen und zweite für die schritte
Also ich bin mir hier relativ sicher, dass Du nicht verstanden hast, was der Code wirklich macht! Selbst durch das reine Lesen der Aufgabenstellung sollte man schon verstanden haben, dass der Rover sich vor und zurück bewegen kann (=> Bewegung im Sinne von Feld wechseln) und er sich einfach nur drehen kann (=> Kein Wechsel des Feldes).

Und genau das findet sich in dem Code ja dann auch.

Hast Du denn den Algorithmus mal mit Papier und Stift durchgespielt? Damit du verstehst, was da wirklich passiert? Das habe ich dir schon mindestens zwei mal geraten meine ich! Und wenn Du unsere Ratschläge nicht befolgen willst, dann müssen wir Dir die auch nicht weiter geben.

@All: Ich entführe jetzt den Thread jetzt mal etwas:

Beim Ansehen des Codes: Läuft es euch auch kalt den Rücken runter? Bei jeder Code Revision würde ich da ja richtig verhauen bei sowas.
Den Punkt mit dem Array als Key habe ich ja schon erwähnt, aber der Code, der den Rover bewegt, verändert den Key einer Collection.... Ok, das ändert hier ja ehh nichts, da ja HashCode und equals ehh nicht wirklich nutzbar sind (bzw. das Ändern des Arrays verändert den HashCode nicht). Aber das ist ein Pattern, das einen ja förmlich anschreit. Collections, welche auf HashCodes basieren, werden dadurch nicht mehr funktionieren, da der Key nun bei einem HashCode gespeichert ist, der nicht mehr dem HashCode des Keys entspricht.

Und ich frage mich, was hier hinter steckt. Ist das ein Professor, der keine Ahnung hat? Oder ist evtl. die Erwartungshaltung an die Studenten, die wirklich 100 Punkte kriegen wollen, dass diese Speicher-Problematik auch gesehen und angepasst wird?
 
Oder ist evtl. die Erwartungshaltung an die Studenten, die wirklich 100 Punkte kriegen wollen, dass diese Speicher-Problematik auch gesehen und angepasst wird?

Diese Zusammenhänge (mit allen negativen Konsequenzen) zu Erkennen finde ich in diesem Lernstadium schon ziemlich schwierig. Ich hab ehrlich gesagt auch erst mal schauen müssen, wie die beim Bewegen geänderten Koordinaten überhaupt zurück in die Map kommen. Aber ich hab ja auch nicht Informatik studiert 😉

Ich hoffe der Prof spielt auf den dritten Teil der Aufgabe an, wo geeignete Datenstrukturen verwendet werden sollen...
 
Diese Zusammenhänge (mit allen negativen Konsequenzen) zu Erkennen finde ich in diesem Lernstadium schon ziemlich schwierig. Ich hab ehrlich gesagt auch erst mal schauen müssen, wie die beim Bewegen geänderten Koordinaten überhaupt zurück in die Map kommen. Aber ich hab ja auch nicht Informatik studiert 😉

Ich hoffe der Prof spielt auf den dritten Teil der Aufgabe an, wo geeignete Datenstrukturen verwendet werden sollen...

Dabei fehlt uns aber das Wissen, was die Studenten bereits wissen bzw. wissen sollten. Ich weiss nur, dass unsere Profs damals von uns erwartet haben, eine Sprache in 2 Wochen zu beherrschen - selbst beigebracht! Eigentlich seien nur 2 Tage notwendig, aber da wir ja andere Vorlesungen auch hatten, wurde es zu 2 Wochen ausgedehnt. 🙂

Daher ist die Frage, ob das Thema HashCodes und darauf basierende Datenstrukturen bereits Thema war, aber das werden wir wohl nicht erfahren. Und ich hätte doch immer erst die Objektorientierung erläutert ehe ich auf die Library und soche Dinge eingehe ...

Aber im Augenblick scheint mir dies ein bewusst gewähltes Problem im Code zu sein...
 
Also ich bin mir hier relativ sicher, dass Du nicht verstanden hast, was der Code wirklich macht! Selbst durch das reine Lesen der Aufgabenstellung sollte man schon verstanden haben, dass der Rover sich vor und zurück bewegen kann (=> Bewegung im Sinne von Feld wechseln) und er sich einfach nur drehen kann (=> Kein Wechsel des Feldes).

Und genau das findet sich in dem Code ja dann auch.

Hast Du denn den Algorithmus mal mit Papier und Stift durchgespielt? Damit du verstehst, was da wirklich passiert? Das habe ich dir schon mindestens zwei mal geraten meine ich! Und wenn Du unsere Ratschläge nicht befolgen willst, dann müssen wir Dir die auch nicht weiter geben.

@All: Ich entführe jetzt den Thread jetzt mal etwas:

Beim Ansehen des Codes: Läuft es euch auch kalt den Rücken runter? Bei jeder Code Revision würde ich da ja richtig verhauen bei sowas.
Den Punkt mit dem Array als Key habe ich ja schon erwähnt, aber der Code, der den Rover bewegt, verändert den Key einer Collection.... Ok, das ändert hier ja ehh nichts, da ja HashCode und equals ehh nicht wirklich nutzbar sind (bzw. das Ändern des Arrays verändert den HashCode nicht). Aber das ist ein Pattern, das einen ja förmlich anschreit. Collections, welche auf HashCodes basieren, werden dadurch nicht mehr funktionieren, da der Key nun bei einem HashCode gespeichert ist, der nicht mehr dem HashCode des Keys entspricht.

Und ich frage mich, was hier hinter steckt. Ist das ein Professor, der keine Ahnung hat? Oder ist evtl. die Erwartungshaltung an die Studenten, die wirklich 100 Punkte kriegen wollen, dass diese Speicher-Problematik auch gesehen und angepasst wird?
Die Methode bewegt das Objekt zusätzlich, bestimmt er die Richtungen indem er es in der map als value von nem key speichert.
 
Ich bin gestern bei der Methode stehen geblieben ! Wie ich es schaffe das nächste Ziel zu bestimmen uns ob dieser ein Hindernis ist ?

Meine Güte das kann doch nicht so schwer zu verstehen sein! Du hast doch bereits alles was du dazu benötigst!

Du weißt, wie du prüfst ob an einer bestimmten Position ein Hindernis ist.
Du weißt, wie du deine aktuelle Position bestimmst.
Du weißt, wie sich der Rover an die nächste Position bewegt.

Kurz gesagt, du nimmst die aktuelle Position, schaust wohin sich der Rover bewegen soll und prüfst, ob an dieser Position ein Hindernis ist. Falls ja, wird der Rover eben nicht bewegt.

Java:
    public static boolean pruefeObHindernisLiegt(){
        int[] aktuellePosition = findeRover();
        if (getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#"))
            return false;
        
        return true;
    }

Mit deiner Methode prüfst du nur an der aktuellen Position.

Tipp: Gib der Methode einen Parameter für eine Position mit, damit du die Methode universell für eine beliebige Position verwenden kannst. Damit kannst du dann VOR jeder Bewegung die nächste geplante Position checken.
 
Wieach
Meine Güte das kann doch nicht so schwer zu verstehen sein! Du hast doch bereits alles was du dazu benötigst!

Du weißt, wie du prüfst ob an einer bestimmten Position ein Hindernis ist.
Du weißt, wie du deine aktuelle Position bestimmst.
Du weißt, wie sich der Rover an die nächste Position bewegt.

Kurz gesagt, du nimmst die aktuelle Position, schaust wohin sich der Rover bewegen soll und prüfst, ob an dieser Position ein Hindernis ist. Falls ja, wird der Rover eben nicht bewegt.
Wie mache ich das als Code ?
Das ug das Problem
 
Das ist so popelig, dass du es selbst hinkriegen musst.
Also ich weiß dass ich das bestimmen des Zieles brauche dann kann ich dich einfach

If(put(aktuelle Position, e).equals(#) return false;

Und das für alle Fälle ?

Die Position wäre : 3,7 aber es kommt darauf an wohin er gehen will.
 
Du schreibst, dass es darauf ankommt, wohin er gehen will. D. h. es gibt ja offensichtlich verschiedene Möglichkeiten. Welche sind das?
 
Du schreibst, dass es darauf ankommt, wohin er gehen will. D. h. es gibt ja offensichtlich verschiedene Möglichkeiten. Welche sind das?
Java:
                marsKarte.put(aktuellePosition, "n");
           
[CODE=java]if(marsKarte.put(aktuellePosition, "w")eequals("Hindernis") ) return false;
if(marsKarte.put(aktuellePosition, "s").equals("Hindernis") ) return false;
if(marsKarte.put(aktuellePosition, "e").equals("Hindernis") ) return false;
if(marsKarte.put(aktuellePosition, "n").equals("Hindernis") ) return false;


//so ungefähr
marsKarte.put(aktuellePosition, "s");

marsKarte.put(aktuellePosition, "e");

marsKarte.put(aktuellePosition, "w");


das sind die möglichkeiten die es fibt[/CODE]
 
Zuletzt bearbeitet von einem Moderator:
Das ist die aktuelle Position des Rovers:

int[] aktuellePosition = findeRover();

Du kannst auf die beiden Koordinatenbestandteile folgendermaßen zugreifen:

aktuellePosition[0];
aktuellePosition[1];

Wie du richtig erkannt hast, ist es abhängig von der Orientierung des Rovers (n, s, e, w) in welche Richtung er sich fortbewegen wird.

Wie würden sich die neuen Positionen des Rovers, abhängig von der Richtung berechnen lassen?

n: ??
s: ??
e: ??
w: ??
 
Das ist die aktuelle Position des Rovers:

int[] aktuellePosition = findeRover();

Du kannst auf die beiden Koordinatenbestandteile folgendermaßen zugreifen:

aktuellePosition[0];
aktuellePosition[1];

Wie du richtig erkannt hast, ist es abhängig von der Orientierung des Rovers (n, s, e, w) in welche Richtung er sich fortbewegen wird.

Wie würden sich die neuen Positionen des Rovers, abhängig von der Richtung berechnen lassen?

n: ??
s: ??
e: ??
w: ??
wie in der Methode bewegRover, die steht ja da, mein Problem ist jetzt das zu verbinden?

kannst du mal ein beispuel geben dafür wie die erste abfrage aussehen würde?
 
wie in der Methode bewegRover, die steht ja da, mein Problem ist jetzt das zu verbinden?

kannst du mal ein beispuel geben dafür wie die erste abfrage aussehen würde?

Setz doch mal den Vorschlag aus #226 um, dann wird das ganz einfach...

In Pseudocode:

Wenn RoverAnAktuellerPosition.RichtungX && !HindernisAnNeuerPosition.RichtungX, dann RoverZurNeuenPosition;
 
Zuletzt bearbeitet:
Setz doch mal den Vorschlag aus #226 um, dann wird das ganz einfach...

Code:
 public static boolean pruefeObHindernisLiegt(){
        int[] aktuellePosition = findeRover();
        if (aktuellePosition[0] == getRoverUndHindernisse(marsKarte, aktuellePosition).equals("#"))
            return false;
        
        return true;
    }
 
Lies noch mal nach...
das macht keinen sinn was ch geschrieben habe.
Also ich will inde rmethode so vorgehen.
ich kriege den char übergeben und und bestimme aktuelle Position nachem ich das gemacht habe mache ich die selben if bedinungen wie in der BewegeRover Methode und dann gucke ich wo er sich befindet, nachdem ich das fertig habe, müsste dies klappem
 
das macht keinen sinn was ch geschrieben habe.
Also ich will inde rmethode so vorgehen.
ich kriege den char übergeben und und bestimme aktuelle Position nachem ich das gemacht habe mache ich die selben if bedinungen wie in der BewegeRover Methode und dann gucke ich wo er sich befindet, nachdem ich das fertig habe, müsste dies klappem

Du bist irgendwie grundsätzlich extrem resistent gegen Hilfen, die man dir geben will. Oh, man.
 
Java:
    public static boolean kollisionAbfangen(char c){
        int[] aktuellePosition = findeRover();
        if(c = 'f')
            aktuellePosition = findeRover(); // nicht nötig, die Position ist immer noch die selbe
       
       
    }  

//sowäre mein ansatz

Das würde im Prinzip so gehen.

ABER

In den Aufgaben geht es auch darum den Code zu verbessern und mit deinem Ansatz wirst du sehr viel bereits vorhandenen Code wiederholen. Das ist nicht gewünscht.

Wenn es dir hilft, dann mach es trotzdem so und versuche es danach zu vereinfachen.
 
Das würde im Prinzip so gehen.

ABER

In den Aufgaben geht es auch darum den Code zu verbessern und mit deinem Ansatz wirst du sehr viel bereits vorhandenen Code wiederholen. Das ist nicht gewünscht.

Wenn es dir hilft, dann mach es trotzdem so und versuche es danach zu vereinfachen.
ich komem ncht mehr weiter, sorry jungs!
 

Zurück
Oben