JAVA实现逆波兰转换,java实现逆波兰式
package com.yj.rpn;
import java.util.*;
import java.util.logging.StreamHandler;
/**
* Created by yanjie on 17/10/31.
* 逆波兰式
* 使用到的符号
* #
* +-
* *\\/
* () 括号比较特殊
*/
public class RPN {
private Map sy = new HashMap();
public RPN(){
sy.put("#",0);
sy.put("(",0);
sy.put(")",0);
sy.put("+",1);
sy.put("-",1);
sy.put("*",2);
sy.put("/",2);
}
private Stack s1 = new Stack();
private Stack s2 = new Stack();
public String getRpn(String s){
s1.add("#");
Boolean pre = false;
for(int i=0; i
char c = s.charAt(i);
//识别操作数
String t = "";
while(i
t = t + c;
if(++i>=s.length()){
break;
}
c = s.charAt(i);
}
if(!t.equals("")){
s2.add(t);
}
if(i>=s.length()){
break;
}
switch (c){
case '('://取出的字符是“(”,则直接送入S1栈顶
s1.add(c+"");
break;
case ')'://取出的字符是“)”,则将距离S1栈栈顶最近的“(”之间的运算符,逐个出栈,依次送入S2栈,此时抛弃“(”
t = s1.pop();
while(!t.equals("(")){
s2.add(t);
t = s1.pop();
}
break;
default:
String s1c = s1.peek();
//当前运算符优先级大于s1栈顶优先级,运算符存入s1
if(sy.get(c+"")>sy.get(s1c)){
s1.add(c+"");
}else{//将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈
while(sy.get(s1c)>=sy.get(c+"")){
s1c = s1.pop();
s2.add(s1c);
}
s1.add(c+"");
}
}
}
String t = s1.pop();
while(!t.equals("#")){
s2.add(t);
t = s1.pop();
}
String result = "";
while(s2.size()>0){
result = s2.pop() +" "+ result;
}
return result;
}
//main method
public static void main(String[] args) {
RPN rpn = new RPN();
String result = rpn.getRpn("1+2*3");
System.out.println(result);
result = rpn.getRpn("(1+2)*3");
System.out.println(result);
result = rpn.getRpn("(a+cc)*3");
System.out.println(result);
}
}
JAVA实现逆波兰转换,java实现逆波兰式相关推荐
- 【Java】日期字符串转换java.sql.Date对象
日期字符串 → java.sql.Date对象 import java.text.ParseException; import java.text.SimpleDateFormat;public cl ...
- java不同时区时间转换,Java在不同时区转换时间
本文中,我们将展示如何在不同时区之间转换时间,我们分别使用Date.Calendar.Joda Time. 本例从新加坡时区 (GMT+8:00) Asia/Singapore - Singapore ...
- java不同时区时间转换,Java不同时区(timezone)之间时间转换
最近出现一个问题是这样的 我们的系统在国外打印的日志时间由于时差关系和国内不一致 看起来不方便 希望国外的日志和国内保持一致 即 需要对不同时区的时间做转换调整 统一为国内时间. 一.关于时区的一些概 ...
- java整数能强转转字符,Java中数据类型默认转换和强制类型转换
默认转换: a:由低到高一次为:(byte short char )---int ---long ---float --- double b:注意:byte short char ...
- java百度地图逆地址解析_百度地图逆地址解析
什么是Geocoding? Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# .C++.Java等开发语言发送HTTP ...
- java一维数组正序输出,java将一个数组逆序输出-java将一个数组逆序输出的方法-吾爱编程网...
今天吾爱编程为大家分享一下Java的经典实例之一:java将一个数组逆序输出,有需要的小伙伴可以参考: 1.题目要求: 使用Java编程一个程序,将一个数组逆序输出 2.程序代码:public sta ...
- 面渣逆袭:Java并发六十问,图文详解,快来看看你会多少道
基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位. 并行就是同一时刻,两个线程都在执行.这就要求有两个CPU去分别执行两个线程. 并发就是同一时刻,只有一个执行,但是 ...
- 逆序对计数问题(java实现)
一,相关定义 1.什么是逆序数? 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 例如:在序列 { 2, ...
- 面渣逆袭:Java基础五十三问,快来看看有没有你不会的
这节我们回到梦开始的地方--Java基础,其实过了萌新阶段,面试问基础就问的不多,但是保不齐突然问一下.想一下,总不能张口高并发.闭口分布式,结果什么是面向对象,说不清,那多少有点魔幻.所以赶紧来看看 ...
最新文章
- Springsecurity之AccessDecisionManager
- Maven命令行使用:mvn clean install(安装)
- 以新ICT构建全联接的电力物联网,迈入能源智能时代
- Missing artifact com.sun:tools:jar 1.5.0 终极解决方法
- gis中开始编辑之后显示空间参考_空间参考—帮助 | ArcGIS Desktop
- Mysql索引使用情况_介绍mysql索引失效的情况
- Python数据分析实战:使用pyecharts进行数据可视化
- php上搭建dvwa,使用phpstudy在windows上搭建DVWA
- ERROR: libopenjp2 = 2.1.0 not found using pkg-config
- 一个websocket 可以多个页面创建吗_聊聊 WebSocket,还有 HTTP
- Windows系统-删除指定服务!
- 精选的 Go 框架,库和软件的精选清单
- 网络故障排除的4款软件
- 2019-07高德地图行政区域省市区json数据获取(php代码)
- 少年,我看你骨骼精奇,见与你有缘,这套算法赠你
- 电脑是否存在内存泄漏_如何避免内存泄露
- Unity中的万向节死锁
- TCPDF 解决中文乱码的问题
- UNETR 论文精解
- 计算机研究生论文写作 问题记录