逆波兰计算器怎么编程

时间:2025-03-04 11:57:38 明星趣事

逆波兰计算器的编程实现主要涉及以下几个步骤:

输入处理

将输入的字符串(表达式)按每个数值和操作符单独存储在字符串数组中。例如,输入字符串可以是“-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 list = new ArrayList<>();

for (char c : suffixExpression.toCharArray()) {

list.add(String.valueOf(c));

}

// 计算后缀表达式的结果

int result = calc(list);

// 输出结果

System.out.println("Result: " + result);

}

public static int calc(List list) {

Stack stack = new 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 list = new ArrayList<>();`:创建一个列表来存储后缀表达式的每个字符。

后缀表达式求值

`for (String s : list)`:遍历后缀表达式的每个字符。

`if (isNumeric(s))`:如果字符是数字,则将其转换为整数并压入栈中。

`else`:如果字符是操作符,则从栈中弹出两个数进行计算,并将结果压入栈中。

辅助方法

`isNumeric(String strNum)`:判断一个字符串是否为数字。

通过上述步骤和代码示例,你可以实现一个简单的逆波兰计算器。这个计算器支持基本的加、减、乘、除运算,并且可以处理多位数和负数。