# DoubleStack

Oct 19th, 2021
713
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
2. //https://www.javatpoint.com/java-string-isempty
4. //http://www.mathcs.emory.edu/~cheung/Courses/171/Projects/hw4/hw4.html
5. //https://www.javatpoint.com/understanding-toString()-method
6.
7. public class DoubleStack {
8.
9.
10.    public static void main (String[] argum) {
11.    }
12.
14.
15.    DoubleStack() {
16.    }
17.    @Override
18.    public Object clone() throws CloneNotSupportedException {
19.       DoubleStack doubleS = new DoubleStack();
20.       for (int i = 0; i <doubleStack.size(); i++) {
22.       }
23.       return doubleS;
24.    }
25.
26.    public boolean stEmpty() {
27.       return doubleStack.size() <= 0;
28.    }
29.
30.    public void push (double a) {
32.    }
33.
34.    public double pop() {
35.       if (stEmpty()) {
36.          throw new RuntimeException("No elements");
37.       }
38.       return doubleStack.pop();
39.    }
40.
41.    public void op (String s) throws RuntimeException {
42.       try {
43.          double LE = doubleStack.pop();
44.          double LIFO = doubleStack.pop();
45.
46.          if ("+".equals(s)) {
47.             doubleStack.push(LIFO + LE);
48.          } else if ("-".equals(s)) {
49.             doubleStack.push(LIFO - LE);
50.          } else if ("*".equals(s)) {
51.             doubleStack.push(LIFO * LE);
52.          } else if ("/".equals(s)) {
53.             doubleStack.push(LIFO / LE);
54.          } else {
55.             System.out.printf("'%s' can not be operator, '+', '-', '*' or '/' just can be", s);
56.          }
57.       } catch (RuntimeException e) {
58.          throw new RuntimeException(String.format("Can not do operation %s", s));
59.       }
60.    }
61.
62.    public double tos() {
63.       if (stEmpty()) {
64.          throw new RuntimeException("Empty");
65.       }
66.       return doubleStack.getFirst();
67.    }
68.
69.
70.    @Override
71.    public boolean equals (Object o) { //Возвращаем false, если размеры стека разные
72.       if (((DoubleStack) o).doubleStack.size() != doubleStack.size()) {
73.          return false;
74.       }
75.
76.       for (int i = 0; i < doubleStack.size(); i++) { //Начинаем сравнивать оба DoubleStack один за другим. Вернуть false, если обнаружено несоответствие
77.          if (!((DoubleStack) o).doubleStack.get(i).equals(doubleStack.get(i))) {
78.             return false;
79.          }
80.       }
81.       return true; //Возвращаем истину, если несоответствия не обнаружено
82.    }
83.
84.    @Override
85.    public String toString() {
86.       StringBuilder str = new StringBuilder();
87.       for (int i = doubleStack.size() - 1; i >= 0; i--)
88.          str.append(doubleStack.get(i)).append(" ");
89.       return str.toString();
90.    }
91.
92.    public static double interpret (String pol) { //Удаляем все ненужное форматирование
93.       String empty = pol.replaceAll("\t", "").replaceAll("\n", "").replaceAll("[ ](?=[ ])","").trim();
94.       String[] polArray = empty.split(" ");// Разделить строку на массив, используя пробелы между ними в качестве разделителей
95.       if (empty.isEmpty()) {
96.          throw new RuntimeException(String.format("No Elements in  %s", pol));
97.       }
98.
99.
100.       DoubleStack resultStack = new DoubleStack();
101.       for (String s : polArray) {
102.          if (s.matches("[+*/\\-]")) {
103.             resultStack.op(s);
104.          } else {
105.             resultStack.push(Double.parseDouble(s)); //Используем стек для вычислений
106.          }
107.       }
108.
109.       if (resultStack.doubleStack.size() == 1) {
110.          return resultStack.pop();
111.       } else {
112.          throw new RuntimeException(String.format("Not possible to complate  %s", pol));// Возврат, только если размер стека равен 1,
113.          // Если не 1, значит, вычисления не завершены, числа остались и выдается исключение
114.       }
115.    }
116. }
117.
RAW Paste Data