This commit is contained in:
Janis M
2022-04-25 13:36:21 +02:00
parent edbd51a7d6
commit fbcc1a7371
27 changed files with 1159 additions and 293 deletions

View File

@@ -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;
}
}