Konsole lesen, parsen und ausführen.
lima-city → Forum → Programmiersprachen → Java
antwort
array
ausschnitt
beendet code
bestimmte merkmale
code
eingabe
frage
genauer beschreiben
index
input
leser
methode
objekt
problem
scanner
string
system
weglassen
west
-
Ich bin schon viel weiter als angegeben deswegen hab ich mal alles editiert.
Neue Fragen...
Wie kann ich in dem Leser ausgeben, wenn z.B. "north" eingegeben wurde, dass die Funktion "dir" verwendet wurde. BZW Wie kann ich in einer boolean Methode nicht nur true sondern auch noch einen String mit rausgeben?
Meine Leser:
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!"); }
Und ein Ausschnitt vom Parser:
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; if (paramCom() && index >= input.length()) {return true;} index = 0; if (useDoor() && index >= input.length()) {return true;} index = 0; return useWith() && index >= input.length(); } private static boolean dir() throws RAParseException { if (index <= input.length() - 4) { String subs = input.substring(index, index+4); if (subs.equals("east")) { index += 4; return true; } if (subs.equals("west")) { index += 4; return true; } } if (index <= input.length()-5) { String subs = input.substring(index, index+5); if (subs.equals("south")) { index += 5; return true; } if (subs.equals("north")) { index += 5; return true; } } return false; }
Beitrag zuletzt geändert: 16.1.2011 23:04:11 von koss -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Moin,
Dein Problem ist mir grad noch nicht wirklich verständlich.
Aber ich versuche mich mal an dem, was ich herauslesen konnte.
Du willst eine Methode mit Rückgabewert dazu bringen, nicht nur ein boolean sondern auch einen String zurückzugeben?
Das wird leider nichts, da solche eine Methode immer nur einen Rückgabewert kennt.
Man kann aber tricksen, indem man zum Beispiel ein komplett eigenes Objekt benutzt.
Oder ein Array das sowohl boolean als auch den String liefert.
Da ist dann natürlich wieder parsen notwendig...
Gruß,
Pawnee -
Hallo koss,
wie ich das sehe, hast Du eine Methode GameLoop(), die Eingaben erfasst, die an die Methode parse(String) übergeben wird und mittels command() und dir() auf bestimmte Merkmale geprüft wird. Nun willst Du einen String an GameLoop() zurückgeben, ob dir() überhaupt durchlaufen wurde, richtig?
Dann müsste es doch auch reichen, wenn Du parse ein boolean-Array zurückgeben lässt, da der String ja nur die Antwort auf eine Entscheidungsfrage (Ja/Nein) geben soll:
public static boolean[] parse(String line) { boolean[] ret = new boolean[2]; try{ ret[0]=command(); }catch(RAParseException e){ ret[0] = false; } try{ ret[1]=dir(); }catch(RAParseException e){ ret[1] = false; } return ret; }
Falls Du auf einem String bestehst, könntet Du ja auch parse(String) weglassen und in GameLoop() command() und dir() getrennt aufrufen, etwa so:
public static void GameLoop() throws IOException { //... System.out.println(Parser.command()+" "+Parser.dir()); //... }
private static boolean dir() { // ... return ret; } private static String command() { // ... return ret; }
Ich hoffe, ich habe Dein Problem einigermaßen richtig verstanden und konnte Dir weiterhelfen.
Ansonsten solltest Du vielleicht Dein Problem nochmal genauer beschreiben (insbesondere bspw. wann dir() aufgerufen wird und was Du mit den Methoden bezwecken willst).
Gruß,
floscher -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage