Advertisement
JStefan

APS_LAB4_Task1

Nov 1st, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.06 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.NoSuchElementException;
  4.  
  5.  
  6. interface Stack<E> {
  7.  
  8.     // Elementi na stekot se objekti od proizvolen tip.
  9.  
  10.     // Metodi za pristap:
  11.  
  12.     public boolean isEmpty();
  13.     // Vrakja true ako i samo ako stekot e prazen.
  14.  
  15.     public E peek();
  16.     // Go vrakja elementot na vrvot od stekot.
  17.  
  18.     // Metodi za transformacija:
  19.  
  20.     public void clear();
  21.     // Go prazni stekot.
  22.  
  23.     public void push(E x);
  24.     // Go dodava x na vrvot na stekot.
  25.  
  26.     public E pop();
  27.     // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  28. }
  29.  
  30. class ArrayStack<E> implements Stack<E> {
  31.  
  32.     // Stekot e pretstaven na sledniot nacin:
  33.     //depth e dlabochinata na stekot, a
  34.     // elems[0...depth-1] se negovite elementi.
  35.     private E[] elems;
  36.     private int depth;
  37.  
  38.     @SuppressWarnings("unchecked")
  39.     public ArrayStack(int maxDepth) {
  40.         // Konstrukcija na nov, prazen stek.
  41.         elems = (E[]) new Object[maxDepth];
  42.         depth = 0;
  43.     }
  44.  
  45.  
  46.     public boolean isEmpty() {
  47.         // Vrakja true ako i samo ako stekot e prazen.
  48.         return (depth == 0);
  49.     }
  50.  
  51.  
  52.     public E peek() {
  53.         // Go vrakja elementot na vrvot od stekot.
  54.         if (depth == 0)
  55.             throw new NoSuchElementException();
  56.         return elems[depth - 1];
  57.     }
  58.  
  59.  
  60.     public void clear() {
  61.         // Go prazni stekot.
  62.         for (int i = 0; i < depth; i++) elems[i] = null;
  63.         depth = 0;
  64.     }
  65.  
  66.  
  67.     public void push(E x) {
  68.         // Go dodava x na vrvot na stekot.
  69.         elems[depth++] = x;
  70.     }
  71.  
  72.  
  73.     public E pop() {
  74.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  75.         if (depth == 0)
  76.             throw new NoSuchElementException();
  77.         E topmost = elems[--depth];
  78.         elems[depth] = null;
  79.         return topmost;
  80.     }
  81. }
  82.  
  83. public class PostFixEvaluation {
  84.     public static void main(String[] args) throws Exception {
  85.  
  86.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  87.  
  88.         String expression = br.readLine();
  89.         char exp[] = expression.toCharArray();
  90.  
  91.  
  92.         br.close();
  93.  
  94.         System.out.println(evaluateExpression(exp));
  95.  
  96.     }
  97.  
  98.     private static int evaluateExpression(char[] s) {
  99.         String expression = String.valueOf(s);
  100.         String[] elements = expression.split("\\s+");
  101.  
  102.         ArrayStack<String> stack = new ArrayStack<>(elements.length);
  103.  
  104.         int result = 0;
  105.  
  106.         for (int i = 0; i < elements.length; i++) {
  107.             if(!isOperator(elements[i])) stack.push(elements[i]);
  108.             else {
  109.                 int number1 = Integer.parseInt(stack.pop());
  110.                 int number2 = Integer.parseInt(stack.pop());
  111.                 int calculatedValue = calculateTerm(number2, number1, elements[i]);
  112.                 stack.push(String.valueOf(calculatedValue));
  113.                 if(i == elements.length-1) result = Integer.parseInt(stack.pop());
  114.             }
  115.         }
  116.         return result;
  117.     }
  118.  
  119.     private static int calculateTerm(int number1, int number2, String operator) {
  120.         if(operator.equals("+")) return number1 + number2;
  121.         else if(operator.equals("-")) return number1 - number2;
  122.         else if(operator.equals("*")) return number1 * number2;
  123.         else  return number1 / number2;
  124.     }
  125.  
  126.     private static boolean isOperator(String op) {
  127.         return op.equals("+") || op.equals("-") || op.equals("*") || op.equals("/");
  128.     }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement