Java实现中缀表达式变后缀表达式
一.什么是中、后缀表达式
中缀就是咱平时常用的表达式,比如a+b ,c+d,两个数相关的运算符在数中间;同理后缀就是运算符在两数之后,等价ab+,cd+
二.为什么用java
因为c和c++被我忘光了,敲了一下发现啥也不会,气急败坏地用java。
参考文章:相同原理的c++实现中缀转后缀
三.代码
/**
* 中缀表达式转换成后缀表达式
* @param midExp 中缀表达式
* @return posExp 后缀表达式
*/
public String calculateExpression(String midExp) {
String posExp = new String();
List<Character> symbols = new ArrayList<>();
List<Character> digitals = new ArrayList<>();
char[] midExpChar = midExp.toCharArray(); //将中缀表达式转化成一个个字符
for(int i=0;i<midExpChar.length;i++){
char aChar = midExpChar[i];
if(aChar>='a' && aChar <='z'){ //数字的处理
digitals.add(aChar);
}else if(aChar=='+' || aChar=='-'){ //+-处理
if(symbols == null || symbols.size() == 0){ //操作符栈为空,不加会报数组越界
symbols.add(aChar);
}else{
while(symbols.get(symbols.size()-1)=='*' || symbols.get(symbols.size()-1)=='/'){
digitals.add(symbols.get(symbols.size()-1));
symbols.remove(symbols.size()-1);
}
symbols.add(aChar);
}
}else if(aChar == '*' || aChar=='/' || aChar=='('){ //*/处理
symbols.add(aChar);
}else if(aChar == ')'){
while(symbols.get(symbols.size()-1)!='('){
digitals.add(symbols.get(symbols.size()-1));
symbols.remove(symbols.size()-1);
}
symbols.remove(symbols.size()-1);
}
}
while(symbols.size()!=0){ //处理操作符栈剩余
digitals.add(symbols.get(symbols.size()-1));
symbols.remove(symbols.size()-1);
}
posExp = digitals.toString().replace(",",""); //去掉string中的逗号
return posExp;
}
随笔记
又过一年,放下了很多曾经觉得无比重要的东西,得到的却是不知是好是坏的自身的改变。一个人坐在自己半年前选择的角落(另我后悔不已,好无聊),每天大部分的时间和精力用在自己的身上,一个人久了思维模式也慢慢变了,思考事情的时候都会不禁思考这事本质上对我有什么好处,不再在意很多东西。日渐接受自己的自私与无耻,日渐能够容纳不同于己的事物,能够接受自己被否定被质疑被鄙视,日渐追求简单却也对不得不做的麻烦事更有耐心,日渐渴望老婆孩子热炕头,日渐敬佩毛爷爷和张居正。。。
其实很多的对立本质上是同一种东西,其实多数的思考都是矫情与庸人自扰,其实温柔的人才是最强大的(从外到内的强大,人都有柔软的地方,只是强大的人根本不怕你戳),其实没什么温水煮青蛙没什么堕落和上进,该干嘛干嘛,想那么多干啥。
我也好想要规律,温暖舒适,无忧无虑的生活。此处羡慕皮皮皓1w点。可是偏偏上天让我看到了那些阳光外的东西,冥冥中给我以引导并让我产生那些思考,可能这就是让我生而为人所要做的事吧。现在的环境已经不能让我得到更多的东西了,我需要一个更高的平台,去寻找那些拥有相同思考的人,去实现我们共同的理想。
每一个人都应该有尊严地活着,或者有尊严地死去。
满纸荒唐言,不知道自己在写些什么,管他呢,反正不扣钱。