java实现逆波兰计算器
java实现逆波兰计算器
代码实现
public class PolandDemo {
public static void main(String[] args) {
// 定义一个逆波兰表达式
// (3+4)*5-6 => 3 4 + 5 * 6 -
String suffixExpression = "3 4 + 5 * 6 -";
// 1. 先将表达式放入ArrayList
// 2. 讲ArrayList传递一个方法,遍历ArrayList配合栈完成计算
List<String> list = getList(suffixExpression);
int result = calculate(list);
System.out.println(suffixExpression + "表达式的值为 ==> " + result);
}
public static int calculate(List<String> list) {
// 创建一个栈
Stack<String> stack = new Stack<>();
// 遍历
for (String s : list) {
// 使用正则表达式取出数
// 匹配的是多位数
if (s.matches("\\d+")) {
// 入栈
stack.push(s);
} else {
// 如果是运算符
// 预算
int num2 = Integer.parseInt(stack.pop());
int num1 = Integer.parseInt(stack.pop());
int result = 0;
switch (s) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
default:
throw new RuntimeException("表达式运算符错误");
}
stack.push(result + "");
}
}
// 最后留在stack中的就是结果
return Integer.parseInt(stack.pop());
}
public static List<String> getList(String Expression) {
// 按照空格来分割
String[] split = Expression.split(" ");
List<String> list = new ArrayList<>();
for (String s : split) {
list.add(s);
}
return list;
}
}