Advertisement
Sergei_Langin

Sergei Smart Calculator Stage 7/8 PostFixCalculator

Apr 9th, 2020
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.74 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.util.ArrayDeque;
  3. import java.util.ArrayList;
  4. import java.util.Deque;
  5. import java.util.List;
  6.  
  7.  
  8. public class PostFixCalculator {
  9.     private List<String> expression = new ArrayList<String>();
  10.     private Deque<Double> stack = new ArrayDeque<Double>();
  11.  
  12.     public PostFixCalculator(List<String> postfix) {expression = postfix;}
  13.  
  14.  
  15.     public BigDecimal result()
  16.     {
  17.         for(int i = 0; i != expression.size(); ++i)
  18.         {
  19.             // Determine if current element is digit or not
  20.             if(Character.isDigit(expression.get(i).charAt(0)))
  21.             {
  22.                 stack.addLast(Double.parseDouble(expression.get(i)));
  23.             }
  24.             else
  25.             {
  26.                 double tempResult = 0;
  27.                 double temp;
  28.  
  29.                 switch(expression.get(i))
  30.                 {
  31.                     case "+": temp = stack.removeLast();
  32.                         tempResult = stack.removeLast() + temp;
  33.                         break;
  34.  
  35.                     case "-": temp = stack.removeLast();
  36.                         tempResult = stack.removeLast() - temp;
  37.                         break;
  38.  
  39.                     case "*": temp = stack.removeLast();
  40.                         tempResult = stack.removeLast() * temp;
  41.                         break;
  42.  
  43.                     case "/": temp = stack.removeLast();
  44.                         tempResult = stack.removeLast() / temp;
  45.                         break;
  46.                 }
  47.                 stack.addLast(tempResult);
  48.             }
  49.         }
  50.         //return new BigDecimal(stack.removeLast()).setScale(3, BigDecimal.ROUND_HALF_UP);
  51.         return new BigDecimal(stack.removeLast()).setScale(0, BigDecimal.ROUND_HALF_UP);
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement