Erste Schritte Befehl back implementieren

Status
Nicht offen für weitere Antworten.
D

Devanther

Top Contributor
Es geht immer noch um das Projekt Zuul.
Den Thread bitte nicht schließen.

Aufgabe:
Implementieren Sie den Befehl back. Dieser Befehl hat kein zweites Wort.
Die Eingabe des Befehls back soll den Spieler in dem Raum zurückbringen,
indem er zuletzt gewesen ist.

Zusatzaufgabe:
Implementieren sie den Befehl back so, dass eine wiederholte Anwendung den Spieler mehrere Räume zurückversetzt. Bei genügend häufiger Anwendung sogar an den Spielanfang.
Benutzen Sie dazu eine Stack.

Wie gehe ich an diese Aufgabe ran?
Stack. Man kann ihn sich in der Tat wie einen Stapel vorstellen, von dem immer nur das oberste Element entfernt oder hinzugefügt werden kann.
Ein Element wird durch die Methode push() dem Stapel an der Spitze hinzugefügt, durch search() im Stapel gesucht und durch pop() entfernt. Mit peek() wird jeweils das oberste Element ermittelt.

Ich speichere alle Elemente in diesem Stack. Mit peek() ermittele ich das oberste Element
und mit pop() entferne ich es. Dann werde ich automatisch immer einen Raum zurück
gebracht?

Leider steht im Buch selbst zu Stack nichts.
https://javabeginners.de/Sammlungen_und_Listen/Stack.php
https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

Klasse Raum:
Code:
import java.util.Set;
import java.util.HashMap;
import java.util.ArrayList;

/**
* Diese Klasse modelliert Räume in der Welt von Zuul.
*
* Ein "Raum" repräsentiert einen Ort in der virtuellen Landschaft des
* Spiels. Ein Raum ist mit anderen Räumen über Ausgänge verbunden.
* Für jeden existierenden Ausgang hält ein Raum eine Referenz auf
* den benachbarten Raum.
*
* @author  Michael Kölling und David J. Barnes
* @version 31.07.2011
*/

class Raum
{
    private String beschreibung;
    private HashMap<String, Raum> ausgaenge;        // die Ausgänge dieses Raums
    private Raum aktuellerRaum;
   
    private ArrayList<Gegenstand> gegenstaende;
   
   
   
    /**
     * Erzeuge einen Raum mit einer Beschreibung. Ein Raum
     * hat anfangs keine Ausgänge.
     * @param beschreibung enthält eine Beschreibung in der Form
     *        "in einer Küche" oder "auf einem Sportplatz".
     */
    public Raum(String beschreibung)
    {
        this.beschreibung = beschreibung;
        ausgaenge = new HashMap<String, Raum>();
        gegenstaende = new ArrayList<Gegenstand>();
       
       
    }
   
    public String gibBeschreibung()
    {
    return beschreibung;
    }   
    
   
    public void addGegenstand(Gegenstand gegenstand)
    {
        gegenstaende.add(gegenstand);
       
    }  
  
   
    /**
     * Definiere einen Ausgang für diesen Raum.
     * @param richtung die Richtung, in der der Ausgang liegen soll
     * @param nachbar der Raum, der über diesen Ausgang erreicht wird
     */
    public void setzeAusgang(String richtung, Raum nachbar)
    {
        ausgaenge.put(richtung, nachbar);
    }
   
     
   
    /**
     * @return die kurze Beschreibung dieses Raums (die dem Konstruktor
     * übergeben wurde).
     */
    public String gibKurzbeschreibung()
    {
        return beschreibung;
    }

    /**
     * Liefere eine lange Beschreibung dieses Raums, in der Form:
     *     Sie sind in der Küche.
     *     Ausgänge: nord west
     * @return eine lange Beschreibung dieses Raumes.
     */
    public String gibLangeBeschreibung()
    {
        return "Sie sind " + beschreibung + ".\n" + gibAusgaengeAlsString();
    }
   
   public String gibEssensBeschreibung()
   {
       return "Sie haben nun gegessen und sind nicht mehr hungrig!";
   }   
   
   
    public String gibAusgaengeAlsString2()
    {
    
       
        String ergebnis = "Ausgänge: ";
     if (aktuellerRaum.gibAusgang("north") != null) {
        ergebnis += "north";
     if (aktuellerRaum.gibAusgang("east") != null) {
        ergebnis += "east"; 
     if (aktuellerRaum.gibAusgang("south") != null) {
        ergebnis += "south";
     if (aktuellerRaum.gibAusgang("west") != null) {
        ergebnis += "west";  
    }
   }
   }   
    }
      return ergebnis;
   }
   
    /**
     * Liefere eine Beschreibung der Ausgänge dieses Raumes,
     * beispielsweise
     * "Ausgänge: north west".
     * @return eine Beschreibung der Ausgänge dieses Raumes.
     */
    private String gibAusgaengeAlsString()
    {
        String ergebnis = "Ausgänge:";
        Set<String> keys = ausgaenge.keySet();
        for(String ausgang : keys)
            ergebnis += " " + ausgang;
        return ergebnis;
    }
     
    public String gibGegenstaendeAlsString()
    {       
      String ergebnis = "";         
      for(Gegenstand aktuellerGegenstand : gegenstaende)
        ergebnis += " " + aktuellerGegenstand.gibBeschreibung();
          return ergebnis;
    }     
   
   
    public Raum gibAusgang(String richtung)
    {
        return ausgaenge.get(richtung);
    } 
   
   
    /**
     * Liefere den Raum, den wir erreichen, wenn wir aus diesem Raum
     * in die angegebene Richtung gehen. Liefere 'null', wenn in
     * dieser Richtung kein Ausgang ist.
     * @param richtung die Richtung, in die gegangen werden soll.
     * @return den Raum in der angegebenen Richtung.
     */
   
}
 
A

AndiE

Top Contributor
Nehmen wir mal die Aufgabe selbst: Impelementieren sie den befehl "back". Wo wird die Eingabe ausgewertet, und was soll passieren, wenn der Nutzer "back" eingibt, d.h. Welche Funktion wird dazu aufgerufen, und was soll diese tun.

Es sollte also sowas herauskommen wie: "Wenn der Nutzer 'back' eingibt soll die Funktion 'raumZurueck() aufgerufen werden und der vorhergehende zum aktuellen Raum werden."

Damit habe ich die Aufgabe für dich schon gelöst. Du brauchst den Satz nur noch in Code umzusetzen.

Erst wenn das Funktioniert, kommt die Zusatzaufgabe.

Ein Tipp: Diesmal solltest du mehr Eigeninitiative zeigen, sonst ist das hier schneller gesperrt, als du gedacht hast.
 
Flown

Flown

Administrator
Mitarbeiter
Was ist jetzt deine konkrete Frage, wenn du ja weißt wie's gehen soll?
 
D

Devanther

Top Contributor
Sind meine Gedanken zur Stack richtig?
Wie schreibe ich die Methode raumZurueck(), darum gehts ja.

Es sollte also sowas herauskommen wie: "Wenn der Nutzer 'back' eingibt soll die Funktion 'raumZurueck() aufgerufen werden und der vorhergehende zum aktuellen Raum werden."

Das weiss ich schon. Das Problem ist das in Code zu schreiben. Jemand nen Tipp der mich auf den richtigen Weg bringt? Brauch ich etwa wieder eine ArrayList die alle Räume speichert und dann gibt man den Wert
length -1 aus?
 
D

Devanther

Top Contributor
Sry, ich kann mir das in Code nicht vorstellen.
Erstmal die Aufgabe dann die Zusatzaufgabe.
Tipp?
 
D

Devanther

Top Contributor
Ein Array hat die Methode length.

Code:
 for (int i = 0; i < zugriffeInStunde.length - 1; i++){

Da!
 
D

Devanther

Top Contributor
ArrayList:
Eine Liste mit einer flexiblen Anzahl an Elementen. Man kann unbegrenzt Elemente hinzufügen.
In einer ArrayList muss man die Art von Objekten mit angeben z.B. String
Eine ArrayList hat Methoden wie add. remove. contains. size. get.

Array:
Ein Array muss mit dem new-Operator unter Angabe einer festen Größe erzeugt werden!
Das heisst die Größe ist von Anfang an vorbestimmt.

Stack:
Siehe oben. Dazu steht im Buch leider nichts.
 
Sasuke

Sasuke

Mitglied
ArrayList:
Eine Liste mit einer flexiblen Anzahl an Elementen. Man kann unbegrenzt Elemente hinzufügen.
In einer ArrayList muss man die Art von Objekten mit angeben z.B. String
Eine ArrayList hat Methoden wie add. remove. contains. size. get.

Array:
Ein Array muss mit dem new-Operator unter Angabe einer festen Größe erzeugt werden!
Das heisst die Größe ist von Anfang an vorbestimmt.

Stack:
Siehe oben. Dazu steht im Buch leider nichts.

Hey,

es kann doch nicht wahr sein. Wirklich, ich glaube du machst das mit Absicht weil du uns einfach alle trollen willst. Ich habe schonmal genau diese Aussage kommentiert. Nur weil etwas nicht in deinem Buch steht heisst das nicht, dass es nicht existiert. Google kann dir helfen, es dauert keine 2 Minuten herauszufinden was ein Stack ist, aber ich habe langsam das Gefühl du willst es gar nicht verstehen.

Datenstrukturen sind die absoluten Kernelemente, die untersten Basics. Du brauchst gar nicht anfangen ein Spiel o.ä. Zu entwickeln wenn dir grundlegendste abstrakte Datentypen nichts sagen, du kein Verständnis für Logik hast und keine Eigeninitiative zeigst. Ließ dir an was Lists, Queues, Stacks, Sets odrt Maps sind, sonst wirst du nie über dein momentanes abgeschriebenes Hello Welt hinauskommen.

Fang an zu denken, das ist deine letzte Chance. Nochmal sowas und ich würde @Flown bitten auch diesen Thread zu schließen, da der TE ganz offentsichtlich unbelehrbar ist und hier mit allen Mitteln gegen uns arbeitet.

Mit freundlichen Grüßen
Sasuke
 
A

AndiE

Top Contributor
Wenn der Nutzer 'back' eingibt soll die Funktion 'raumZurueck() aufgerufen werden und der vorhergehende zum aktuellen Raum werden.

Du weißt also nicht, wie man das in Code umsetzt? Was sollte passieren?
1. Nutzer gibt was ein.
2. hat Nutzer "back" eingegeben?
3. wenn ja, Funktion raumZureuck() aufrufen.
4. in raumZurueck() vorherigen zum aktuellen Raum machen.
5. Rücksprung zur Eingabeschleife.

Hast du das verstanden?
 
D

Devanther

Top Contributor
Wirklich, ich glaube du machst das mit Absicht weil du uns einfach alle trollen willst.

Ich will hier keinen trollen!
Wenn der Thread dir nicht gefällt, musst du hier nicht lesen.
Ich bin ja auch noch Java Anfänger und habe noch nicht viel Code geschrieben bzw. gesehen.
Und dass man sich mit Hilfe von google ALLES anlesen kann ist so auch nicht richtig.
Aber natürlich geb ich mir Mühe.
Ich arbeite das Buch durch und will mich erstmal auf das Wesentliche konzentrieren.

4. in raumZurueck() vorherigen zum aktuellen Raum machen.

Wie das?
Ich kann mir die Methode raumZurueck in Code nicht vorstellen...
Je mehr Code ich gesehen habe, desto mehr Eigeninitiative kann ich zeigen.
 
H

Harry Kane

Top Contributor
In welche Klasse gehört die Methode raumZurueck denn deiner Meinung nach?
 
H

Harry Kane

Top Contributor
Richtig. Der Rest sieht so aus:
- Variable letzterRaum deklarieren
- In der Methode wechsleRaum diesen Block
Java:
    aktuellerRaum = naechsterRaum;
    System.out.println(aktuellerRaum.gibLangeBeschreibung());
durch diesen ersetzen
Java:
    letzterRaum = aktuellerRaum;
    aktuellerRaum = naechsterRaum;
    System.out.println(aktuellerRaum.gibLangeBeschreibung());
- In der neuen Methode raumZurück folgendes machen:
Überprüfe ob letzterRaum ungleich null ist
Falls ja, gilt aktuellerRaum = letzterRaum und letzterRaum = null;
Dann noch der Vollständigkeit halber die lange Beschreibung vom aktuellen Raum ausgeben.
 
D

Devanther

Top Contributor
Danke! Jetzt geht die Methode back!

Stellt sich nur noch die Frage nach der Zusatzaufgabe.
Sind meine Gedanken zum "Stack" überhaupt richtig? siehe erste Seite.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
K Subklassen mit einzigem Befehl addieren Java Basics - Anfänger-Themen 6
F cmd Befehl ausführen Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
D Input/Output Befehl aus Benutzereingabe herausfiltern Java Basics - Anfänger-Themen 12
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
O Methoden Runtime.getRuntime().exec(befehl); Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
B Copy Paste Befehl Java Basics - Anfänger-Themen 6
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
D Erste Schritte Zuul - 2ten Befehl einführen Java Basics - Anfänger-Themen 68
elischa unbekannter Befehl zur Compilezeit Java Basics - Anfänger-Themen 22
B Befehl um ein Befehl abzubrechen Java Basics - Anfänger-Themen 2
M Classpath Befehl zum Kompilieren um die Option classpath erweitern. Java Basics - Anfänger-Themen 5
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
S Befehl current: Java Basics - Anfänger-Themen 3
Silvascus Void Methode einem Stringparameter im syso-Befehl hinzufügen Java Basics - Anfänger-Themen 3
slejden Erste Schritte der Befehl import Java Basics - Anfänger-Themen 2
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 5
J Problem WIE ohne Goto-Befehl lösbar? Java Basics - Anfänger-Themen 6
N Benötige eine Alternative für einen GOTO Befehl Java Basics - Anfänger-Themen 2
O CMD Befehl javac Java Basics - Anfänger-Themen 3
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
C Desktopiconwechsel ohne Befehl Java Basics - Anfänger-Themen 0
V Schlüsselworte Befehl Ignorieren? Java Basics - Anfänger-Themen 10
B JDK installieren Befehl java funktioniert nicht Java Basics - Anfänger-Themen 15
J Variablen Auf der suche nach einem Befehl Java Basics - Anfänger-Themen 2
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
C CMD Befehl + Variable im Java-Code ausführen Java Basics - Anfänger-Themen 8
S Methoden auf befehl ausführen Java Basics - Anfänger-Themen 7
iB0T Eine Art Goto Befehl! Java Basics - Anfänger-Themen 27
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Schlüsselworte Befehl this Java Basics - Anfänger-Themen 8
E CMD Befehl über Java ausführen? Java Basics - Anfänger-Themen 4
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
D Hilfe zu Java Befehl In.open Java Basics - Anfänger-Themen 2
B Javadoc-Befehl unter Ubuntu Java Basics - Anfänger-Themen 2
I Befehl/Methode "los()" Java Basics - Anfänger-Themen 17
A Befehl gesucht....wie komme ich an Folgendes Objekt? Java Basics - Anfänger-Themen 6
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
S javac Befehl Java Basics - Anfänger-Themen 7
C Befehl zum Verlassen einer Schleife Java Basics - Anfänger-Themen 27
W Befehl ausführen bei Mausklick + gedrückte Strg-Taste Java Basics - Anfänger-Themen 2
B Befehl mit Priorität aufrufen Java Basics - Anfänger-Themen 4
I Befehl wird erst nach dem Ausführen einer Funktion ausgeführt Java Basics - Anfänger-Themen 4
K Problem mit h2 DB Insert Befehl Java Basics - Anfänger-Themen 6
B Befehl für vorselektierten Radiobutton Java Basics - Anfänger-Themen 2
H if-Befehl mit Buttongroup Java Basics - Anfänger-Themen 9
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
M Objekto.Programm. Return-Befehl Java Basics - Anfänger-Themen 4
F Kann String in Befehl wandeln? Java Basics - Anfänger-Themen 12
F Simpler DrawLine - Befehl!? Java Basics - Anfänger-Themen 9
M Befehl zum Einlesen von Benutzereingaben Java Basics - Anfänger-Themen 1
M Befehl zum Fenster schließen? GUI Java Basics - Anfänger-Themen 3
L Do while Befehl verkürzen? Java Basics - Anfänger-Themen 16
-horn- Befehl an CMD übergeben Java Basics - Anfänger-Themen 15
A [Fehlermeldung]Sleep-Befehl Java Basics - Anfänger-Themen 4
B Befehl "javac" wird nicht erkannt Java Basics - Anfänger-Themen 14
S Befehl "javac" funktioniert und Windows 7 nicht? Java Basics - Anfänger-Themen 3
K Terminal Befehl mit Java unter Mac ausführen Java Basics - Anfänger-Themen 18
L Java Persistence API - Update Befehl? Java Basics - Anfänger-Themen 5
X Befehl import Java Basics - Anfänger-Themen 21
Antoras Explizite Typenumwandlung in einem Befehl Java Basics - Anfänger-Themen 3
A Button einen Befehl zuordnen Java Basics - Anfänger-Themen 7
N suche Datums befehl Java Basics - Anfänger-Themen 8
H Problem mit Tastatur Befehl Java Basics - Anfänger-Themen 11
J Kill befehl Java Basics - Anfänger-Themen 44
G java shell script starten und befehl übergeben Java Basics - Anfänger-Themen 3
Z Ant java -classpath befehl Java Basics - Anfänger-Themen 2
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
K Befehl um am Anfang einer Methode zu kommen? Java Basics - Anfänger-Themen 9
G Befehl für Ende bei Switch-Auswahl Java Basics - Anfänger-Themen 11
K fehler mit der Befehl Console Java Basics - Anfänger-Themen 3
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
L Leider klappt bei mir ein Befehl nicht Java Basics - Anfänger-Themen 4
P Befehl zum einrücken der textausgabe? Java Basics - Anfänger-Themen 6
A Befehl ausführen beim Schließen der Konsole Java Basics - Anfänger-Themen 3
S Gibt es einen Befehl "Mausklick" o.ä? Java Basics - Anfänger-Themen 6
S Java-Programm ohne -jar Befehl? Java Basics - Anfänger-Themen 9
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T JDK installiert aber der Befehl "javac" funktionie Java Basics - Anfänger-Themen 5
B ItemListener - setText Befehl geht nicht Java Basics - Anfänger-Themen 3
I JNLP - Datenstrom auslesen, Werte berechnen, Befehl automati Java Basics - Anfänger-Themen 6
R auf button klick befehl ausführen Java Basics - Anfänger-Themen 11
G Jar Befehl wird von DOS nicht erkannt Java Basics - Anfänger-Themen 24
G Unix Befehl ps unter Java Java Basics - Anfänger-Themen 2
M Eclipse --> Befehl: "Tastatur.leseKommazahl();" Java Basics - Anfänger-Themen 6
F Leerzeichen in Pfadangabe beim Befehl exec() Java Basics - Anfänger-Themen 5
H javac Befehl trotz Variablen einbindung ned gefunden Java Basics - Anfänger-Themen 23
G der Befehl "javac" wird nicht erkannt Java Basics - Anfänger-Themen 2
E Compiler-Befehl zum "nicht beachten" von Code Java Basics - Anfänger-Themen 10
F return Befehl in einer if-Anweisung Java Basics - Anfänger-Themen 4
U Befehl zum JAR starten Java Basics - Anfänger-Themen 17
K SQL Befehl in valueChanged() ausführen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Anzeige

Neue Themen


Oben