您的位置:首页 > 编程语言 > Java开发

Java实现逆波兰表达式求值

2020-07-16 05:46 155 查看

根据 逆波兰表示法,求表达式的值。

有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

逆波兰表达式说白了就是后缀表达式,所以求后缀表达式的值用栈很好解决,遇到数字就压进栈,不是就出栈计算,将结果再压进栈,最终栈内的就是最终的结果。
不多说,直接上代码
未优化。轻喷(手动狗头)

public int evalRPN(String[] tokens) {
int values=0,result=0;
Stack<Integer> stack = new Stack<>();
for(int i=0;i<tokens.length;i++){
switch(tokens[i]){
//+,-,*,/ 四种运算
case "+":
result = stack.pop() + stack.pop();
stack.push(result);
break;
case "-":
result = -stack.pop() + stack.pop();
stack.push(result);
break;
case "*":
result = stack.pop() * stack.pop();
stack.push(result);
break;
case "/":
int first = stack.pop();
int second = stack.pop();
result = second / first;
stack.push(result);
break;
default:
int sign=0;//标志是否为负数
result=0;
for(int k=0,j=tokens[i].length()-1;k<tokens[i].length()&&j>=0;k++,j--){//如果不是个位数通过此循环求出
if(tokens[i].charAt(k)=='-'){
sign = 1;
continue;
}
result += (tokens[i].charAt(k)-'0') * Math.pow(10,j);
}
if(sign==1) result = -result;
stack.push(result);
}
}
values = stack.peek();
return values;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: