📜  在Java中用逆波兰表示法计算算术表达式的值(1)

📅  最后修改于: 2023-12-03 15:23:24.591000             🧑  作者: Mango

在Java中用逆波兰表示法计算算术表达式的值

逆波兰表示法(Reverse Polish Notation,简称 RPN)是一种用于表示算术表达式的语法,也被称为后缀表示法。它与传统的中缀表示法(Infix Notation)相对,不需要使用括号而且符合运算符优先级的规则也更为简单。

Java中实现逆波兰表示法计算算术表达式的值有许多方法,其中一种是使用栈数据结构来实现。

实现方法

下面是一个基于栈数据结构实现逆波兰表示法计算算术表达式的值的示例代码:

import java.util.*;

public class ReversePolishNotationCalculator {
    
    public static double evaluate(String expression) {
        Stack<Double> stack = new Stack<>();
        for (String token : expression.split("\\s+")) {
            switch (token) {
                case "+":
                    stack.push(stack.pop() + stack.pop());
                    break;
                case "-":
                    double b = stack.pop();
                    double a = stack.pop();
                    stack.push(a - b);
                    break;
                case "*":
                    stack.push(stack.pop() * stack.pop());
                    break;
                case "/":
                    double d = stack.pop();
                    double c = stack.pop();
                    stack.push(c / d);
                    break;
                default:
                    stack.push(Double.parseDouble(token));
                    break;
            }
        }
        return stack.pop();
    }
    
}

此代码中的 evaluate 方法接收一个参数 expression,表示符合逆波兰表示法的算术表达式字符串。接下来,代码会遍历该字符串中的所有标记(token),使用 switch 语句根据该标记的类型进行相应的处理,最终得到该表达式的值。

使用示例

下面是一个使用逆波兰表示法计算算术表达式的值的例子:

String expression = "3 4 + 5 * 6 -";
double result = ReversePolishNotationCalculator.evaluate(expression);
System.out.println(result);

这个例子中的逆波兰表达式为 "3 4 + 5 * 6 -",它表示的算术表达式为 (3 + 4) * 5 - 6,其值为 19。因此,该例子的输出结果为 19.0

总结

逆波兰表示法是一种用于表示算术表达式的简单语法,它可以方便地用栈数据结构来实现计算表达式的值。在Java中实现逆波兰表示法计算算术表达式的值时,可以使用类似上述示例代码的方法,先遍历表达式字符串中的所有标记,然后根据标记的类型进行相应的处理,最终得到表达式的值。