Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Stack;
- public class Hello {
- public static void mymain() {
- int ans = calculate("-2+2*(9+8)");
- System.out.println(ans);
- }
- static int calculate(String mathString) {
- List<String> operations = new ArrayList<>(Arrays.asList("+", "-", "*", "/", "(", ")"));
- int res;
- Stack<String> stack = new Stack<>();
- List<String> arr = new ArrayList<>();
- StringBuilder currentNum = new StringBuilder();
- for (int i = 0; i < mathString.length(); i++) {
- String c = String.valueOf(mathString.charAt(i));
- if (operations.contains(c)) {
- if (currentNum.length() != 0) {
- arr.add(currentNum.toString());
- currentNum.setLength(0);
- }
- if (c.equals("-") && (i == 0 || String.valueOf(mathString.charAt(i - 1)).equals("("))) {
- arr.add(c);
- }
- else if (c.equals(")")) {
- while (!stack.peek().equals("(")) {
- arr.add(String.valueOf(stack.pop()));
- }
- stack.pop();
- }
- else {
- if (!stack.isEmpty() && (c.equals("+") || c.equals("-")) && (!stack.peek().equals(")") && !stack.peek().equals("("))) {
- String peekStack = stack.pop();
- arr.add(String.valueOf(peekStack));
- }
- stack.push(c);
- }
- }
- else {
- currentNum.append(c);
- }
- }
- if (currentNum.length() != 0) {
- arr.add(currentNum.toString());
- currentNum.setLength(0);
- }
- while (!stack.isEmpty())
- arr.add(String.valueOf(stack.pop()));
- System.out.println(Arrays.toString(arr.toArray()));
- int a, b, c;
- boolean negative = false;
- for (String s : arr) {
- switch (s) {
- case "+":
- a = Integer.parseInt(stack.pop());
- b = Integer.parseInt(stack.pop());
- c = b + a;
- stack.push(String.valueOf(c));
- break;
- case "-":
- if (stack.isEmpty() || stack.size() % 2 != 0) {
- negative = true;
- }
- else {
- a = Integer.parseInt(stack.pop());
- b = Integer.parseInt(stack.pop());
- c = b - a;
- stack.push(String.valueOf(c));
- }
- break;
- case "/":
- a = Integer.parseInt(stack.pop());
- b = Integer.parseInt(stack.pop());
- c = b / a;
- stack.push(String.valueOf(c));
- break;
- case "*":
- a = Integer.parseInt(stack.pop());
- b = Integer.parseInt(stack.pop());
- c = b * a;
- stack.push(String.valueOf(c));
- break;
- default:
- if (negative) {
- s = String.valueOf(Integer.parseInt(s) * -1);
- negative = false;
- }
- stack.push(s);
- }
- }
- return Integer.parseInt(stack.pop());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement