我有一个评估算术表达式的方法。此方法要求用户输入的表达式完全括号。如何重新实现此方法,以便不要求用户将其表达式括起来?因此,使用优先规则评估表达式。
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( );
}