Guest User

Untitled

a guest
Jul 12th, 2015
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class RPNSupport implements RPNInterface {
  4.  
  5.     public void getString(String str, ArrayList<Double> stack){
  6.         makeCalculation(str, stack);
  7.     }
  8.  
  9.     private void makeCalculation (String str, ArrayList<Double> stack){
  10.         if (str.equals("+")|str.equals("-")|str.equals("*")|str.equals("/")){
  11.             // Берем последние 2 строки из стека
  12.             Double op1 = stack.get(stack.size()- 1);
  13.             stack.remove(stack.size()- 1);
  14.             // И если стек состоял только из одной строки, то
  15.             // обрабатываем исключение
  16.             try{
  17.                 Double op2 = stack.get(stack.size()- 1);
  18.  
  19.                 stack.remove(stack.size()- 1);
  20.  
  21.                 //Преобразуем оператор из string и вычисляем выражение
  22.                 double sum = 0;
  23.                 //*** Заменил switch на 4 if(ругалась IDE)
  24.                 if (str.equals("+")){
  25.                     sum = op2 + op1;
  26.                 }else if (str.equals("-")){
  27.                     sum = op2 - op1;
  28.                 }else if (str.equals("*")){
  29.                     sum = op2 * op1;
  30.  
  31.                 }else if (str.equals("/")){
  32.                     sum = op2 / op1;
  33.                 }
  34.                 //Результат заносим в стек
  35.                 stack.add(sum);
  36.  
  37.                 printStack(stack);
  38.             } catch (ArrayIndexOutOfBoundsException e){
  39.                 System.err.println("Для выполнения операции недостаточно"
  40.                         + " операндов в стеке!");
  41.                 stack.add(op1);
  42.             }
  43.  
  44.         }
  45.         else{
  46.             //Иначе добавляем число в стек
  47.             stack.add(Double.parseDouble(str));
  48.             printStack(stack);
  49.         }
  50.     }
  51.  
  52.     //Выделение метода
  53.     private void printStack(ArrayList<Double> stack) {
  54.         System.out.print("В стеке находятся числа ");
  55.         for (int i = stack.size(); i > 0; i--){
  56.             System.out.print(stack.get(stack.size() - i) + " ");
  57.         }
  58.         System.out.println();
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment