You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写输入以分号结尾的Java后缀表达式求值程序

后缀表达式求值器(支持分号结尾输入)

后缀表达式(逆波兰表达式)最大的优势就是完全不用纠结运算符优先级和括号,计算逻辑特别直观——比如输入4 2 3 * +,结果就是10。针对你需要的处理以分号结尾的后缀表达式的需求,我整理了下面这个Java实现,比如你输入Stack 7 4 2 3 * + ;,程序就能正确输出计算结果。

实现代码

import java.util.Scanner;
import java.util.Stack;

public class Task2 {
    public static void main(String[] args) {
        String p;
        Scanner s = new Scanner(System.in);
        p = s.nextLine();
        while (!(p.equals(";"))) {
            Stack<Integer> st = new Stack<Integer>();
            Scanner sc = new Scanner(p);
            int a, b, c;
            String operator;
            while (sc.hasNext() == true) {
                if (sc.hasNextInt() == true)
                    st.push(sc.nextInt());
                else {
                    operator = sc.next().trim();
                    a = st.pop();
                    b = st.pop();
                    switch (operator) {
                        case "^":
                            c = (int) Math.pow(b, a);
                            st.push(c);
                            break;
                        case "%":
                            c = b % a;
                            st.push(c);
                            break;
                        case "*":
                            c = b * a;
                            st.push(c);
                            break;
                        case "/":
                            c = b / a;
                            st.push(c);
                            break;
                        case "+":
                            c = b + a;
                            st.push(c);
                            break;
                        case "-":
                            c = b - a;
                            st.push(c);
                            break;
                    } // switch
                } // else
            }// while loop
            int result;
            result = st.pop();
            System.out.println(result);
        }
    }
}

核心逻辑说明

  • 程序会持续读取输入行,直到你输入单独的;才会停止运行
  • 每处理一行输入时,我们用一个整数栈来存储操作数:
    • 遇到整数就直接压入栈中
    • 遇到运算符时,弹出栈顶的两个数(注意:先弹出来的是右操作数,后弹的是左操作数,计算的时候要注意顺序,比如减法是左操作数 - 右操作数)
    • 支持的运算符涵盖了幂、取余、乘、除、加、减这六种常用运算
  • 当整行输入处理完成后,栈里剩下的唯一元素就是这个后缀表达式的计算结果,直接输出即可

内容的提问来源于stack exchange,提问作者jeya siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:58:39