逆ポーランド式の演算
11854 ワード
package com.hhit.stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class PolandNotation {
public static void main(String[] args) {
String suffixExpression="30 4 + 5 * 6 -";//(30+4)*5-6
List<String> lis=getListString(suffixExpression);
System.out.println(lis);
System.out.println(calculate(lis));
// , ArrayList
}
public static List<String> getListString(String suffixExpression){
String[] split=suffixExpression.split(" ");
List<String> list=new ArrayList<String>();
for (String s:split){
list.add(s);
}
return list;
}
public static int calculate(List<String> ls){
//
Stack<String> stack=new Stack<String>();
// ls
for (String item:ls){
//
if(item.matches("\\d+")){
//
stack.push(item);
}else {
//pop
int num2=Integer.parseInt(stack.pop());
int num1=Integer.parseInt(stack.pop());
int res=0;
if (item.equals("+")){
res=num1+num2;
}else if (item.equals("-")){
res=num1-num2;
}else if (item.equals("*")){
res=num1*num2;
}else if (item.equals("/")){
res=num1/num2;
}else {
throw new RuntimeException(" ");
}
stack.push(""+res);
}
}
return Integer.parseInt(stack.pop());
}
}