public class MathOp_Stack { public static void main(String[] args) { myStackString Operator = new myStackString(); myStackString Operator2 = new myStackString(); myStackString Numbers = new myStackString(); myStackString Numbers2 = new myStackString(); int countNum = 0, countOperator = 0; int countExp = 0, countMult = 0, countDiv = 0; //count the number of exponents, multiplication and division. String tmp; // String[] expression = {"2","^","3","+","3","*","3","-","15", "/", "5"}; String[] expression = {"2","*","3","*","5","^","2","/","10","*","2"}; // String[] expression = {"2","^","2","*","15","/","5","*","6","+","7"}; int numElement = expression.length; int i = 0; while((numElement - i)> 0){ tmp = expression[i]; i++; if((tmp.compareTo("+") != 0) && (tmp.compareTo("-") != 0) && (tmp.compareTo("*") != 0) && (tmp.compareTo("/") != 0) && (tmp.compareTo("^") != 0)){ Numbers.push(tmp); } else if(tmp.compareTo("^") == 0){ countExp++; Operator.push(tmp); } else if(tmp.compareTo("/") == 0){ countDiv++; Operator.push(tmp); } else if(tmp.compareTo("*") == 0){ countMult++; Operator.push(tmp); } else{ Operator.push(tmp); } //end of IF() } int eval = 0, eval2 = 0, result = 0; String Optmp; while(! Numbers.isEmpty()){ eval2 = Integer.parseInt(Numbers.pop()); Numbers2.push(String.valueOf(eval2)); if(Operator.size()==0 && Numbers.size()==1){ Numbers2.push(Numbers.pop()); break; } else if((Optmp = Operator.pop()).compareTo("^") != 0) Operator2.push(Optmp); else if(countExp > 0 && Optmp.compareTo("^") == 0){ eval = Integer.parseInt(Numbers.pop()); result = (int) Math.pow(eval,eval2); countExp--; Numbers2.pop(); Numbers.push(String.valueOf(result)); } }//end of WHILE() /* while(!Numbers2.isEmpty()) System.out.println(Numbers2.pop()); while(!Operator2.isEmpty()) System.out.println(Operator2.pop()); */ while(! Numbers2.isEmpty()) Numbers.push(Numbers2.pop()); while(! Operator2.isEmpty()) Operator.push(Operator2.pop()); while(! Numbers.isEmpty()){ eval2 = Integer.parseInt(Numbers.pop()); Numbers2.push(String.valueOf(eval2));//push tghe first value down to the Numbers2 stack. if(Operator.size()==0 && Numbers.size()==1){ Numbers2.push(Numbers.pop()); break; } else if((Optmp = Operator.pop()).compareTo("*") != 0) Operator2.push(Optmp); else if(countMult > 0 && Optmp.compareTo("*") == 0){ eval = Integer.parseInt(Numbers.pop()); result = eval*eval2; countMult--; Numbers2.pop(); //pop out the extra value onto stack Numbers. Numbers.push(String.valueOf(result)); //now store the "9" onto stack Numbers. } }//end of WHILE() while(! Numbers2.isEmpty()) Numbers.push(Numbers2.pop()); while(! Operator2.isEmpty()) Operator.push(Operator2.pop()); while(! Numbers.isEmpty()){ eval2 = Integer.parseInt(Numbers.pop()); Numbers2.push(String.valueOf(eval2)); if(Operator.size()==0 && Numbers.size()==1){ Numbers2.push(Numbers.pop()); break; } else if((Optmp = Operator.pop()).compareTo("/") != 0 && ! Operator.isEmpty()) Operator2.push(Optmp); else if(countDiv > 0 && Optmp.compareTo("/") == 0){ eval = Integer.parseInt(Numbers.pop()); result = eval/eval2; countDiv--; Numbers2.pop(); //pop out the value of eval2 (extra value that we DO NOT need to store) onto stack Numbers. Numbers.push(String.valueOf(result)); //now store the "9" onto stack Numbers. } }//end of WHILE() // System.out.println(Numbers2.size()); // while(!Numbers2.isEmpty()) // System.out.println(Numbers2.pop()); // while(!Operator2.isEmpty()) // System.out.println(Operator2.pop()); while(! Numbers2.isEmpty()) Numbers.push(Numbers2.pop()); while(! Operator2.isEmpty()) Operator.push(Operator2.pop()); while(! Numbers.isEmpty() ){ eval2 = Integer.parseInt(Numbers.pop()); Numbers2.push(String.valueOf(eval2)); if(Operator.isEmpty() && Numbers.size() == 1) Numbers2.push(Numbers.pop()); else if((Optmp = Operator.pop()).compareTo("+") != 0 && ! Operator.isEmpty()) Operator2.push(Optmp); else if(Optmp.compareTo("+") == 0 && ! Numbers.isEmpty()){ eval = Integer.parseInt(Numbers.pop()); result = eval + eval2; Numbers2.pop(); //pop out the value of eval2 (extra value that we DO NOT need to store) onto stack Numbers. Numbers.push(String.valueOf(result)); //now store the "9" onto stack Numbers. } }//end of WHILE() while(! Numbers2.isEmpty()) Numbers.push(Numbers2.pop()); while(! Operator2.isEmpty()) Operator.push(Operator2.pop()); while(! Numbers.isEmpty() ){ eval2 = Integer.parseInt(Numbers.pop()); Numbers2.push(String.valueOf(eval2)); if(Operator.isEmpty() && Numbers.size() == 1) Numbers2.push(Numbers.pop()); else if((Optmp = Operator.pop()).compareTo("-") != 0 && ! Operator.isEmpty()) Operator2.push(Optmp); else if(Optmp.compareTo("-") == 0 && ! Numbers.isEmpty()){ eval = Integer.parseInt(Numbers.pop()); result = eval - eval2; Numbers2.pop(); //pop out the value of eval2 (extra value that we DO NOT need to store) onto stack Numbers. Numbers.push(String.valueOf(result)); //now store the "9" onto stack Numbers. } }//end of WHILE() while(! Numbers2.isEmpty()) System.out.println(Numbers2.pop()); while(! Operator2.isEmpty()) System.out.println(Operator2.pop()); }//end of main() }//end of class{}