逆波兰计算器的编程实现主要涉及以下几个步骤:
输入处理
将输入的字符串(表达式)按每个数值和操作符单独存储在字符串数组中。例如,输入字符串可以是“-2.3333”、“1.2138”等。
中缀表达式转后缀表达式
使用栈和操作符的优先级比较,将中缀表达式转换为后缀表达式。这个过程在数据结构和编译原理课程中有详细介绍。
后缀表达式求值
使用栈来计算后缀表达式的结果。遍历后缀表达式,遇到数字时存入栈中,遇到操作符则从栈中弹出两个数进行计算,并将结果压入栈中。
```java
package com.atxihua;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class PolandNotation {
public static void main(String[] args) {
// 输入的逆波兰表达式
String suffixExpression = "3 4 + 5 * 6 -";
// 将后缀表达式转换为列表
List for (char c : suffixExpression.toCharArray()) { list.add(String.valueOf(c)); } // 计算后缀表达式的结果 int result = calc(list); // 输出结果 System.out.println("Result: " + result); } public static int calc(List Stack for (String s : list) { if (isNumeric(s)) { stack.push(Integer.parseInt(s)); } else { int b = stack.pop(); int a = stack.pop(); switch (s) { case "+": stack.push(a + b); break; case "-": stack.push(a - b); break; case "*": stack.push(a * b); break; case "/": stack.push(a / b); break; } } } return stack.pop(); } public static boolean isNumeric(String strNum) { try { Integer.parseInt(strNum); return true; } catch (NumberFormatException e) { return false; } } } ``` 代码说明: `String suffixExpression = "3 4 + 5 * 6 -";`:定义输入的逆波兰表达式。 `List `for (String s : list)`:遍历后缀表达式的每个字符。 `if (isNumeric(s))`:如果字符是数字,则将其转换为整数并压入栈中。 `else`:如果字符是操作符,则从栈中弹出两个数进行计算,并将结果压入栈中。 `isNumeric(String strNum)`:判断一个字符串是否为数字。 通过上述步骤和代码示例,你可以实现一个简单的逆波兰计算器。这个计算器支持基本的加、减、乘、除运算,并且可以处理多位数和负数。输入处理
后缀表达式求值
辅助方法