如何编写输入以分号结尾的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
相关产品推荐
相关产品推荐

