今天看到网站上推荐的常用10种算法,尝试做了一下,对于其中说的逆波尔算法进行了一点小改进,增加了自己的注释
public static double niboerWay(String[] test) {
double value = 0;
String yunsuan = "+-*/";
// 申请一个栈,作为暂时存储的地方,利用栈的特点来进行逆波尔运算
Stack<String> stack = new Stack<String>();
for(String temp: test){
// 不包含运算符号,则入栈,否则做运算
if(!yunsuan.contains(temp)){
stack.push(temp);
}else {
// 分别取出栈顶及栈顶下一个元素,作为运算对象(Ps:45/ ======= 4/5)
// 建议使用double,防止精度的缺失
double one = Double.parseDouble(stack.pop());
double two = Double.parseDouble(stack.pop());
int ys = yunsuan.indexOf(temp);
switch(ys) {
case 0:
stack.push(String.valueOf(one+two));
break;
case 1:
stack.push(String.valueOf(two-one));
break;
case 2:
stack.push(String.valueOf(one*two));
break;
case 3:
stack.push(String.valueOf(two/one));
break;
}
}
}
// 将运算结果从栈中取出
value = Double.parseDouble(stack.pop());
return value;
}