Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wie kann ich in der Methode die, die Konsole liest, wenn z.B. "hoch" eingegeben wurde, dass die Funktion "dir" verwendet wurde, ausgeben? BZW Wie kann ich in einer boolean Methode nicht nur true sondern auch noch einen String zurückgeben oder ähnliches?
Wenn ich versuche direkt auf die boolean-methoden zuzugreifen bekomme ich den Fehler: "must be caught or declared to be thrown true"
Mein Leser:
Java:
public static void GameLoop()
throws IOException {
String eingabe;
eingabe="null";
Scanner scanner = new Scanner(System.in);
System.out.println("Eingabe: ");
while(!eingabe.equals("shutdown")){
eingabe = scanner.nextLine();
if (!Parser.parse(eingabe)){System.out.println("Eingabe falsch!");}
else {System.out.println("Durchgeführt!");}
}
System.out.println("Eingabe beendet!");
}
Ausschnitt aus meinem Parser:
Java:
public static boolean parse(String line) {
input = line;
index = 0;
try {
return command();
} catch (RAParseException e) {
return false;
}
}
private static boolean command() throws RAParseException {
if (simpleCom() && index >= input.length()) {return true;}
index = 0;
return dir() && index >= input.length();
}
private static boolean dir() throws RAParseException {
if (index <= input.length()-5) {
String subs = input.substring(index, index+5);
if (subs.equals("south")) {
index += 5;
return true;
}
if (subs.equals("hoch")) {
index += 5;
return true;
}
}
return false;
}
Es soll aber so ablaufen: Auslesen->Parser->Typ an Ausleser senden.
Würde ich jetzt if-abfragen im Ausleser implementieren, macht doch der Parser keinen Sinn mehr.
Der Code ist nur exemplarisch...
z.B. sind alle Zeilen, die mit dem Wort "hoch" anfangen vom Typ "Richtung".
Also auch "hoch auf den Berg", "hoch .....".
Mir ist klar was du meinst und dass es funktioniert, wird aber später viel zu unübersichtlich.
Ich suche eher so etwas. if(dir()) = true) {Typ A}, da das ganze aber rekursiv ist und dir() von parse() abhängt, habe ich ein Problem. Ich kann von außen nicht auf die Methode zugreifen.
Mir fehlt da natürlich teilweise das Basiswissen, aber kann ich nicht irgendwie die "true" zurückverfolgen?
Bzw. am besten wäre es bei command(), wenn dir() true ist, dass dies wieder eine funktion auslöst oder einen Wert weiter gibt.
So ganz werde ich aus dem Post nicht schlau, aber vielleicht hilft Dir das Schlagwort "Callback" irgendwie weiter - dabei gibt man dem Parser vorher eine oder mehrere Methoden mit, die für die vom Parser gefundenen Konstrukte aufgerufen werden sollen. Trifft der Parser dann später auf so ein Konstrukte, dann ruft er jedesmal die entsprechende Methode auf.
Beispiel:
Java:
class Parser {
public List<NodeType> parse( final InputStream is, final CallBack cb) {
...
}
}
interface Callback {
public foundNode( NodeType node);
}
Ein Verwender würde dann sagen
Java:
final Parser p = new Parser();
final FileInputStream fis = createInputStream();
p.parse( fis, new Callback() {
foundNode( final NodeType node) {
/* ... */
}
});