mirror of
https://github.com/DerTyp7/lf05-java.git
synced 2025-10-30 04:47:13 +01:00
nogard 5
This commit is contained in:
@@ -1,38 +1,61 @@
|
||||
package nogard.schritt5;
|
||||
|
||||
import java.util.Arrays;
|
||||
package nogard.schritt5;
|
||||
|
||||
/**
|
||||
* Diese Klasse erzeugt Instanzen der Klasse Befehl.
|
||||
*
|
||||
* Kann keine Instanz der Klasse Befehl erzeugt werden, so reagiert die Klasse mit einer entsprechenden Fehlermeldung.
|
||||
*
|
||||
* Besteht ein Befehl nur aus seinem Schl<68>sselwort, so ist der Zusatz des Befehls 'null'.
|
||||
*/
|
||||
public class BefehlFactory {
|
||||
|
||||
public static Befehl createBefehl(String input) throws BefehlUnbekanntException {
|
||||
Befehl b;
|
||||
if (input.length() == 0) {
|
||||
throw new BefehlUnbekanntException("Keine Argumente übergeben");
|
||||
} else {
|
||||
String[] befehl_str = input.toLowerCase().split(" ");
|
||||
String wort = befehl_str[0];
|
||||
b = switch (wort) {
|
||||
case "go" -> createGoBefehl(befehl_str);
|
||||
case "help", "quit" -> new Befehl(wort);
|
||||
default -> throw new BefehlUnbekanntException(wort + " ist kein definierter Befehl.");
|
||||
};
|
||||
/**
|
||||
* Erstellt eine neue Instanz eines Befehls auf Basis einer Benutzereingabe.
|
||||
* @param input Die Benutzereingabe.
|
||||
* @return Der erstellte Befehl.
|
||||
* @throws BefehlUnbekanntException Wird geworfen, wenn keine Instanz eines Befehls erzeugt werden kann. Gr<47>nde k<>nnen sein:
|
||||
* - Kein Befehl eingegeben.
|
||||
* - Unbekannter Befehl eingegeben.
|
||||
* - Unbekannte oder nicht eingegebene Richtung beim Befehl "go".
|
||||
*/
|
||||
public static Befehl createBefehl(String input) throws BefehlUnbekanntException {
|
||||
// Abbruch bei fehlender Eingabe.
|
||||
if(input == null || input.trim().equals("")) {
|
||||
throw new BefehlUnbekanntException("Du hast keinen Befehl eingegeben.");
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
private static Befehl createGoBefehl(String[] befehl_str) throws BefehlUnbekanntException {
|
||||
if (befehl_str.length != 2) {
|
||||
throw new BefehlUnbekanntException("Befehl 'go' benötigt 2 parameter");
|
||||
}
|
||||
|
||||
String befehl_wort = befehl_str[0];
|
||||
String befehl_zusatz = befehl_str[1];
|
||||
|
||||
for (Richtungen r: Richtungen.values()) {
|
||||
if (r.name().equalsIgnoreCase(befehl_zusatz)) {
|
||||
return new Befehl(befehl_wort, befehl_zusatz);
|
||||
}
|
||||
}
|
||||
throw new BefehlUnbekanntException(befehl_zusatz + " ist keine valide Richtung.");
|
||||
}
|
||||
// Befehl aufsplitten in die einzelnen Befehlsteile
|
||||
String[] befehlArray = input.trim().split(" ");
|
||||
// Auswerten des Befehlsworts
|
||||
Befehl befehl = null;
|
||||
String befehlWort = befehlArray[0].trim().toLowerCase();
|
||||
switch (befehlWort) {
|
||||
case "go":
|
||||
if (befehlArray.length >= 2) {
|
||||
String richtung = befehlArray[1].trim().toLowerCase();
|
||||
// Pr<50>fen der angegebenen Richtung per Schleife <20>ber Enum aller Richtungen
|
||||
for (Richtungen r : Richtungen.values()) {
|
||||
if (r.name().equalsIgnoreCase(richtung)) {
|
||||
befehl = new Befehl(befehlWort, richtung);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (befehl == null) {
|
||||
throw new BefehlUnbekanntException("Gib eine korrekte Richtung an.");
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new BefehlUnbekanntException("Erg<EFBFBD>nze deinen Befehl um die Richtung, in die du dich bewegen m<>chtest.");
|
||||
}
|
||||
break;
|
||||
case "help":
|
||||
befehl = new Befehl("help", null);
|
||||
break;
|
||||
case "quit":
|
||||
befehl = new Befehl("quit", null);
|
||||
break;
|
||||
default:
|
||||
throw new BefehlUnbekanntException("Ich wei<65> nicht, was du meinst ...");
|
||||
}
|
||||
return befehl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user