Martina312

Математички израз

Nov 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.NoSuchElementException;
  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. private E [] elems; //niza na elementi koi odat od 0 do depth-1
  32. private int depth; //dlabochina na stekot
  33.  
  34. public ArrayStack(int maxDepth){
  35. elems=(E[]) new Object[maxDepth]; //kreirash niza so maxDepth golemina
  36. depth=0;
  37. }
  38.  
  39. public boolean isEmpty() {
  40. return depth==0;
  41. }
  42.  
  43. @Override
  44. public E peek() {
  45. if(depth==0)
  46. throw new NoSuchElementException();
  47. return elems[depth-1]; //posledniot element se naogja na depth-1
  48. }
  49.  
  50. @Override
  51. public void clear() {
  52. for (int i=0;i<depth;i++){
  53. elems[i]=null;
  54. }
  55. depth=0;
  56. }
  57.  
  58. @Override
  59. public void push(E x) {
  60. elems[depth++]=x; //se dodava elementot na pozicija depth bidejki toa e naredno slobodno i se zgolemuva depth
  61. }
  62.  
  63. @Override
  64. public E pop() {
  65. if(depth==0)
  66. throw new NoSuchElementException();
  67. E topmost=elems[--depth]; //depth e naredniot sloboden a --depth e posledniot element
  68. elems[depth]=null;
  69. return topmost;
  70. }
  71. }
  72.  
  73.  
  74. public class ExpressionEvaluator {
  75.  
  76. public static int evaluateExpression(String expression){
  77. ArrayStack<Integer> stack=new ArrayStack<Integer>(100);
  78. String broj="";
  79. int flagM=0;
  80.  
  81. for(int i=0;i<expression.length();i++){
  82. int pushed=0;
  83. char znak=expression.charAt(i);
  84.  
  85. if(Character.isDigit(znak)){
  86. broj+=znak;
  87. if((i+1)==expression.length() || !Character.isDigit(expression.charAt(i+1))){
  88. stack.push(Integer.valueOf(broj).intValue());
  89. broj="";
  90. pushed=1;
  91. }
  92. }
  93.  
  94. if(znak=='*'){
  95. flagM=1;
  96. continue;
  97. }
  98.  
  99. if(flagM==1 && pushed==1){
  100. int num1=stack.pop();
  101. int num2=stack.pop();
  102. int result=num1*num2;
  103. stack.push(result);
  104. flagM=0;
  105. }
  106. }
  107.  
  108. int suma=0;
  109. while (!stack.isEmpty()){
  110. suma+=stack.pop();
  111. }
  112. return suma;
  113.  
  114. }
  115. public static void main(String[] args) throws IOException {
  116. BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
  117. System.out.println(evaluateExpression(input.readLine()));
  118. }
  119.  
  120. }
Add Comment
Please, Sign In to add comment