Guten Abend,
ich melde mich erneut, um meine bisherigen Methoden noch etwas anzupassen und angenehmer für den Benutzer zu gestalten.
Es muss noch geprüft werden, ob der Start- oder Endpunkt des hinzuzufügenden Tracks mit einem Start- oder Endpunkt eines anderen Tracks verbunden ist - natürlich nur wenn
Hier ist meine derzeitige
Sollte ich hierbei mit Tiefensuche arbeiten? @mihe7 kann die
Außerdem würde ich gerne
Ähnliches Problem habe ich mit der Methode zum Entfernen eines Tracks:
Funktioniert computeIfAbsent() im Falle des Entfernens überhaupt? Falls nicht, wie kann dies angepasst werden?
Viele Grüße
ich melde mich erneut, um meine bisherigen Methoden noch etwas anzupassen und angenehmer für den Benutzer zu gestalten.
Es muss noch geprüft werden, ob der Start- oder Endpunkt des hinzuzufügenden Tracks mit einem Start- oder Endpunkt eines anderen Tracks verbunden ist - natürlich nur wenn
!edges.isEmpty()
. Im Falle einer Weiche: einer der drei Punkte muss auf einem Start- oder Endpunkt eines anderen Gleises liegen. Nur ein anderes Gleis (normales Gleis oder Weiche) kann mit einem Punkt eines Gleises verbunden werden.Hier ist meine derzeitige
addTrack()
Methode:
Java:
public void addTrack(Track track) throws LogicException {
/* TODO:
- Check if start- or endpoint of the track to be added is connected with a start- or endpoint of another track - only if !edges.isEmpty().
-> In case of a switch: one of the three points must be on a start or end point of another track.
- Only one other track (normal track or track switch) can be connected to a point of a track.
*/
edges.computeIfAbsent(track.getStartPoint(), x -> new ArrayList<>()).add(track);
track.getEndPoints().forEach(p -> edges.computeIfAbsent(p, x -> new ArrayList<>()).add(track));
...
}
Sollte ich hierbei mit Tiefensuche arbeiten? @mihe7 kann die
isConnectedAfterRemoving()
Methode ggf. einfach etwas angepasst werden?Außerdem würde ich gerne
computeIfAbsent()
ersetzen: Falls der key bereits existiert, möchte ich eine Exception werfen lassen. Kann ich dies mit computeIfAbsent()
bewerkstelligen, oder ist das gar nicht möglich? Falls nicht, wie kann der Code umstrukturiert werden, sodass eine Exception geworfen wird?Ähnliches Problem habe ich mit der Methode zum Entfernen eines Tracks:
Java:
public void removeTrack(int trackId) {
...
edges.remove(track.getStartPoint(), track.getPoints());
//edges.computeIfAbsent(track.getStartPoint(), x -> new ArrayList<>()).remove(track);
//track.getEndPoints().forEach(p -> edges.computeIfAbsent(p, x -> new ArrayList<>()).remove(track));
this.tracks.remove(trackId, track);
}
Funktioniert computeIfAbsent() im Falle des Entfernens überhaupt? Falls nicht, wie kann dies angepasst werden?
edges.remove(track.getStartPoint(), track.getPoints());
funktioniert leider nicht.Viele Grüße