Verknüpfung von Räumen mit Hashset

WIstud2015

Mitglied
Hallo zusammen,

ich sitze gerade einer einer Aufgabe bei der Räume wie kitchen, dining room etc. mit Türen verbunden werden sollen. Dabei darf jeder Raum nur eine Tür zu einem anderen Raum haben (z.B. Kitchen zu Dining Room), aber beliebig viele Türen in verschiedene Räume ( also z.B. kitchen in dining Room und kitchen in living room.

Es gibt eine Klasse, die das Ganze testen, also Räume hinzufügt und entfernt bzw. prüft, ob es Verbindungen gibt.

Diese Klasse greift auf die Klasse Room zu, welche die Methoden enthält( Siehe Code).
Wenn ein Raum bereits eine Tür hat, soll die Methode addDoorInto(Room r) ohne Wirkung bleiben. Deshalb war meine Idee das per Hashset zu lösen, da dann doch ein Element nur einmal vorkommen kann ?!

Mein Problem ist jetzt, dass ein Raum zwar hinzugefügt wird, aber laut der Aufgabe der andere Raum, mit dem die Verbindung besteht auch in der Liste sein muss.

Beispiel:
kitchen.addDoorInto(diningRoom)

Dann hat kitchen eine Verbindung zum dining Room, aber nach jetzigem Stand nicht umgekehrt. Ich stehe da etwas auf dem Schlauch.

Hat jemand vielleicht eine Idee, wie man das am einfachsten lösen kann ?

Vielen Dank!

Java:
import java. util.HashSet;

/**
* A room may be connected to other rooms with one door each.
*/
public class Room {
    HashSet<Room> doors = new HashSet<Room>();
    /**
     * Adds a door into a specific room r. If a door to r already
     * exists, this function has no effect.
     * @param r The room to be connected.
     */
    public void addDoorInto(Room r) {
        doors.add(r);
       
    }
    /**
     * Removes the door into a specific room r. If no door to r exists,
     * this function has no effect.
     * @param r The room to be disconnected.
     */
    public void removeDoorInto(Room r){
        doors.remove(r);
       
    }

    /**
     * Checks if a connection via a door exists.
     * @param r The room the connection is checked to.
     * @return Returns true if a door into room r exists. Otherwise returns false.
     */
    public boolean hasDoorInto(Room r) {
        if(doors.contains(r)){return true;}
        return false;
    }
}
 

Tobse

Top Contributor
Die Anforderung ist doch ziemlich komisch. Darf die Küche jetzt eine oder zwei Türen haben?!

Türen sind von ihrer Natur aus Bidirektional. Wenn zwei Türen in einen Raum hinein führen, führen auch zwei wieder raus.
 

WIstud2015

Mitglied
Die Küche darf so viele Türen haben wie nötig, aber nur eine ins z.B. Wohnzimmer.

So stehts im Aufgabentext:
Ein Raum soll Türen zu beliebig vielen anderen Räaumen erhalten. Jedoch soll zu jedem
Raum nur maximal eine Tür existieren.
 

Tobse

Top Contributor
Ich verstehe die Aufgabenstellung nicht. Wenn man von der Küche und vom Flur ins Wohnzimmer kommt, kommt man auch vom Wohnzimmer in die Küche und in den Flur. Entweder ist da was mit der Aufgabenstellung schief oder ich stehe mächtig auf dem Schlauch....

Edit: Ich glaub jetzt hab ichs verstanden :D Zwei Räume dürfen nur durch eine Tür verbunden sein. Stimmt das so?
 

WIstud2015

Mitglied
Ja, von der Logik schon. Aber so wie ich das jetzt mit der Add Methode gelöst habe, gibt es einen Fehler bei der zweiten Assert Abfrage.


assert kitchen.hasDoorInto(diningRoom) == true
: "The kitchen should now have a door to the dining room.";
assert diningRoom.hasDoorInto(kitchen) == true
: "If the kitchen has a door to the dining room, the dining room should have a door to the kitchen, too.";
 

Bitfehler

Bekanntes Mitglied
Bei deinem oben gezeigten Code-Ausschnitt weiß jeder Raum, wo er Türen hin hat. So besteht eine Verbindung in eine Richtung. Wenn also eine Verbindung erstellt werden soll, müsstet du die Methode addDoorInto zwei Mal aufrufen, damit jeder Raum einen Eintrag in seinem HashSet bekommt. Der erste Aufruf speichert im Raum A die Verbindung zu Raum B und der zweite Aufruf bildet den Rückweg.
 

Tobse

Top Contributor
Deine Lösung könnte so funktionieren; die hasDoorInto(Room) Methode kannst du aber vereinfachen: return doors.contains(room);

Wie Bitfehler schon sagte gibts da jetzt aber ein Problem: wenn man kitchen.addDoorInto(livingRoom) aufruft, muss danach livingRoom.hasDoorInto(kitchen) true zurückgeben (Türen sind ja bidirektional). Deshalb würde ich die hasDoorInto(Room) Methode so implementieren:

Java:
public boolean hasDoorInto(Room room) {
    return doors.contains(room) || room.doors.contains(this);
}
 

WIstud2015

Mitglied
Sehr cool. Man muss allerdings noch die add und remove Methode anpassen, weil sonst beim Entfernen der Tür ein Assert anschlägt. So klappt es jetzt:

Java:
import java. util.HashSet;

/**
* A room may be connected to other rooms with one door each.
*/
public class Room {
    HashSet<Room> doors = new HashSet<Room>();
    /**
     * Adds a door into a specific room r. If a door to r already
     * exists, this function has no effect.
     * @param r The room to be connected.
     */
    public void addDoorInto(Room r) {
        doors.add(r);
        r.doors.add(this);
       
    }
    /**
     * Removes the door into a specific room r. If no door to r exists,
     * this function has no effect.
     * @param r The room to be disconnected.
     */
    public void removeDoorInto(Room r){
        doors.remove(r);
        r.doors.remove(this);
       
    }

    /**
     * Checks if a connection via a door exists.
     * @param r The room the connection is checked to.
     * @return Returns true if a door into room r exists. Otherwise returns false.
     */
    public boolean hasDoorInto(Room r) {
        //if(doors.contains(r)){return true;}
        //return false;
           return doors.contains(r) || r.doors.contains(this);
       
    }
}

Vielen Dank für die Hilfe !
 
K

kneitzel

Gast
Wenn Du die Tür in beiden Räumen einsetzt und auch in beiden Räumen entfernst, dann musst Du nicht mehr bei der Prüfung beide Räume prüfen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jamie logische Verknüpfung zur Schaltjahr-Berechnung Java Basics - Anfänger-Themen 30
S Verknüpfung von Arraylisten Java Basics - Anfänger-Themen 3
B Erste Schritte Problem bei der Verknüpfung von zwei klassen Java Basics - Anfänger-Themen 8
R Klassen Klassen Verknüpfung Java Basics - Anfänger-Themen 6
OnDemand XOR ^ Verknüpfung Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
S Verknüpfung von .java Java Basics - Anfänger-Themen 4
sqsh logische verknüpfung Java Basics - Anfänger-Themen 3
A XOR Verknüpfung Java Basics - Anfänger-Themen 5
A Java Verknüpfung Java Basics - Anfänger-Themen 8
F Verknüpfung erstellen Java Basics - Anfänger-Themen 7
K Erstellen einer Verknüpfung Java Basics - Anfänger-Themen 3
G AND-Verknüpfung in JPQL-Queries! Java Basics - Anfänger-Themen 2
A lnk (Verknüpfung) in java Java Basics - Anfänger-Themen 10
A Oder Verknüpfung in do-Schleife Java Basics - Anfänger-Themen 2
K Verknüpfung von zB Tabellenzeilen mit Objekten. Java Basics - Anfänger-Themen 5
B Java "AND" Verknüpfung (ok) Java Basics - Anfänger-Themen 7
P Verknüpfung von Tabellen Java Basics - Anfänger-Themen 7
thE_29 visual basic verknüpfung in java Java Basics - Anfänger-Themen 3
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
J Hashset Java Basics - Anfänger-Themen 13
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
J HashSet contain Methode funktioniert nicht wie gewollt Java Basics - Anfänger-Themen 7
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
A HashSet (oder besser geignetes) Java Basics - Anfänger-Themen 14
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
J So ähnlich wie HashSet Java Basics - Anfänger-Themen 2
D HashSet vs Liste Java Basics - Anfänger-Themen 5
T HashSet Java Basics - Anfänger-Themen 3
F suche Elemente in HashSet Java Basics - Anfänger-Themen 5
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
J HashSet Fehlerhaft Java Basics - Anfänger-Themen 10
J HashSet Implementierung Java Basics - Anfänger-Themen 16
D Problem mit HashSet Java Basics - Anfänger-Themen 12
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
B Hashset iterieren problem Java Basics - Anfänger-Themen 3
C HashSet Problem Java Basics - Anfänger-Themen 3
DasBrot Datentypen HashSet contains() Java Basics - Anfänger-Themen 3
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
M HashSet.contains() Java Basics - Anfänger-Themen 2
N Map<String, HashSet<String>> Umwandeln in Map<String, ArrayList<String>> Java Basics - Anfänger-Themen 14
neurox Limit bei HashSet? Java Basics - Anfänger-Themen 2
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
G hashset überschreibt werte bei add Java Basics - Anfänger-Themen 1
G Wie mach ich ein HashSet für eigene Objecte? Java Basics - Anfänger-Themen 9
M HashSet Initialisierungsgröße? Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G Probleme mit HashSet Java Basics - Anfänger-Themen 5
S HashSet in HashMap, Zugriff Java Basics - Anfänger-Themen 3
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
L Was ist ein HashSet? Java Basics - Anfänger-Themen 33
G HashSet Java Basics - Anfänger-Themen 21
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
B Warum hat HashSet kein get(Object o) ? Java Basics - Anfänger-Themen 8
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben