2015-01-29 5 views
0

접두사 표현식을 평가할 내 방법에 대한 질문이 있습니다. 스택을 사용하는 포스트 픽스 (post fix) 표현식에서 작동하도록 했으므로 유사해야한다고 생각했습니다. 왼쪽에서 오른쪽으로 읽는 대신 오른쪽에서 왼쪽으로 읽어야합니다. 여기에 평가를위한 나의 방법이다, 어떤 제안이나 포인터는 크게 감상 할 수있다 :접두사 표현식 평가 (스택 사용) -Java

// evaluates a preFix expression 
public static int evaluate(String input) 
{ 
    int number, leftOperand, rightOperand, result; 
    char operator; 
    String token; 

    // create an integer stack 
    Stack<Integer> stack = new Stack<Integer>(); 

    // create string tokenizer containing string input 
    StringTokenizer tokenizer = new StringTokenizer(input); 

    // while input string has more tokens 
    while (tokenizer.hasMoreTokens()) { 
     token = tokenizer.nextToken();// get next token 
     // if token is character 
     if (isChar(token)) { 
      number = Integer.parseInt(token);// push into stack 
      stack.push(number); 
     // if token is operator 
     } else { 
      operator = token.charAt(0);// get operator 
      rightOperand = stack.pop();// pop two numbers 
      leftOperand = stack.pop(); 
      result = evaluate(rightOperand, leftOperand, operator);// evaluate 
      stack.push(result);// push result 
     } 
    } 
    return stack.pop();// final answer 

예외 :

Exception in thread "main" java.lang.NumberFormatException: For input string: "-" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:572) 
at java.lang.Integer.parseInt(Integer.java:615) 
at PrefixEvaluator.evaluate(PrefixEvaluator.java:40) 
at PrefixEvaluator.main(PrefixEvaluator.java:99) 
+1

음 ... 당신은 당신의 아이디어를 시도 했습니까? 그게 효과가 있니? – Dima

+0

예. 나는 그것을 시도하고 그것은 나에게 오류를 줬다. – ExecutionStyle21

+0

그리고 만약 누군가가 내 모든 코드를보고 싶어서 정교하게 묻는다면, 나는 가능한 한 분명히하고 싶다. – ExecutionStyle21

답변

0

NumberFormatException 당신이 구문 분석하려고 말한다 '-'숫자로. 따라서 토큰이 숫자인지 또는 운영자인지 여부를 결정하기 위해 게시하지 않은 코드에 이상이있을 것입니다.