Java-如何重新实现计算算术表达式的方法,以便它不需要用户输入括号

时间:2015-08-09 16:31:25

标签: java stack

我有一个评估算术表达式的方法。此方法要求用户输入的表达式完全括号。如何重新实现此方法,以便不要求用户将其表达式括起来?因此,使用优先规则评估表达式。

import java.util.Stack;
import java.util.Scanner;
public static float evaluate(String s)
   {
      Scanner input = new Scanner(s);       
      Stack<Float> numbers = new Stack<Float>( );
      Stack<Character> operations = new Stack<Character>( );
      String next;
      char first;

      while (input.hasNext( ))
      {
     if (input.hasNext(FLOAT))
     {
        next = input.findInLine(FLOAT);
        numbers.push(new Float(next));
     }
     else
     {
        next = input.findInLine(CHARACTER);
            first = next.charAt(0);

        switch (first)
        {
        case '+': // Addition
        case '-': // Subtraction
        case '*': // Multiplication
        case '/': // Division
           operations.push(first);
           break;
        case ')': // Right parenthesis
           evaluateStackTops(numbers, operations);
           break;
        case '(': // Left parenthesis
           break;
        default : // Illegal character
           throw new IllegalArgumentException("Illegal character");
        }
     }
      }
      if (numbers.size( ) != 1)
         throw new IllegalArgumentException("Illegal input expression");
      return numbers.pop( );
   }

0 个答案:

没有答案