能否用Java的Stack类实现表达式求值

   2024-09-29 7430
核心提示:是的,你可以使用Java的Stack类来实现表达式求值。这里是一个简单的例子,展示了如何使用Stack类实现中缀表达式到后缀表达式(逆

是的,你可以使用Java的Stack类来实现表达式求值。这里是一个简单的例子,展示了如何使用Stack类实现中缀表达式到后缀表达式(逆波兰表示法)的转换以及计算后缀表达式的值:

import java.util.Stack;import java.util.StringTokenizer;public class ExpressionEvaluator {    public static void main(String[] args) {        String expression = "3 + 4 * 2 / ( 1 - 5 ) ^ 2";        String postfix = convertToPostfix(expression);        int result = evaluatePostfix(postfix);        System.out.println("Result: " + result);    }    public static String convertToPostfix(String expression) {        Stack<String> stack = new Stack<>();        StringTokenizer tokenizer = new StringTokenizer(expression);        while (tokenizer.hasMoreTokens()) {            String token = tokenizer.nextToken();            if (isOperator(token)) {                String topOperand = stack.pop();                String secondOperand = stack.pop();                String result = performOperation(topOperand, secondOperand, token);                stack.push(result);            } else {                stack.push(token);            }        }        return stack.pop();    }    public static int evaluatePostfix(String postfix) {        Stack<Integer> stack = new Stack<>();        for (String token : postfix.split(" ")) {            int operand = Integer.parseInt(token);            stack.push(operand);        }        return stack.pop();    }    public static boolean isOperator(String token) {        return token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/") || token.equals("^");    }    public static String performOperation(String operand1, String operand2, String operator) {        int num1 = Integer.parseInt(operand1);        int num2 = Integer.parseInt(operand2);        switch (operator) {            case "+":                return String.valueOf(num1 + num2);            case "-":                return String.valueOf(num1 - num2);            case "*":                return String.valueOf(num1 * num2);            case "/":                return String.valueOf(num1 / num2);            case "^":                return String.valueOf(Math.pow(num1, num2));            default:                throw new IllegalArgumentException("Invalid operator: " + operator);        }    }}

这个例子中,我们首先将中缀表达式转换为后缀表达式,然后计算后缀表达式的值。注意,这个例子仅支持整数运算,如果你需要支持浮点数运算,可以将Integer.parseInt()替换为Double.parseDouble(),并在计算时进行相应的类型转换。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号