(回收站)后缀表达式求值
发布日期:2021-06-30 16:57:19
浏览次数:2
分类:技术文章
本文共 3008 字,大约阅读时间需要 10 分钟。
代码(版本二)
package cn.edut.test_stack;import java.util.Stack;import org.junit.Test;public class Demo02_postfix { @Test public void test01() { System.out.println("Test1:后缀求值"); String s = "6 5 2 3 + 8 * + 3 + * 2 /"; //144 System.out.println(postfix_2(s)); } public static int postfix_2(String input){ String[] tempString = input.split("\\s+"); // 空格分开字符串 Stackstack_Integer = new Stack<>(); //存数字 for(String s : tempString) { int temp = 0 ; switch(s) { case "+" : int b1 = stack_Integer.pop() ; int a1 = stack_Integer.pop() ; temp = a1+b1 ; break; case "-" : int b2 = stack_Integer.pop() ; int a2 = stack_Integer.pop() ; temp = a2-b2 ; break; case "*" : int b3 = stack_Integer.pop() ; int a3 = stack_Integer.pop() ; temp = a3*b3 ; break; case "/" : int b4 = stack_Integer.pop() ; int a4 = stack_Integer.pop() ; temp = a4/b4 ; break; default: temp = Integer.parseInt(s); } stack_Integer.push(temp) ; } if(stack_Integer.size()==1) { //算出一个值 return stack_Integer.pop() ; }else { //还有几个值没参与运算 throw new IllegalAccessError(); } } }
代码(版本三)
package cn.edut.clac;import java.util.ArrayList;import java.util.List;import java.util.Stack;import org.junit.Test;public class Calculator_Demo { /** * 分析表达式,返回计算值 * 外部直接调用 * @param s * @return */ //public static int calcExpression(String s) {return } /** * 测试1: * 1字符串录入, * 2后缀求值 */ @Test public void Test01() { String suffix_expression = "1 2 3 * + 4 5 + 6 * + 7 - 2 /"; //27 //测试:字符串 =》 后缀List System.out.println(parseExpression(suffix_expression).toString()); //测试:后缀List =》求值 System.out.println(doCalc(parseExpression(suffix_expression)));; } /** * 测试2: * 1 中缀 转后缀 * 2 中缀 转后缀 取值 */ @Test public void Test02() { } /** * 分割字符 * 1 接收一个:由多个空格隔开的字符 * 2 分割这些字符 * 3 返回字符ArrayList * @param str * @return */ private ListparseExpression(String str){ //空格分开字符 String[] strTemp = str.split("\\s+"); //字符存入List List outList = new ArrayList<>(); for(String s : strTemp) { outList.add(s) ; } return outList; } /** * 后缀求值: * 1 接收一个List * 2 遍历、分析是否为数字 * 2.1 数字 - 存入栈 * 2.2 不是数字 - 判断符号,栈中取顶、进行运算 * 3 返回值 */ private int doCalc(List str) { //操作的栈 Stack stackInteger = new Stack<>(); for(String s : str) { //是数字 if(s.matches("\\d")) { //数字,字符串转Integer stackInteger.push(Integer.parseInt(s)); }//不是数字 else { //栈中取值 int num2 = stackInteger.pop(); int num1 = stackInteger.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 stackInteger.push(result) ; } } //返回stack的值 return stackInteger.pop(); }}
转载地址:https://lawsssscat.blog.csdn.net/article/details/102981388 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年05月04日 11时29分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
iOS:友盟SDK第三方登录 分享及友盟统计的使用
2019-04-30
关于CoreData的多线程安全问题
2019-04-30
CoreData的使用教程
2019-04-30
ShareSDK的使用---实现三方登陆及分享
2019-04-30
iOS Block的使用
2019-04-30
在iOS开发中使用静态库(Static Library)
2019-04-30
iOS开发实现打电话、发邮件等外部应用的关联
2019-04-30
NSLayoutConstraint---AutoLayout的三种设置方式之—
2019-04-30
iOS开发正则表达式的使用
2019-04-30
正则表达式
2019-04-30
iOS开发 关于tableView加载图片时出现卡顿时的解决办法
2019-04-30
动态调整UITableViewCell的高度
2019-04-30
sharesdk 实现三方登陆、分享及关注的功能
2019-04-30
UIAlertController的使用
2019-04-30
iOS 9下的shareSDK集成的常见问题及解决方案
2019-04-30
提示框的综合使用--UIAlertViewController
2019-04-30
最全的UIAlertController的使用
2019-04-30
CBPeripheralManager学习笔记
2019-04-30
CLLocationManager定位服务
2019-04-30
iOS 开发如何获取当前的应用版本号
2019-04-30