2016-08-04 12 views
0

Ich habe eine Frage auf Parser, wenn ein Benutzer den Ausdruck wie (a+b*c(d-e) eingibt, vergaß er, die andere schließende Klammer einzugeben, und das Programm sollte einen Fehler wie It's a wrong Expression geben. Bitte helfen Sie mir bei diesem Programm, ich habe keine Ahnung, wie ich anfangen soll.Wie Token aus einer mathematischen Gleichung zu analysieren?

+0

den Eingang Parse, wann immer eine Öffnung "(". Gefunden wird, schieben Sie es auf Stapel Pop-Stack, wenn ")" angetroffen wird. Nachdem alle Eingabe-Token verarbeitet wurden, prüfen Sie, ob der Stapel leer ist. Wenn eine leere Eingabe korrekt ist, ansonsten falscher Ausdruck. – JavaHopper

Antwort

0

Verwenden Sie eine stack Datenstruktur, um den Klammervergleich zu validieren.

Wenn das Zeichen '(','{','['Push das Zeichen auf den Stapel, wenn das Zeichen ')','}',']' jeweils für die passende Öffnung Halterung ist dann pop. Fahren Sie fort, bis der Stapel leer ist.

Code:

import java.util.*; 

class ParenthesisMatching 
{ 
    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     Stack<Integer> stk = new Stack<Integer>(); 
     System.out.println("Enter expression"); 
     String exp = scan.next();   
     if(isValid(exp)) 
      System.out.println("matched"); 
     else System.out.println("unmatched"); 
    } 

    public static boolean isValid(String s) { 
     HashMap<Character, Character> map = new HashMap<Character, Character>(); 
     map.put('(', ')'); 
     map.put('[', ']'); 
     map.put('{', '}'); 

     Stack<Character> stack = new Stack<Character>(); 

     for (int i = 0; i < s.length(); i++) { 
      char curr = s.charAt(i); 

      if (map.keySet().contains(curr)) { 
       stack.push(curr); 
      } else if (map.values().contains(curr)) { 
       if (!stack.empty() && map.get(stack.peek()) == curr) { 
        stack.pop(); 
       } else { 
        return false; 
       } 
      } 
     } 

     return stack.empty(); 
    } 
} 
+0

genau! Dies ist ein paranthesis passendes Problem – JavaHopper

+0

Gibt es einen CODE dafür und macht mein Programm laufen. – Akon

+0

Was ist, wenn ein '+' ohne zweiten Operanden gefunden wird? Oder ist das nicht Teil des Problems? – TsundereBug