Erste Schritte Projekt Zuul

Status
Nicht offen für weitere Antworten.

JStein52

Top Contributor
Diese Methode ist ja eine Methode der Klasse Raum. Also wird sie für einen ganz bestimmten Raum aufgerufen, also z.B. keller.gegenstaendeAnzeigen(); Sie gibt dann für genau diesen Raum die Gegenstände aus.
 

Devanther

Top Contributor
Das hilft mir leider nicht wirklich weiter.
Wie schreibe ich dann die Schleife?
Und wie wird die Information über den Gegenstand ausgegeben?

Ich bekomm das alles nicht zusammen hingeschrieben.

Code:
public void gegenstaendeAnzeigen()

{
   for(Gegenstand aktuellerGegenstand: gegenstaende){
    System.out.println(aktuellerGegenstand.keller.gegenstaendeAnzeigen());
}

Code:
public void gegenstaendeAnzeigen()

{
   for(Gegenstand aktuellerGegenstand: gegenstaende){
    System.out.println(aktuellerGegenstand.buero.gegenstaendeAnzeigen());
}

Ist Schwachsinn? Ich brauche mehr Hilfe.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Du brauchst hier keine Hilfe, du brauchst jemanden der dich mit dir hinsetzt und das Schritt für Schritt durchgeht und nicht hier das online Tutorium.
 

Devanther

Top Contributor
Ich kenne so eine Person leider nicht :(

Ein Tip wie ich es richtig machen kann?

Also die Aufgaben bisher habe ich auch ganz gut verstanden,
aber jetzt gibts ein neues Problem.
 

Flown

Administrator
Mitarbeiter
Ja, ok.^^ Ich gebe mir Mühe.
Das sehe ich. Aber mit dem Kopf durch die Wand ist es keine Lernmethode, wenn man sich das "Problemlösen" aneignen möchte.
Welche Schritte muss ich jetzt machen?
Das Verständnis für Programmabläufe aufbauen. Du hängst an dem selben Problem - wie man über eine Collection iteriert und etwas dediziert ausgibt - schon seit 3 Threads.
Wenn dieser Thread wieder 20 Seiten erreicht, dann ist es ein Zeichen für mich, dass das Thema nicht verstanden wurde, in zu große Brocken aufgeteilt wurde oder dieser
Post für privates Tutorium von der Community missbraucht wird.

Nochmal mein Rat zu diesen Aufgaben: Mach dir einen Plan. Setzt dich mit Stift und Papier hin und geh das Schritt für Schritt durch. Male oder formuliere die Vorgehensweisen aus und dann übertrag - nach abgeschlossener Planung - diese dann in Code.
Wenn es Probleme gibt bei der Umsetzung von Code, dann sieh bitte in Tutorials nach - oder besser in deinem Buch mit dem richtigem Kapitel - und versuch es zu verstehen. Erst wenn das sitzt, mach mit dem Coden weiter.

Deine Probleme sehen fast alle immer gleich aus:
Code:
* Iteriere über eine Collection
* Gib eine Eigenschaft des Objekts in der Collection aus
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Ja. Um das zu sagen, muss ich noch nicht mal wissen, aus welcher Klasse die Codeschnipsel kommen (ich rate mal, es ist die Klasse "Raum"). Wie schon seit ca. 1 Jahr, programmierst du nicht, sondern rätst. Nach wie vor kann ich noch nicht mal ein Grundverständnis von objektorientierter Programmierung erkennen.
Fangen wir mal klein an. Welche Informationen bzw. Eigenschaften hat denn so ein Gegenstand, die man ausgeben könnte? Und gibt es schon eine Möglichkeit, an diese Eigenschaften ranzukommen, sprich, gibt es getter?
 

Devanther

Top Contributor
Welche Informationen bzw. Eigenschaften hat denn so ein Gegenstand, die man ausgeben könnte?

Beschreibung und Gewicht, Name könnte man noch hinzufügen.
Damit man über den Namen auf den Gegenstand zugreifen kann, das ist besser als jedes Mal eine
lange Beschreibung eingeben zu müssen.

Aber es soll einfach nur der Name "Buch" bzw. "Computer" ausgegeben werden, wenn der jeweilige Raum
betreten wird bzw. wenn man den Befehl "look" eingibt.
Andere Dinge wären dann eine andere Aufgabe.

Später sollen noch Dinge hinzugefügt werden, sodass man z.B. nur Gegenstände bis zu einem bestimmten
Gewicht aufheben kann etc. . Oder dass man nur soviele Gegenstände tragen kann, wie man
Tragkaft hat. Die Tragkraft wäre dann auch noch ein Attribut des Spielers(es müsste noch ne Klasse Spieler
hinzugefügt werden).
Oder dass man den Befehl "status" eingibt und alle Gegenstände die man gerade hat angezeigt werden
inklusive des Gewichts.
Aber eins nach dem anderen.

edit: Ich finde schon, dass sich diese Aufgabe stark von den anderen unterscheidet. Diesmal sollen nicht einfach alle Artikel oder was auch immer
ausgegeben werden, sondern es gibt unterschiedliche Räume...!
 
Zuletzt bearbeitet:

AndiE

Top Contributor
Schau mal in Kapitel 1.14 rein. Da geht es um eine Studentenverwaltung. Ruf dir mal das Projekt "lab-classes" auf und schau mal, wie das da funktioniert. In diesem Zusammenhang kannst du auch noch mal die Vorteile von BlueJ nachschauen, nämlich wie man eine Instanz erzeugt und eine Methode aufruft und dieser Parameter gibt. Ich könnte das als Bild schicken, werde aber deswegen keine Cloud aufmachen. Wenn du das verstanden hast, ist auch das aktuelle Beispiel keine Problem.
 

Devanther

Top Contributor
hm ich habe das Projekt "lab-classes" gar nicht.
In keinem Kapitel.

edit: mom. bei mir steht es auf Deutsch^^

Code:
for (Student student : studenten) {
            student.ausgeben();
        }
Meinst du diese Stelle? Ne andere Schleife gibt es in dem Projekt nicht.
Ich sehe keinen Zusammenhang zur aktuellen Aufgabe...
 
Zuletzt bearbeitet:

AndiE

Top Contributor
Hast du mal das Projekt inspiziert und mal getestet? Man legt darin eine Anzahl Studenten an mit Namen und Nummer und fügt diese dann Kursen hinzu. Das ist genauso, als ob du Gegenstände zu Räumen hinzufügst.
 

Devanther

Top Contributor
Code:
public void gegenstaendeAnzeigen()

{
   for(Gegenstand aktuellerGegenstand: gegenstaende){
    aktuellerGegenstand.();
}

Ist das bis hierhin richtig?
Es ist nicht das selbe, weil es ja unterschiedliche Räume gibt!

Code:
public void gegenstaendeAnzeigen()

{
   for(Gegenstand aktuellerGegenstand: gegenstaende){
    aktuellerGegenstand.gibBeschreibung();
}
Und jetzt ist das Problem, dass es einen Keller und ein Büro gibt!
Nicht das selbe!
 

Harry Kane

Top Contributor
Ich finde schon, dass sich diese Aufgabe stark von den anderen unterscheidet.
Das liegt wahrscheinlich daran, dass du nicht imstande bist, einmal gelerntes in einem ähnlichen Zusammenhang anzuwenden. Für dich ist wahrscheinlich eine Iteration über eine ArrayList<Gegenstand> was vollkommen anderes alsdie Iteration über eine ArrayList<Student>.
Diesmal sollen nicht einfach alle Artikel oder was auch immer
ausgegeben werden, sondern es gibt unterschiedliche Räume...
Ja, aber es gibt immer nur einen aktuellen Raum, und mit den darin enthaltten Gegenständen sollst du was machen: drüber iterieren und deren Eigenschaften ausgeben.
Wann fängst du an zu studieren?
 

Harry Kane

Top Contributor
Nicht dieselbe Instanz, aber dieselbe Klasse.
Verschiedenen Instanzen der Klasse Raum haben alle eine ArrayList<Gegenstand>, über die iteriert werden kann, um die Eigenschaften der Gegenstände auszugeben. Der Unterschied zwischen zwei verschiedenen Raum-Instanzen besteht lediglich darin, was in der Liste drin steht.
 

Devanther

Top Contributor
Code:
public void gegenstaendeAnzeigen()

{
   for(Gegenstand aktuellerGegenstand: gegenstaende){
    aktuellerGegenstand.gibBeschreibung();
}

Bis wohin ist der Code richtig?
 

AndiE

Top Contributor
Darauf habe ich gewartet. Was geschieht denn in der Schleife von Post #121? man kann das so beschreiben: Rufe für alle Objekte in "gegenstaende" die Methode "gibBeschreibung" auf, die in der Klasse "Gegenstand" deklariert ist. Also musst du vielleicht diese Methode dort hereinschreiben. Hättest du meinen Rat beherzigt, hättest du das längst ausprobieren können. Übrigens sollte man auch den Debugger nutzen, damit kann man schön sehen, was das Programm macht. Sollte dir das nichts sagen, der ist im Anhang des Buches erklärt.
 

Devanther

Top Contributor
Ja, es kommt aber noch ne Fehlermeldung.
Ohne die Fehlermeldung könnte ich das wenigstens testen...
ob in der Konsole alles richtig ausgegeben wird.
 

Joose

Top Contributor
Ja, es kommt aber noch ne Fehlermeldung.
Ohne die Fehlermeldung könnte ich das wenigstens testen...

Das ist mindenstens dein 3.Thread der über 10 Seiten geht. Immer wieder schreibst du "es komm ne Fehlermeldung".
Jedesmal wirst du danach gefragt welche Fehlermeldung denn kommt.
-> Wenn du eine Fehlermeldung bekommst dann poste die Fehlermeldung und den dazugehörigen Code und lass uns nicht immer nachfragen.
 

AndiE

Top Contributor
Du könntest jetzt natürlich den Quellcode aller Klassen posten, damit man sehen kann, was passiert, wenn man "look" eingibt. Mit BlueJ geht es aber glücklicherweise auch anders. Lege zwei Instanzen von Gegenstand an. Erzeuge eine Instanz von Raum. Füge die Gegenstände in den Raum ein. Gibt "gibBeschreibung" das richtige aus? Wenn ja- Wird diese Methode überhaupt aufgerufen,wenn du "look" eingibst?
 

Devanther

Top Contributor
Lege zwei Instanzen von Gegenstand an. Erzeuge eine Instanz von Raum. Füge die Gegenstände in den Raum ein. Gibt "gibBeschreibung" das richtige aus? Wenn ja- Wird diese Methode überhaupt aufgerufen,wenn du "look" eingibst?

Es passiert nichts. Es werden keine Gegenstände angezeigt.

Klasse Spiel:
Code:
/**
*  Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
*  "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
*  Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
*  mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
*  damit es interessanter wird!
*
*  Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
*  an ihr die Methode "spielen" aufgerufen werden.
*
*  Diese Instanz dieser Klasse erzeugt und initialisiert alle
*  anderen Objekte der Anwendung: Sie legt alle Räume und einen
*  Parser an und startet das Spiel. Sie wertet auch die Befehle
*  aus, die der Parser liefert und sorgt für ihre Ausführung.
*
* @author  Michael Kölling und David J. Barnes
* @version 31.07.2011
*/

import java.util.ArrayList;

class Spiel
{
    private Parser parser;
    private Raum aktuellerRaum;
    private Gegenstand aktuellerGegenstand;
    private ArrayList<Gegenstand> gegenstaende;
  
    private Gegenstand buch;
    private Gegenstand computer;
  
      
    /**
     * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
     */
    public Spiel()
    {
        raeumeAnlegen();
        parser = new Parser();
      
      
     
    }

    /**
     * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
     */
    private void raeumeAnlegen()
    {
        Raum draussen, hoersaal, cafeteria, labor, buero, keller;
    
        // die Räume erzeugen
        draussen = new Raum("vor dem Haupteingang der Universität");
        hoersaal = new Raum("in einem Vorlesungssaal");
        cafeteria = new Raum("in der Cafeteria der Uni");
        labor = new Raum("in einem Rechnerraum");
        buero = new Raum("im Verwaltungsbüro der Informatik");
        keller = new Raum("im Keller");
      
        // die Ausgänge initialisieren
        draussen.setzeAusgang("east", hoersaal);
        draussen.setzeAusgang("south", labor);
        draussen.setzeAusgang("west", cafeteria);

        hoersaal.setzeAusgang("west", draussen);

        cafeteria.setzeAusgang("east", draussen);

        labor.setzeAusgang("north", draussen);
        labor.setzeAusgang("east", buero);

        buero.setzeAusgang("west", labor);
        buero.setzeAusgang("down", keller);
      
        keller.setzeAusgang("up", buero);
      
        //Gegenstände erzeugen
      
        buch = new Gegenstand("Buch", 150);
        computer = new Gegenstand("Computer", 1500);
        keller.addGegenstand(buch);
        buero.addGegenstand(computer);
      
      
      
      
      
        aktuellerRaum = draussen;  // das Spiel startet draussen
    }

    /**
     * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
     * in einer Schleife.
     */
    public void spielen()
    {          
        willkommenstextAusgeben();

        // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
        // und führen sie aus, bis das Spiel beendet wird.
              
        boolean beendet = false;
        while (! beendet) {
            Befehl befehl = parser.liefereBefehl();
            beendet = verarbeiteBefehl(befehl);
        }
        System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
    }
   
    private void umsehen()
    {
        System.out.println(aktuellerRaum.gibLangeBeschreibung());
    }  
  
    private void essen()
    {
        System.out.println(aktuellerRaum.gibEssensBeschreibung());
    }  
  
  
    private void rauminfoAusgeben()
    {
      System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
      System.out.print("Ausgänge: ");
      if (aktuellerRaum.gibAusgang("north") != null) {
          System.out.print("north ");
      }
      if(aktuellerRaum.gibAusgang("east") != null) {
          System.out.print("east ");
      }
      if(aktuellerRaum.gibAusgang("south") != null) {
          System.out.print("south ");
      }
      if(aktuellerRaum.gibAusgang("west") != null) {
          System.out.print("west ");
      }
      System.out.println();
    }
      
      
  
    /**
     * Einen Begrüßungstext für den Spieler ausgeben.
     */
    private void willkommenstextAusgeben()
    {
        System.out.println();
        System.out.println("Willkommen zu Zuul!");
        System.out.println("Zuul ist ein neues, unglaublich langweiliges Spiel.");
        System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
        System.out.println();
        System.out.println(aktuellerRaum.gibLangeBeschreibung());
    }

    /**
     * Verarbeite einen gegebenen Befehl (führe ihn aus).
     * @param befehl Der zu verarbeitende Befehl.
     * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
     */
    private boolean verarbeiteBefehl(Befehl befehl)
    {
        boolean moechteBeenden = false;

        if(befehl.istUnbekannt()) {
            System.out.println("Ich weiss nicht, was Sie meinen...");
            return false;
        }

        String befehlswort = befehl.gibBefehlswort();
        if (befehlswort.equals("help")) {
            hilfstextAusgeben();
        }
        else if (befehlswort.equals("go")) {
            wechsleRaum(befehl);
        }
        else if (befehlswort.equals("look")) {
            umsehen();
        }
        else if (befehlswort.equals("eat")) {
            essen();
        }
        else if (befehlswort.equals("quit")) {
            moechteBeenden = beenden(befehl);
        }
        // ansonsten: Befehl nicht erkannt.
        return moechteBeenden;
    }

    // Implementierung der Benutzerbefehle:

    /**
     * Gib Hilfsinformationen aus.
     * Hier geben wir eine etwas alberne und unklare Beschreibung
     * aus, sowie eine Liste der Befehlswörter.
     */
    private void hilfstextAusgeben()
    {
        System.out.println("Sie haben sich verlaufen. Sie sind allein.");
        System.out.println("Sie irren auf dem Unigelände herum.");
        System.out.println();
        System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
        parser.zeigeBefehle();
    }

    /**
     * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
     * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
     * aus.
     */
    private void wechsleRaum(Befehl befehl)
    {
        if(!befehl.hatZweitesWort()) {
            // Gibt es kein zweites Wort, wissen wir nicht, wohin...
            System.out.println("Wohin möchten Sie gehen?");
            return;
        }

        String richtung = befehl.gibZweitesWort();

        // Wir versuchen, den Raum zu verlassen.
        Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);

        if (naechsterRaum == null) {
            System.out.println("Dort ist keine Tür!");
        }
        else {
            aktuellerRaum = naechsterRaum;
            System.out.println(aktuellerRaum.gibLangeBeschreibung());
        }
    }

    /**
     * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
     * ob das Spiel wirklich beendet werden soll.
     * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
     */
    private boolean beenden(Befehl befehl)
    {
        if(befehl.hatZweitesWort()) {
            System.out.println("Was soll beendet werden?");
            return false;
        }
        else {
            return true;  // Das Spiel soll beendet werden.
        }
    }
}

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 gegenstaendeAnzeigen()

    {
    for(Gegenstand aktuellerGegenstand: gegenstaende){
     aktuellerGegenstand.gibBeschreibung();
    }
  }
  
  
  
    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 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.
     */
  
}

Klasse Gegenstand:
Code:
/**
* Beschreiben Sie hier die Klasse Gegenstand.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Gegenstand
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int x;
  
    private String gegenstandBeschreibung;
  
    private int gegenstandGewicht;
  
    private String beschreibung;

    /**
     * Konstruktor für Objekte der Klasse Gegenstand
     */
    public Gegenstand(String beschreibung, int gewicht)
    {
        this.gegenstandBeschreibung = beschreibung; // Instanzvariable initialisieren
        this.gegenstandGewicht = gewicht;
        x = 0;
    }
   
  
    public String gibBeschreibung()
    {
    return beschreibung;
    }  
  
  
  
     /**
     * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
     *
     * @param  y    ein Beispielparameter für eine Methode
     * @return        die Summe aus x und y
     */
    public int beispielMethode(int y)
    {
        // tragen Sie hier den Code ein
        return x + y;
    }
}

https://imgur.com/a/J5kJb
Es müsste stehen: Sie sind im Keller. Im Keller ist ein Buch.

Aber die Gegenstände erscheinen nicht.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
1. Deine Methode gibBeschreibung der Gegenstand-Klasse gibt den Wert der Variablen "beschreibung" zurück. Diese Variable wird aber nirgendwo initialisiert, nur die Variable "gegenstandBeschreibung".
2. Selbst wenn aktuellerGegenstand.gibBeschreibung() etwas zurückgeben würde: in deiner gegenstaendeAnzeigen()-Methode der Raum-Klasse machst du mit den Rückgabewerten von aktuellerGegenstand.gibBeschreibung() gar nix. Du iterierst über die Gegenstände, holst die Beschreibung des Gegenstandes, machst damit aber nichts, gehst dann zum nächsten Gegenstand, machst mit dem Rückgabewert wieder nichts, usw. bis alle Gegenstände durchlaufen sind.
3. Selbst wenn aktuellerRaum.gegenstaendeAnzeigen() etwas sinnvolles tun würde, wird diese Methode gar nicht aufgerufen. Die Methode "umsehen" der Spiel-Klasse gibt nach wie vor nur den Rückgabewert von aktuellerRaum.gibLangeBeschreibung() aus.
So, und jetzt bitte wieder deine Standardfrage "Und wie löse ich das Problem ?".
 

Devanther

Top Contributor
1. Die Variable "beschreibung" wird doch initialisiert? Klasse Gegenstand.
Code:
 private String beschreibung;

2.
Wie schreibe ich die Methode gegensteandeAnzeigen() ? In der Klasse Raum.

Code:
public void gegenstaendeAnzeigen()

    {
    for(Gegenstand aktuellerGegenstand: gegenstaende){
     aktuellerGegenstand.gibBeschreibung.keller.gegenstaendeAnzeigen();
    }
  }

Was muss ich machen, damit eben im KELLER etwas ausgegeben wird? Ein Buch?
Das ist so falsch. Was muss in dieser Methode getan werden? Das ist das Hauptproblem!

3. Wie und an welcher Stelle muss ich aktuellerRaum.gegenstaendeAnzeigen() aufrufen,
in der Spiel Klasse?


Code:
private void umsehen()
    {
        System.out.println(aktuellerRaum.gibLangeBeschreibung());
        System.out.println(aktuellerRaum.gegenstaendeAnzeigen());
}


So? Jetzt müsste beim Befehl "look" , Methode umsehen() also, die Methode
gegenstaendeAnzeigen() aus der Klasse Raum aufgerufen werden.
Bleibt das Hauptproblem, wie ich gegenstaendeAnzeigen() schreiben soll!

Sind meine Gedanken so richtig?
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Die Variable "beschreibung" wird doch initialisiert? Klasse Gegenstand.
Nein *riesenseufzer*. Die Variable wird lediglich deklariert. Sie bekommt nie einen Wert.
Sind meine Gedanken so richtig?
Die Gedanken eventuell, aber für den resultierenden Code gibt es 0 von 10 möglichen Punkten. Das ist kein Programmieren, sondern nur rumraten.
Z. B. hat aktuellerRaum.gegenstaendeAnzeigen() keinen Rückgabewert, den man mit System.out.println() ausgeben könnte.
Wann fängst du endlich an zu studieren?
 

Devanther

Top Contributor
Code:
public Gegenstand(String beschreibung, int gewicht)
    {
        this.gegenstandBeschreibung = beschreibung; // Instanzvariable initialisieren
        this.gegenstandGewicht = gewicht;
        this.beschreibung = beschreibung;
        x = 0;
    }

So?
Oder auch noch im Konstruktor nen Parameter schreiben?

1. Schritt jetzt: Wie schreibe ich gegenstaendeAnzeigen() ? (Klasse Raum)
Ich weiss es nicht, wie man sieht -.-

Ich müsste erst ne Ausbildung zum FIAE machen, dieses Jahr nicht mehr.
 

Harry Kane

Top Contributor
Schreibe dir eine Methode gibGegenstaendeAlsString, und baue die so ähnlich auf wie gibAusgaengeAlsString() mit einem String als Rückgabewert.
Wie lange dauert die Ausbildung zum FIAE?
 

AndiE

Top Contributor
Das hast du falsch verstanden. Wann beschäftigst du dich mit Java so, dass du verstehst, was du machst? Das ist die Frage. Ich kann die sagen, dass ich mindestens fünf Sprachen quasi im Alleingang gelernt habe. Sprachen, von denen heute kaum mehr einer spricht, wie Basic und Forth. Auch die gesamte Java-Sache habe ich mir weitgehend im Selbststudium angeeignet. ich hatte zwar Vorkenntnisse, aber die kamen auch aus der Selbstedukation. Das Buch, das du hast, ist echt gut. Lese es, probiere es durch von Anfang an und lese parallel auch die Insel.
 

Devanther

Top Contributor
Schreibe dir eine Methode gibGegenstaendeAlsString, und baue die so ähnlich auf wie gibAusgaengeAlsString() mit einem String als Rückgabewert

Code:
private String gibAusgaengeAlsString()
    {
        String ergebnis = "Ausgänge:";
        Set<String> keys = ausgaenge.keySet();
        for(String ausgang : keys)
            ergebnis += " " + ausgang;
        return ergebnis;
    }

Ja, ich muss erstmal verstehen was gemacht wird, stimmt.
Eine Aufgabe im Buch ist auch zu beschreiben was diese Methode macht....die habe ich ausgelassen -.-
Was wird da gemacht? Ich weiss es nicht.
 

Harry Kane

Top Contributor
Was ich eigentlich wissen wollte, war, wie lange der TE noch Ressourcen in ein offensichtlich sinnloses Unterfangen stecken will.
Ich weiss nicht, was in der Ausbildung zum FIAE oder im Studium gefordert wird, bzw. wie viel man da mit Auswendiglernen reissen kann. Sobald es nämlich ans Verstehen geht, wird der TE ziemlich schnell ziemlich frustrierende Erfahrungen machen. Es ist eine Sache, wenn man über Monate in einem Forum immer wieder zu hören bekommt, dass man fürs Programmieren ziemlich unbegabt ist, aber eine ganz andere, wenn einem sowas im realen Leben vermittelt wird.
Was wird da gemacht? Ich weiss es nicht.
Sowas meine ich. Du hast den Code vor Augen, aber verstehst ihn nicht. Wie willst du jemals eine Klausur oder eine Prüfung bestehen?
 

DaCrazyJavaExpert

Bekanntes Mitglied
Code:
private String gibAusgaengeAlsString()
    {
        String ergebnis = "Ausgänge:";
        Set<String> keys = ausgaenge.keySet();
        for(String ausgang : keys)
            ergebnis += " " + ausgang;
        return ergebnis;
    }

Ja, ich muss erstmal verstehen was gemacht wird, stimmt.
Eine Aufgabe im Buch ist auch zu beschreiben was diese Methode macht....die habe ich ausgelassen -.-
Was wird da gemacht? Ich weiss es nicht.
Hier ne winzige Erklärung:
String ergebnis = "Ausgänge:";
Hier initialisierst du den String ergebnis mit "Ausgänge:". Das heißt der String ergebnis hat den Wert "Ausgänge:". Soweit so gut.
Set<String> keys = ausgaenge.keySet();
Hier legst du eine Collection an, also eine Liste vom Typ String. Du kannst dieser Liste verschiede Strings hinzufügen um sie dann beispielsweise, da wären wir auch schon beim nächsten Abschnitt, mit einer for-each Schleife auszugeben.for(String ausgang : keys) ergebnis += " " + ausgang;
Hier sagst du praktisch. Für jeden ausgang von der Liste keys soll ergebnis ein Leerzeichen und ausgang zugewiesen werden.
mit return ergebnis; gibst du das ergebnis als Rückgabewert der Methode zurück. Und diesen Rückgabewert musst do wohl irgenwo benutzen müssen. Wo genau dass kann ich dir auch nicht sagen.
 

Devanther

Top Contributor
Code:
private String gibGegenstaendeAlsString()
    {
          String ergebnis = "Ausgänge";
          Set<String> gegenstaende = ausgaenge.keySet();
          for(String aktuellerGegenstand : gegenstaende)
               ergebnis += " " + aktuellerGegenstand;
          return ergebnis; 
    }

Falsch oder?

Wie schreibe ich nun die Methode richtig?

Code:
ausgaenge.keySet();

Woher der Name ausgaenge? Die Ausgänge dieses Raums?
Was macht die Methode keySet() ?


Code:
ergebnis += " " + aktuellerGegenstand;
Das heisst doch: ergebnis = ergebnis " " + aktuellerGegenstand ?
 

T_T

Bekanntes Mitglied
Was macht die Methode keySet() ?

JavaDocs lesen!
https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

Das heisst doch: ergebnis = ergebnis " " + aktuellerGegenstand ?

Verweis auf: https://de.wikibooks.org/wiki/Java_Standard:_Operatoren
Und zwar schau dir mal Zuweisungsoperatoren an

Zitat: += Addiert einen Wert zu der angegebenen Variablen

Im Fall von Strings:
Java:
String s1 = "Hallo";
String s2 = "Welt";

// Kurzschreibweise
s1 += " " + s2;
System.out.println(s1); // Ergebnis: Hallo Welt

// gleiches Ergebnis, nur ausführlicher geschrieben:
s1 = s1 + " " + s2;
System.out.println(s1); // Ergebnis: Hallo Welt

Hier wird s2 an s1 angehängt (inkl. eines Leerzeichen....)



Aber das sollte Basicwissen sein....Solltest du bereits damit Probleme haben, dann empfehle ich dir, dich nochmal richtig hinzusetzen und die Basics zu lernen.

Edit:
In meinen Augen versuchst du etwas zu lösen, was mit deinen Kenntnisstand nicht machbar ist. Suche dir vielleicht jemanden, der dich an die Hand nimmt.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Das heisst doch: ergebnis = ergebnis " " + aktuellerGegenstand ?
Das ist Käse. Mit einem weiteren Pluszeichen wirds aber richtig.
Woher der Name ausgaenge? Die Ausgänge dieses Raums?
Was macht die Methode keySet() ?
Soll die Frageform andeuten, dass du vergessen hast, was "ausgaenge" ist? Deine Ausbilder bzw. Kommilitonen tun mir jetzt schon leid.
ausgaenge ist eine HashMap<String, Raum>. keySet() ist eine in der Klasse HashMap definierte Methode, die ein Set mit den Schlüsseln aus der HashMap zurückliefert. Hast du jemals einen Blick in die Java-API-Dokumentation (https://docs.oracle.com/javase/8/docs/api/) geworfen?
dann empfehle ich dir, dich nochmal richtig hinzusetzen und die Basics zu lernen
Gute Empfehlung. Die hat er wohl schon 100 Mal bekommen. Umgesetzt hat er sie aber offensichtlich bisher nicht.
Eigentlich kann niemand hier im Forum so richtig sagen, wie, wann und wieviel der TE "lernt". Sein "lernen" scheint darin zu bestehen, Aufgaben aus dem BlueJ Buch zu lesen, nicht zu verstehen, hier zu posten, dann nach mehreren hundert Beiträgen mit viel Mühe eine Lösung zu bekommen, und dann bei einem ähnlichen Problem wieder ganz von vorne anzufangen. Also "learning by doing" im Sinne von "not learning by let others do".
 

Devanther

Top Contributor
HashMap<String, Raum>

String ist der Typ der Objekte der in der Map sein soll, und Raum ist der Typ des Schlüssels.
Beide Typen können auch gleich sein!

Code:
private String gibGegenstaendeAlsString()
    {
          String ergebnis = "Ausgänge";
          Set<String> gegenstaende = ausgaenge.keySet();
          for(String aktuellerGegenstand : gegenstaende)
               ergebnis += " " + aktuellerGegenstand;
          return ergebnis;
    }

Wie schreibe ich nun die Methode?
 

Sasuke

Mitglied
HashMap<String, Raum>

String ist der Typ der Objekte der in der Map sein soll, und Raum ist der Typ des Schlüssels.
Beide Typen können auch gleich sein!

Code:
private String gibGegenstaendeAlsString()
    {
          String ergebnis = "Ausgänge";
          Set<String> gegenstaende = ausgaenge.keySet();
          for(String aktuellerGegenstand : gegenstaende)
               ergebnis += " " + aktuellerGegenstand;
          return ergebnis;
    }

Wie schreibe ich nun die Methode?

Hey,

es scheint als hättest du das Prinzip einer Map NICHT verstanden. In diesem Fall ist String der Typ des Keys und Raum der Typ des Values. Auch die Aussage "String ist der Typ der Objekte der in der Map sein soll" ist komplett sinnbefreit.

Mit freundlichen Grüßen
Sasuke
 

Devanther

Top Contributor
Ich habe das im Buch nachgeschlagen, es war nicht eindeutig formuliert.

Der Schlüssel wird an die get-Methode übergeben um den Wert zu bekommen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B VISA.jar in Projekt einbinden (Library) Java Basics - Anfänger-Themen 5
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
C externe jar einbinden in Eclipse-Projekt Java Basics - Anfänger-Themen 2
B non-modular dependency in modularem Projekt verwenden Java Basics - Anfänger-Themen 3
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
J Projekt neu übersetzen Java Basics - Anfänger-Themen 3
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
S Video Projekt Java Basics - Anfänger-Themen 28
A Hilfe bei Java Projekt Java Basics - Anfänger-Themen 4
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
D Gemeinsames Projekt Java Basics - Anfänger-Themen 13
J Veranstaltungs Projekt Java Basics - Anfänger-Themen 2
K Java Projekt Hilfe Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
W Neues Lern-Projekt gesucht Java Basics - Anfänger-Themen 8
R Java-Projekt im FTP hochladen Java Basics - Anfänger-Themen 6
C Projekt öffnen BlueJ Java Basics - Anfänger-Themen 1
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
A Wie kann ich folgendes Projekt realisieren? Java Basics - Anfänger-Themen 4
B Derzeit JSF - Projekt, später soll MobileApp folgen Java Basics - Anfänger-Themen 5
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
H java erstes projekt Java Basics - Anfänger-Themen 502
B Erste Schritte nio oder io für neues Projekt Java Basics - Anfänger-Themen 1
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
alkaA Intellij Java Datei aus nicht Projekt ausführen? Java Basics - Anfänger-Themen 2
D Erste Schritte Projekt in Ecplise in einer .zip Datei speichern Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
F Git Projekt im Build Path Java Basics - Anfänger-Themen 3
Edin Sinnvolle Projekt-/Codepräsentation Java Basics - Anfänger-Themen 2
L Suche ein sampel Projekt Java Basics - Anfänger-Themen 2
L PROBLEM! "Bug" bei Konto-Projekt! Java Basics - Anfänger-Themen 7
J App.jar muss im Projekt App als Bibliothek vorhanden sein?! Java Basics - Anfänger-Themen 1
J Projekt nicht editierbar modifizieren (NetBeans 8) Java Basics - Anfänger-Themen 10
L Compiler-Fehler AndroidStudio Projekt startet nicht mehr!!! Java Basics - Anfänger-Themen 2
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M Hilfe bei Roulette Projekt Java Basics - Anfänger-Themen 7
M bestehendes Projekt als Applet speichern Java Basics - Anfänger-Themen 2
M Netbeans Projekt lauffähig abspeichern Java Basics - Anfänger-Themen 3
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
S Best Practice Projekt als .JAR exportiert Java Basics - Anfänger-Themen 4
H Ist Java überhaupt die richtige Sprache für das Projekt? Java Basics - Anfänger-Themen 8
elischa Eclipse Plugin Projekt, Maven Projekt und dependencies Java Basics - Anfänger-Themen 5
M Open Source Projekt mit Unit Tests gesucht Java Basics - Anfänger-Themen 5
T Java Projekt aufbau Java Basics - Anfänger-Themen 5
C java Projekt mit Xuggler exportieren Java Basics - Anfänger-Themen 9
H Menüführung Projekt Wecker Java Basics - Anfänger-Themen 5
S Klassen Externe Klasse in ein Projekt mit einbinden Java Basics - Anfänger-Themen 7
T Config: Projekt erkennt Javaversion nicht Java Basics - Anfänger-Themen 12
M Erste Schritte Heruntergeladenes Java Projekt lauffähig kriegen Java Basics - Anfänger-Themen 1
A Java Projekt Java Basics - Anfänger-Themen 1
1 Im Java Projekt eine txt datei einbinden? Java Basics - Anfänger-Themen 8
N Eclipse Projekt im Terminal (Mac) öffnen.... Java Basics - Anfänger-Themen 4
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
M Bekomm altes Uni-Projekt in java nicht mehr zum laufen Java Basics - Anfänger-Themen 7
H Empfohlene Projekt-Struktur und mehr ... Java Basics - Anfänger-Themen 5
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
I Fehler mit kurzem Projekt Java Basics - Anfänger-Themen 7
J Schule Java Projekt Java Basics - Anfänger-Themen 8
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
J Projekt im anderen Projekt benutzen Java Basics - Anfänger-Themen 2
B Projekt öffnen (Eclipse) Java Basics - Anfänger-Themen 2
L Erstes Projekt aus zwei Projekten Java Basics - Anfänger-Themen 1
M Maven Dependency im Java Projekt Java Basics - Anfänger-Themen 1
L Eclipse Projekt überschreiben Java Basics - Anfänger-Themen 4
L Suche Programmier-Projekt mit Anleitung Java Basics - Anfänger-Themen 3
G Projekt: Webmeeting für Musiker Java Basics - Anfänger-Themen 12
R Anfängertipps für ein Projekt Java Basics - Anfänger-Themen 1
B [Projekt] CyberCafé Software Java Basics - Anfänger-Themen 13
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Projekt Java Anfänger Java Basics - Anfänger-Themen 28
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
J BlueJ Liste Würfel Projekt Java Basics - Anfänger-Themen 2
N Input/Output Exportieren Java Projekt Java Basics - Anfänger-Themen 6
M JSF Projekt erstellen unter Eclipse Java Basics - Anfänger-Themen 7
J Erste Schritte Hilfe bei absolutem Anfänger-Projekt Java Basics - Anfänger-Themen 4
S Projekt-Idee für testgetriebene Entwicklung gesucht Java Basics - Anfänger-Themen 2
D McDonalds - Java Projekt frage Java Basics - Anfänger-Themen 7
G Problem: Java Projekt als ausführbare Jar Exportieren (Eclipse) Java Basics - Anfänger-Themen 10
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
K Java Projekt als ausführbare Jar Exportieren (Eclipse) Problem Java Basics - Anfänger-Themen 24
E HILFE Projekt für die Schule--> Bilder einfügen Java Basics - Anfänger-Themen 9
N Kann man in einem Projekt nur eine Klasse ausführen? Java Basics - Anfänger-Themen 6
I Projekt aus .jar Sources erstellen Java Basics - Anfänger-Themen 10
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
D Auf anderes Projekt zugreifen Java Basics - Anfänger-Themen 25
H Entwicklung am selben Projekt im Netzwerk Java Basics - Anfänger-Themen 9
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4
K Kleines Projekt Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben