Ich arbeite derzeit an einem Projekt zur Eisenbahnsimulation. RollingStock (Rollmaterial) ist die Oberklasse und Coach (Wagen), Engine (Lokomotive) und TrainSet (Triebzug) sind Unterklassen von RollingStock.
- Alle Wagen haben eine eindeutige ganzzahlige aufsteigende ID, die bei 1 beginnt.
- TrainSets und Engines teilen sich ihren ID-Raum. Diese ID besteht aus einer Baureihe (series) und einem Namen (name) (beides Strings).
Nun muss ich den Befehl
Das Rollmaterial wird durch seine eindeutige ID identifiziert. Bei einem Wagen wird der ID ein W vorangestellt. Die Eingabe der ID für TrainSets/Engines ist
Beispiele für eine gültige Benutzereingabe wären also
-
-
Wie bei allen anderen meiner Befehlen habe ich wie folgt begonnen:
(
Ich bin mir leider unsicher, wie ich diesen Befehl am geschicktesten implementieren kann.
Damit ihr etwas mehr die Struktur meines Codes versteht:
Coaches, TrainSets und Engines werden wie folgt gespeichert:
private final Map<Integer, Coach> coaches;
private final List<Engine> engines;
private final List<TrainSet> trainSets;
- Alle Wagen haben eine eindeutige ganzzahlige aufsteigende ID, die bei 1 beginnt.
- TrainSets und Engines teilen sich ihren ID-Raum. Diese ID besteht aus einer Baureihe (series) und einem Namen (name) (beides Strings).
Nun muss ich den Befehl
delete rolling stock <id>
implementieren. Das Rollmaterial wird durch seine eindeutige ID identifiziert. Bei einem Wagen wird der ID ein W vorangestellt. Die Eingabe der ID für TrainSets/Engines ist
<series>-<name>
.Beispiele für eine gültige Benutzereingabe wären also
-
delete rolling stock W42
, Coach mit der ID 42 wird gelöscht,-
delete rolling stock ICE-1106
, TrainSet oder Engine mit der Baureihe ICE und dem Namen 1106 wird gelöscht.Wie bei allen anderen meiner Befehlen habe ich wie folgt begonnen:
Java:
public class DeleteRollingStockCommand extends Command {
private static final Pattern PATTERN = Pattern.compile(
String.format("delete rolling stock%s(?<id>%s)", InOutputStrings.COMMAND_SEPARATOR,
InOutputStrings.ROLLING_STOCK_ID_PATTERN));
private String[] id;
@Override
public void execute() {
try {
// TODO: Rollmaterial mit angegebener ID löschen
// RollingStock rollingStock = register.getRollingStock(id);
// register.removeRollingStock(rollingStock);
Terminal.printLine(InOutputStrings.OK);
} catch (InvalidInputException e) {
Terminal.printError(e.getMessage());
}
}
@Override
void setArguments(String argument) {
Matcher matcher = PATTERN.matcher(argument);
// TODO: Methode parseRollingStockId() programmieren
// id = parseRollingStockId(matcher.group("id"));
}
COMMAND_SEPARATOR = " ", ROLLING_STOCK_ID_PATTERN = "([W]+?[0-9]+)|(\w+-\w+)
")Ich bin mir leider unsicher, wie ich diesen Befehl am geschicktesten implementieren kann.
Damit ihr etwas mehr die Struktur meines Codes versteht:
Coaches, TrainSets und Engines werden wie folgt gespeichert:
private final Map<Integer, Coach> coaches;
private final List<Engine> engines;
private final List<TrainSet> trainSets;
Code:
private final Map<Integer, Coach> coaches;
private final List<Engine> engines;
private final List<TrainSet> trainSets;
public MyClassName() {
this.coaches = new TreeMap<>();
this.engines = new ArrayList<>();
this.trainSets = new ArrayList<>();
}