91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

能否用Java的Stack類實現表達式求值

小樊
83
2024-09-23 21:50:41
欄目: 編程語言

是的,你可以使用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(),并在計算時進行相應的類型轉換。

0
澳门| 宿松县| 安塞县| 吉隆县| 娱乐| 镇巴县| 蒙阴县| 沅江市| 弥勒县| 巧家县| 寿光市| 江孜县| 綦江县| 大城县| 宁安市| 咸阳市| 东丰县| 稻城县| 达拉特旗| 平泉县| 瑞金市| 仲巴县| 巴南区| 西畴县| 香港| 三江| 石景山区| 桐柏县| 东方市| 凤翔县| 富蕴县| 新疆| 郎溪县| 安徽省| 漳州市| 缙云县| 洛宁县| 兴化市| 闻喜县| 尚志市| 汉源县|