计算四则运算表达式(Java语言实现)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算四则运算表达式(Java语言实现)相关的知识,希望对你有一定的参考价值。
计算四则运算表达式主要是分两步运算
第一步是把 中缀表达式 转换成 后缀表达式。参考大一下期学的 《数据结构与算法分析--C语言描述》3.3.3 教材,完成下列代码:
static String mid_to_suf(String str){ Stack<Character> s = new Stack<Character>(); String suf = new String(); HashMap<Character, Integer> map = new HashMap<Character, Integer>(); map.put(‘+‘, 1); //设置运算符的优先级 map.put(‘-‘, 1); map.put(‘*‘, 2); map.put(‘/‘, 2); map.put(‘(‘, 3); for (int i = 0; i < str.length(); i++){ char c = str.charAt(i); if (c == ‘=‘) break; if (c == ‘ ‘ || (c >= ‘0‘ && c <= ‘9‘)) suf += c; else if (c == ‘(‘) s.push(c); else if (c == ‘)‘){ while (!s.isEmpty()){ char op = s.pop(); if (op == ‘(‘) break; suf += op; } } else { if (s.isEmpty()) s.push(c); else { while (!s.isEmpty()){ char op = s.peek(); if (op == ‘(‘) break; if (map.get(op) < map.get(c) ) break; else { s.pop(); suf += op; } } s.push(c); } } } while (!s.isEmpty()) suf += s.pop(); return suf; }
第二步是计算后缀表达式的方法, 曾在湘大oj上做过这样的题目 http://202.197.224.59/exam/index.php/problem/read/id/1036
private static int cal(String s) { Stack<Integer> stack = new Stack<Integer>(); for (int i = 0; i < s.length(); i++){ char c = s.charAt(i); boolean flag = false; int tmp = 0; if (c == ‘ ‘) continue; while (is_num(c)){ tmp *= 10; tmp += (c - ‘0‘); i++; c = s.charAt(i); flag = true; } if (flag){ i--; stack.push(tmp); tmp = 0; } else { int x1 = stack.pop(); int x2 = stack.pop(); int ans = 0; if (c == ‘*‘) ans = x1 * x2; else if (c == ‘-‘) ans = x2 - x1; else if (c == ‘+‘) ans = x1 + x2; else if (c == ‘/‘) ans = x2/x1; else if (c == ‘%‘) ans = x2 % x1; stack.push(ans); } } return stack.pop(); } private static boolean is_num(char c) { if (c >= ‘0‘ && c <= ‘9‘) return true; return false; }
因此稍微复杂一点的题目就可以做出来了 不过,中间还有些许 分数什么的,还有文件操作之类的要求,时间紧迫,我会慢慢一步一步完成之后的要求的。
之后是测试样例。。。
以上是关于计算四则运算表达式(Java语言实现)的主要内容,如果未能解决你的问题,请参考以下文章
C语言课程设计 题目为设计一个多功能计算软件实现功能 求完美的代码
java中怎么将字符串(带运算符号加减乘除)转换成代数算式运算
C语言计算器 功能要求: 可以输入0-9数字、小数点、正负数 可以进行加减乘除运算及简单的数学函数运算?