Initial commit of the source files.

This commit is contained in:
Bernhard Tellenbach 2017-09-17 17:07:01 +02:00
parent 1e077e1545
commit 8b02002d1f
5 changed files with 193 additions and 0 deletions

3
src/Anwendung.java Normal file
View File

@ -0,0 +1,3 @@
public class Anwendung {
}

58
src/Befehl.java Normal file
View File

@ -0,0 +1,58 @@
/**
* Objekte dieser Klasse halten Informationen ueber Befehle, die der Benutzer
* eingegeben hat. Ein Befehl besteht momentan aus zwei Zeichenketten: einem
* Befehlswort und einem zweiten Wort. Beim Befehl "nimm karte" beispielsweise
* sind die beiden Zeichenketten "nimm" und "karte".
*
* Wenn der Befehl nur aus einem Wort bestand, dann ist das zweite Wort <null>.
*
* @author tebe
* @version 20.10.2013
*/
class Befehl {
private String befehlswort;
private String zweitesWort;
/**
* Erzeuge ein Befehlsobjekt. Beide Woerter muessen angegeben werden, aber
* jedes oder beide duerfen 'null' sein. Ist das erste Wort 'null', wird der
* Befehl als nicht verstanden betrachtet. Ist das zweite Wort 'null' wurde
* kein zweites Wort angegeben.
*
* @param befehlswort
* Das erste Wort des Befehls.
* @param zweitesWort
* Das zweite Wort des Befehls.
*/
public Befehl(String befehlswort, String zweitesWort) {
this.befehlswort = befehlswort;
this.zweitesWort = zweitesWort;
}
/**
* Liefere das Befehlswort (das erste Wort) dieses Befehls.
*
* @return Das Befehlswort.
*/
public String gibBefehlswort() {
return befehlswort;
}
/**
* Liefere das zweite Wort dieses Befehls.
* Liefere 'null', wenn es kein zweites Wort gab.
* @return Das zweite Wort dieses Befehls.
*/
public String gibZweitesWort() {
return zweitesWort;
}
/**
* Testet, ob dieser Befehl ein zweites Wort hat.
* @return 'true', wenn dieser Befehl ein zweites Wort hat.
*/
public boolean hatZweitesWort() {
return (zweitesWort != null);
}
}

53
src/Befehlswort.java Normal file
View File

@ -0,0 +1,53 @@
import java.util.ArrayList;
import java.util.HashSet;
/**
* Diese Klasse haelt eine Aufzaehlung der akzeptierten Befehlswoerter.
* Mit ihrer Hilfe werden eingetippte Befehle erkannt.
*
* @author tebe
* @version 1.0
*/
public class Befehlswort {
// Ein HashSet mit den gueltigen Befehlswoertern als Klassenvariable
private static final HashSet<String> gueltigeBefehle = new HashSet<String>();
static {
gueltigeBefehle.add("gehe");
gueltigeBefehle.add("beenden");
gueltigeBefehle.add("hilfe");
}
/**
* Konstruktor - initialisiere die Befehlswörter.
*/
public Befehlswort()
{
// tut momentan nichts
}
/**
* Pruefe, ob eine gegebene Zeichenkette ein gueltiger
* Befehl ist.
*
* @return 'true', wenn die gegebene Zeichenkette ein gueltiger
* Befehl ist, 'false' sonst.
*/
public static boolean istBefehl(String eingabe)
{
return gueltigeBefehle.contains(eingabe);
}
/**
* Gibt die akzeptierten Befehlsworte als Text zurueck.
*
* @return Die akzeptierten Befehlsworte als Text
*/
public static String gibBefehlsworteAlsText() {
String text = "";
for (String befehl : gueltigeBefehle) {
text = text + befehl + " ";
}
return text;
}
}

39
src/Kontroller.java Normal file
View File

@ -0,0 +1,39 @@
/**
* Diese Klasse verarbeitet Befehle vom Typ
* {@link Befehl Befehl} und lösst die dazu
* passenden Aktionen aus.
*
* @author tebe
*
*/
public class Kontroller {
/**
* Verarbeite einen gegebenen Befehl
*
* @param befehl
* Der zu verarbeitende Befehl.
* @return 'false', wenn ein Abbruchbefehl verarbeitet wurde
*/
public boolean verarbeiteBefehl(Befehl befehl) {
boolean macheWeiter = true;
String befehlswort = befehl.gibBefehlswort();
if (Befehlswort.istBefehl(befehlswort)) {
if (befehlswort.equals("gehe")) {
System.out.println("Befehl GEHE " + befehl.gibZweitesWort() + " wird ausgefuehrt");
} else if (befehlswort.equals("hilfe")) {
System.out.println("Gueltige Befehle: "
+ Befehlswort.gibBefehlsworteAlsText());
} else if (befehlswort.equals("beenden")) {
System.out.println("Befehl BEENDEN wird ausgefuehrt.");
macheWeiter = false;
} else {
System.out.println("Befehlswort ohne zugehoerige Aktion: Abbruch.");
macheWeiter = false;
}
} else {
System.out.println("Ich weiss nicht, was Sie meinen...");
}
return macheWeiter;
}
}

40
src/Parser.java Normal file
View File

@ -0,0 +1,40 @@
import java.util.Scanner;
/**
* Dieser Parser liest Benutzereingaben und wandelt sie in Befehle um. Bei jedem
* Aufruf liest er eine Zeile von der Konsole und versucht, diese als einen
* Befehl aus bis zu zwei Woertern zu interpretieren. Er liefert den Befehl als
* ein Objekt der Klasse Befehl zurueck.
*
* Der Parser verfuegt ueber einen Satz an bekannten Befehlen. Er
* vergleicht die Eingabe mit diesen Befehlen. Wenn die Eingabe
* keinen bekannten Befehl enthaelt, dann liefert der Parser ein als
* unbekannter Befehl gekennzeichnetes Objekt zurueck.
*
* @author tebe
* @version 18.10.2013
*/
class Parser {
// Lieferant fuer eingegebene Befehle
private Scanner leser = new Scanner(System.in);
/**
* @return Der naechste Befehl des Benutzers.
*/
public Befehl liefereBefehl() {
Befehl befehl;
String eingabezeile; // fuer die gesamte Eingabezeile
System.out.print("> "); // Eingabeaufforderung
eingabezeile = leser.nextLine();
String[] woerter = eingabezeile.split(" ");
if (woerter.length >= 2) {
befehl = new Befehl(woerter[0], woerter[1]);
} else {
befehl = new Befehl(woerter[0], null);
}
return befehl;
}
}