import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class SuffixExpression {
public static void main(String[] args){
String suffixExpression="4 5 * 8 - 60 + 8 2 / +";
List<String> list=getSuffixListString(suffixExpression);
int suffixResult=calculate(list);
System.out.println(suffixResult);
}
//将后缀表达式存入list集合中,这样便于遍历表达式所有字符
public static List<String> getSuffixListString(String s){
//以空格的方式分割每个要存入集合中的数或运算符,这样便于多位数的运算,如果以每个字符的方式放入集合中,如果出
//现多位数还需要判断是否是多位数在存入集合
String[] suffix=s.split(" ");
List<String> list=new ArrayList<>();
for(int i=0;i<suffix.length;i++){
list.add(suffix[i]);
}
return list;
}
//将存入list集合中的表达式遍历输出,判断是否是数字或者运算符
public static int calculate(List<String> list){
Stack<String> stack=new Stack<>();
for(String item:list){
if(item.matches("\\d+")){//用正则表达式的方式来判断item是否是数字,是数字则压栈
stack.push(item);
}else {
//不是数字则弹栈,并完成相应的运算,把结果在压入栈中
int num1=Integer.parseInt(stack.pop());
int num2=Integer.parseInt(stack.pop());
int result=0;
if(item.equals("+")){
result=num1+num2;
}else if(item.equals("-")){
result=num2-num1;
}else if(item.equals("*")){
result=num1*num2;
}else if(item.equals("/")){
result=num2/num1;
}else{
throw new RuntimeException("运算符有误");
}
stack.push(""+result);//将每一次运算的结果在压入栈,用字符串拼接方式将int类型转为string类型
}
}
//留在栈中的最后一个元素就是后缀表达式运算的最终结果
return Integer.parseInt(stack.pop());
}
}
整数型后缀表达式求值
最新推荐文章于 2024-04-24 13:20:33 发布