Erste Schritte Zuul - 2ten Befehl einführen

Status
Nicht offen für weitere Antworten.
Parameter befehl

Wenn es kein zweites Wort gibt wird "Wohin möchten Sie gehen?" ausgegeben.

Wenn ich das Spiel starte und "take Buch" eingebe kommt:"
Es gibt keine Gegenstände im Raum
null"

Das heisst also dass die Methode findeGegenstandMitBeschreibung
schonmal aufgerufen wird....! Da fehlt nicht mehr viel.
 
Parameter befehl

Wenn es kein zweites Wort gibt wird "Wohin möchten Sie gehen?" ausgegeben.
Richtig. Der Parameter heißt befehl und ist vom Typ Befehl.
Du möchtest etwas aufheben, wenn es kein zweites Wort gibt, dann sollte was ausgegeben werden?
Was ist das zweite Wort?

Wenn ich das Spiel starte und "take Buch" eingebe kommt:"
Es gibt keine Gegenstände im Raum
null"

Das heisst also dass die Methode findeGegenstandMitBeschreibung
schonmal aufgerufen wird....! Da fehlt nicht mehr viel.
Uninteressant. Soweit sind wir nicht, wir sind gerade mal beim ersten Block.
 
Du möchtest etwas aufheben, wenn es kein zweites Wort gibt, dann sollte was ausgegeben werden?
Was ist das zweite Wort?

Das zweite Wort ist der Gegenstand. Es gibt unterschiedliche davon.

Wenn befehl ein zweites Wort hat wird die Methode gibZweitesWort()
aufgerufen.
 
Zuletzt bearbeitet:
Das zweite Wort ist der Gegenstand. Es gibt unterschiedliche davon.
Stimmt. Die Methode sollte bis hier jetzt ungefähr so aussehen:
Java:
private void nimmGegenstand(Befehl befehl)
    {
        if(!befehl.hatZweitesWort()) {
            // Gibt es kein zweites Wort, wissen wir nicht, welcher Gegenstand gemeint ist
            System.out.println("Was möchtest du nehmen?");
            return;
        }

Was macht der nächste Befehl?
Ist es sinnvoll, dass die Variable "richtung" heißt?
 
Wenn befehl ein zweites Wort hat wird die Methode gibZweitesWort()
aufgerufen.

Ja, es ist sinnvoll, denn das zweite Wort ist in dem Fall die Richtung, north, west, east, south.
Und wir brauchen jetzt hier das zweite Wort für den Gegenstand eben!
 
Dein Problem ist, dass du das Zusammenspiel deiner einzelnen Klassen nicht verstanden hast.
Die Klasse Befehl enthält das, was du eingibst aufgeteilt in Befehlswort und zweites Wort.
>go north => Befehlswort = go, zweites Wort = north
>take buch => Befehlswort = take, zweites Wort = buch
Du rufst irgendwo im Spiel, abhängig vom Befehlswort eine entsprechende Methode auf:
Befehlswort = go => wechsleRaum(befehl);
Befehlswort = take => nimmGegenstand(befehl);

Hast du bemerkt, dass der jeweilige Befehl als Parameter an die Methode übergeben wird?

Was steht demnach bei der Methode nimmGegenstand(befehl) im zweiten Wort?
 
Es ist wohl die Methode findeGegenstandMitBeschreibung.
Falsch geraten. Die Auswertung der Befehle findet in der Klasse Spiel statt, genauer in der Methode verarbeiteBefehl. Diese Methode ruft je nach Befehl andere Methoden von Spiel auf. Die von dir vermutete "findeGegenstandMitBeschreibung" Methode gehört aber zur Raum-Klasse.
Das heisst also dass die Methode findeGegenstandMitBeschreibung schonmal aufgerufen wird
Nochmal falsch. Es wird die Methode befehlTake aufgerufen. Diese wiederum ruft "System.out.println(aktuellerRaum.findeGegenstandMitBeschreibung(name))" auf, und verwendet dabei die Instanzvariable "name" aus der Spiel-Klasse als Parameter. Diese Variable wird aber nirgendwo initialisiert. Ergo wird "aktuellerRaum.findeGegenstandMitBeschreibung(null)" aufgerufen. Da es keinen Gegenstand mit der Beschreibung null gibt, gibt die Methode zunächst " Es gibt keine Gegenstände im Raum" aus, und gibt dann als Rückgabewert null zurück. Dieser Rückgabewert wird dann in der befehlTake-Methode ausgegeben.
 
Ich bin immer wieder verwundert, dass es Leute gibt die gegen Windmühlen kämpfen.

@Devanther Du stellst schon wieder Fragen: "Wie mach ich das?". Deine Themen laufen immer wieder gleich ab:
- Ich hab einen Fehler, warum?
- Forumshilfe
- [Optional: Wiederhole letzte 2 Schritte]
- Achja keinen Fehler mehr, warum geht das dann nicht, wie ich will?
- Forumshilfe
- Geht noch immer nicht, wie mach ich das?
- Forumshilfe
- [Wiederhole letzte 2 Schritte]

Der Thread zieht sich schon wieder über 6 Seiten. Wenn jetzt keine Fortschritte deinerseits kommen, wird dieser Thread wieder geschlossen.
Denn dieses Forum sollte in weiterer Folge vielen helfen, die dieses Thema suchen. Aber zurzeit ist es eine schrittweise Anleitung zur Lösung und ist nicht Sinn der Sache.
 
Harry Kane sagt, dass das Schwachsinn ist
Ich finde es übrigens ziemlich frech, mich so falsch zu zitieren. Obwohl es richtig gewesewn wärem
Harry Kane sagt, dass das Schwachsinn ist, ich kann die gewünschte Methode nicht aufrufen
Ich finds schon etwas frech, mich so falsch zu "zitieren".
Meinen Beitrag von gestern abend muss ich dahin gehend korrigieren, dass bei Eingabe von "take Buch" schon irgendwann die Methode "aktuellerRaum.findeGegenstandMitBeschreibung" aufgerufen wird. Sie bekommt aber keinen sinnvollen Parameter, und der Rückgabewert wird entweder (in der Methode "befehlTake") auf keine sehr sinnvolle Weise verwendet, oder (in der Methode "nimmGegenstand") auf eine vollkommen sinnlose, logisch und semantisch falsche Weise.
 
Ich finde, wir sollten mal Zuul Zuul sein lassen. Ich denke, dass der TE mal zeigen soll, was er kann.

Aufgabe:

Erstelle ein Programm aus drei Klassen, das zeigt, dass 7+5=12 und "Hallo "+"Welt"="Hallo Welt" ist. Erstelle dazu eine Klasse "AddTest", die Klassen "AddText" und "AddInt" aufruft. Diese enthalten beide die Methoden"setWert", "addWert" und "getWert" enthalen, und das Klassenattribut kapseln.

Bekommst du das ohne Hilfe hin? Dann poste den Code?
 
So habe jetzt alles gründlich gelesen!

Was steht demnach bei der Methode nimmGegenstand(befehl) im zweiten Wort?

Buch.

Ich finde es übrigens ziemlich frech, mich so falsch zu zitieren.

Sorry, war nicht so beabsichtigt.

Es wird die Methode befehlTake aufgerufen. Diese wiederum ruft "System.out.println(aktuellerRaum.findeGegenstandMitBeschreibung(name))" auf, und verwendet dabei die Instanzvariable "name" aus der Spiel-Klasse als Parameter. Diese Variable wird aber nirgendwo initialisiert. Ergo wird "aktuellerRaum.findeGegenstandMitBeschreibung(null)" aufgerufen. Da es keinen Gegenstand mit der Beschreibung null gibt, gibt die Methode zunächst " Es gibt keine Gegenstände im Raum" aus, und gibt dann als Rückgabewert null zurück. Dieser Rückgabewert wird dann in der befehlTake-Methode ausgegeben.

Das heisst, wenn ich die Variable "name" initialisiere müsste es funktionieren?
Wie mache ich das? Manchmal muss es "Buch" sein(im Raum Keller), in einem anderen Raum Büro, Computer.
Die Lösung ist wohl zum Greifen nah^^.
Irgendetwas muss mit "name" gemacht werden!

Ich weiss nicht wie ich das umsetzen soll.

edit:
Ich finde, wir sollten mal Zuul Zuul sein lassen

Ich würde gerne das Spiel zu Ende programmieren.
 
Ich würde gerne das Spiel zu Ende programmieren.
Ich würde gern auf'm Mars spazieren. Mal gucken wer von uns eher seinen Wunsch erfüllt bekommt 😉

Das heisst, wenn ich die Variable "name" initialisiere müsste es funktionieren?
Wie mache ich das? Manchmal muss es "Buch" sein(im Raum Keller), in einem anderen Raum Büro, Computer.
Die Lösung ist wohl zum Greifen nah^^.
Irgendetwas muss mit "name" gemacht werden!
Nein, deine Überlegungen sind völliger Unsinn - genau wie das, was du bisher für die Methode geschrieben hast.
Und solange du das nicht selber siehst, hat es absolut keinen Sinn, damit weiter zu machen,
 
Ich würde gern auf'm Mars spazieren. Mal gucken wer von uns eher seinen Wunsch erfüllt bekommt 😉

Auf dem Mars gibts gar nichts interessantes ;-)

Nein, deine Überlegungen sind völliger Unsinn - genau wie das, was du bisher für die Methode geschrieben hast.
Und solange du das nicht selber siehst, hat es absolut keinen Sinn, damit weiter zu machen,

Also ich gebe im Spiel "take Buch" ein dann wird die Methode befehlTake() (Klasse Spiel) aufgerufen.
Diese ruft dann findeGegenstandMitBeschreibung(String name) (Klasse Raum) auf.
private void nimmGegenstand(Befehl befehl) (Klasse Spiel) verarbeitet den 2ten Befehl.

Lösung oder Tipp?🙄

Soll etwa nicht befehlTake() aufgerufen werden sondern nimmGegenstand(Befehl befehl) die dann
die Methode findeGegenstandMitBeschreibung(String name) aufruft?

So ähnlich also wie beim Befehl go...der wechsleRaum aufruft?
 
  1. Kein Fortschritt zu sehen
  2. Keine Tipps/Lösungsvorschläge umgesetzt
  3. Thread wieder mal 7 Seiten lang
  4. Nicht auf Fragen von Helfenden eingegangen
  5. CLOSED
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben