博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表达式求值
阅读量:6236 次
发布时间:2019-06-22

本文共 3321 字,大约阅读时间需要 11 分钟。

这段代码用到的是栈的方法,先将中缀表达式改为后缀表达式,再对后缀表达式求值。

不多说,看代码:

1 import java.util.*; 2  3 public class Main { 4     static Scanner sc = new Scanner(System.in); 5      6     public static int lastvalue(String str){    //后缀表达式求值 7         Stack
stack = new Stack
(); 8 String[] data = str.split(" "); 9 10 for(int i = 0;i < data.length;i++){11 if(data[i].charAt(0) >= '0' && data[i].charAt(0) <= '9'){12 //将data[i]转换为int数据13 int m = Integer.parseInt(data[i]);14 stack.push(m);15 }else{16 int a = stack.pop();17 int b = stack.pop();18 //构造b ? a计算结果,,将结果入栈19 switch(data[i].charAt(0)){20 case '+':stack.push(b+a);break;21 case '-':stack.push(b-a);break;22 case '*':stack.push(b*a);break;23 case '/':stack.push(b/a);break;24 case '%':stack.push(b%a);break;25 }26 }27 // System.out.println("---list:"+stack);//测试输出栈内的情况28 }29 return stack.peek(); //程序运行结束后,栈内只剩一个数据,即答案30 }31 public static String turnvalue(String s){ //中缀变换后缀32 Stack
stack = new Stack
();33 StringBuffer sb = new StringBuffer();34 int i = 0;35 while(i < s.length()){36 char c = s.charAt(i);37 switch(c){38 case '+':case '-': //存加减号39 while(!stack.isEmpty() && !stack.peek().equals("("))40 sb.append(stack.pop()+" ");41 stack.push(c + "");i++;42 break;43 case '*':case '/': //存乘除号44 while(!stack.isEmpty() && (stack.peek().equals("*") || stack.peek().equals("/")))45 sb.append(stack.pop()+" ");46 stack.push(c + "");i++;47 break;48 case '(':49 stack.push(c + "");i++;50 break;51 case ')':52 while(stack.peek() != null && !stack.peek().equals("("))53 sb.append(stack.pop() + " ");54 stack.pop();55 i++;break;56 default:57 if(c == ';'){ //可以存放一些结束符号58 i++;59 break;60 }61 while(i < s.length() && c >='0' && c <= '9'){ //保存数字62 sb.append(c);i++;63 if(i < s.length())64 c = s.charAt(i);65 }66 sb.append(" ");67 }68 }69 while(!stack.isEmpty())70 sb.append(stack.pop()+" ");71 // System.out.println(sb); //检查结果72 73 return sb.toString();74 }75 76 public static void main(String[] args) {77 while(sc.hasNext()){78 String s = sc.next();79 System.out.println(lastvalue(turnvalue(s)));80 }81 System.gc();sc.close();82 }83 }

 

转载于:https://www.cnblogs.com/AardWolf/p/10018680.html

你可能感兴趣的文章
开黑吗?VRstudio推出八人系统的VR线下竞技场
查看>>
备份和导入Outlook 2016 电子邮件签名
查看>>
自建企业网盘异军突起,“私人定制”优势面面观
查看>>
HttpUrlConnection发送url请求(后台springmvc)
查看>>
Win8.1 远程桌面 凭据无法工作
查看>>
如何HACK无线家用警报器?
查看>>
云栖科技评论第24期:美国军方拟与IBM合作建专有云
查看>>
Hadoop2.7实战v1.0之JVM参数调优
查看>>
100多个经典常用的jQuery插件大全实例演示和下载
查看>>
linux中top命令详解
查看>>
cgi fastcgi php-cgi php-fpm
查看>>
memcache与memcached的区别与安装
查看>>
第三天 入口文件index.php 02
查看>>
tomcat 日志log4j,slf4j,logback冲突
查看>>
xml学习笔记(第二篇DTD)
查看>>
数据类型、字符串、list操作、集合set
查看>>
EIGRP 查看邻居命令详解
查看>>
Windows Vista下的EFS加密
查看>>
电子行业砥砺奋进 企业风向标汇聚品牌盛会
查看>>
安装cacti
查看>>