Advertisement
UniQuet0p1

Untitled

Oct 13th, 2021
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. import java.util.LinkedList;
  2. //https://www.javatpoint.com/java-string-isempty
  3. //https://home.cs.colorado.edu/~main/docs/edu/colorado/collections/DoubleStack.html
  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.  
  13. private final LinkedList<Double> doubleStack = new LinkedList<>();
  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++) {
  21. doubleS.doubleStack.addLast(doubleStack.get(i));
  22. }
  23. return doubleS;
  24. }
  25.  
  26. public boolean stEmpty() {
  27. return doubleStack.size() <= 0;
  28. }
  29.  
  30. public void push (double a) {
  31. doubleStack.addFirst(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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement