作业帮 > 综合 > 作业

输入运算公式 得到结果 java

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/07 10:31:24
输入运算公式 得到结果 java
输入一个字符串,包含数字和加(+)、减(-)、乘(*)、除(/)等四则运算符号,要求输出其计算结果.
如12*2+3-4,输出23.
我是jdk1.4版本的,请尽量把代码注释一下,好么!
这个公式不是固定的,是从控制台获取的,可能更复杂,比如12+3*4-12
输入运算公式 得到结果 java
通过栈实现,先用栈将中缀表达式转化为后缀表达式,然后再用栈计算后缀表达式的值的
package com.saturday;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyParse {
static Map optrOrder;
static {
optrOrder=new HashMap();
optrOrder.put("(",0);
optrOrder.put("*",1);
optrOrder.put("/",1);
optrOrder.put("%",1);
optrOrder.put("+",2);
optrOrder.put("-",2);
optrOrder.put("^",3);
optrOrder.put("#",3);
}
public static void main(String[] args){
List tokens;
try{
//词法分析
tokens=lex("+2* (-2+3*4)+-5");
//中缀转后缀
tokens=toRpn(tokens);
//计算结果
System.out.println(calcRpn(tokens));
}catch(Exception ex){
ex.printStackTrace();
}
}
/**
* 将输入串转换为操作符串
* @param sExpres
* @return
*/
public static List lex(String sExpres){
List tokens=new ArrayList();
//将表达式分割成符号序列
String sRegExp="(((?