battle programming a forum for elite programmers with extreme will power to sharpen theire skills
 
HomeSearchRegisterLog in
Share
 

 java string input calculator no jutsu

Go down 
AuthorMessage
Moti Barski
super
super
Moti Barski

Posts : 372
Join date : 2011-08-02

java string input calculator no jutsu Empty
PostSubject: java string input calculator no jutsu   java string input calculator no jutsu EmptyWed Jul 31, 2019 9:24 pm


summon !!!


Code:
import java.util.ArrayList;
import java.util.Stack;

public class StrCalculator {
   public int calculate(String s) {
      // delte white spaces
      s = s.replaceAll(" ", "");

      Stack<String> stack = new Stack<String>();
      char[] arr = s.toCharArray();

      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < arr.length; i++) {
         if (arr[i] == ' ')
            continue;

         if (arr[i] >= '0' && arr[i] <= '9') {
            sb.append(arr[i]);

            if (i == arr.length - 1) {
               stack.push(sb.toString());
            }
         } else {
            if (sb.length() > 0) {
               stack.push(sb.toString());
               sb = new StringBuilder();
            }

            if (arr[i] != ')') {
               stack.push(new String(new char[] { arr[i] }));
            } else {
               // when meet ')', pop and calculate
               ArrayList<String> t = new ArrayList<String>();
               while (!stack.isEmpty()) {
                  String top = stack.pop();
                  if (top.equals("(")) {
                     break;
                  } else {
                     t.add(0, top);
                  }
               }

               int temp = 0;
               if (t.size() == 1) {
                  temp = Integer.valueOf(t.get(0));
               } else {
                  for (int j = t.size() - 1; j > 0; j = j - 2) {
                     if (t.get(j - 1).equals("-")) {
                        temp += 0 - Integer.valueOf(t.get(j));
                     } else {
                        temp += Integer.valueOf(t.get(j));
                     }
                  }
                  temp += Integer.valueOf(t.get(0));
               }
               stack.push(String.valueOf(temp));
            }
         }
      }

      ArrayList<String> t = new ArrayList<String>();
      while (!stack.isEmpty()) {
         String elem = stack.pop();
         t.add(0, elem);
      }

      int temp = 0;
      for (int i = t.size() - 1; i > 0; i = i - 2) {
         if (t.get(i - 1).equals("-")) {
            temp += 0 - Integer.valueOf(t.get(i));
         } else {
            temp += Integer.valueOf(t.get(i));
         }
      }
      temp += Integer.valueOf(t.get(0));

      return temp;
   }
}

usage example :

System.out.println(calculator.calculate("5 * 3"));

finisher

_________________
MB over and out emp it up
Back to top Go down
 
java string input calculator no jutsu
Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
battle programmers alliance :: battle programming alliance :: battle programming-
Jump to: