2015-01-29 3 views
0

У меня вопрос о моем методе, который должен оценивать префиксные выражения. Я получил это, чтобы работать для сообщений, фиксирующих выражения, используя стеки, поэтому я решил, что он должен быть схожим. Мне нужно читать справа налево, а не слева направо. Вот мой метод оценки, любые предложения или указатели больш были бы оценены:Префикс Оценка выражения (с использованием стеков) -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 говорит, что вы пытались разобрать «-» как число. Поэтому в коде, который вы не отправляли, должно быть что-то не так, что решает, является ли токен числом или оператором.

Смежные вопросы