2016-09-27 4 views
0

Entwerfen Sie die Funktion zum Eingeben eines Strings und zum Ausgeben von "true" oder "false" - geben Sie an, ob der String ein Ausdruck ist oder nicht.Java Recursion Expression Checker

Drucken Sie eine Nachricht, die angibt, ob die Zeichenfolge ein wohlgeformter Ausdruck ist. Nach der Verarbeitung aller Eingaben druckt das Programm schließlich eine Beendigungsnachricht und stoppt. Die folgende Regel definiert einen wohlgeformten expression:

.expr> = S | I(C)T(.exp>) 

Hier mein Code:

import java.io.FileNotFoundException; 
import java.util.*; 
import java.util.Scanner; 

public class RecursionExpression { 


    public static void main(String[] args) throws FileNotFoundException{ 
     System.out.println("Enter the expression statement."); 
     Scanner keyboard = new Scanner(System.in); 
     String expr = keyboard.nextLine(); 
    } 
    public static boolean expression(String n) 
    { 
     if (n.charAt(0) == 's') 
     return true; 
     else if(n.length() >=6) 
     { 
      if (n.substring(0,5) == "I(C)T") 
       return expression(n.substring(6, n.length()-1)); 


     } 
     return false; 

    } 
} 
+0

Grundsätzlich Sie Ihre Aufgabe fiel hier; und uns sagen, dass du es nicht lösen kannst. Aber was ist deine Frage? Dass wir deine Hausaufgaben für dich machen? Wenn Sie nicht verstehen, wie Sie diese Ausdr Definition interpretieren können; Hast du in Erwägung gezogen, deinen Lehrer um Aufklärung zu bitten? – GhostCat

+0

Tut mir leid, ich habe nicht den richtigen Code eingegeben. Wird gerade aktualisiert. –

Antwort

1

allererst der Bedingung, dass das erste Zeichen 's' unzureichend ist (und nach der Regel er sollte ein Großbuchstabe sein 'S' BTW). Dies kann sogar eine Ausnahme für leere Zeichenfolgen auslösen. Darüber hinaus akzeptiert jede Zeichenfolge beginnend mit einem s, einschließlich "so you want this string to match too".

Außerdem überprüfen Sie nicht die () Klammern um .exp>, die auch getan werden müssen. Weiterhin vergleicht String s, die nicht Zeitkonstanten mit == kompilieren funktioniert nicht (siehe How do I compare strings in Java?):

public static boolean expression(String n) { 
    return n.equals("S") || 
      (n.startsWith("I(C)T(") && n.endsWith(")") && expression(n.substring(6, n.length()-1))); 
}