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

 java string input calculator no jutsu

Go down 
AuthorMessage
Moti Barski
super
super
Moti Barski

Posts : 347
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
View user profile
 
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: