用Java实现简单的四则运算的运算器

用Java通过栈实现简单的四则运算的运算器

// package com.threefiree.algotithm.leetcode.stack.test227;

import java.net.Socket;
import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author zhouyanxiang
 * @Date 2021-01-2021/1/27-16:03
 * @Title 227. 基本计算器 II
 */
public class Solution {
    
    

    public static void main(String[] args) {
    
    
        Solution solution = new Solution();
        String s = "3-2*2 + 10";
        int calculate = solution.calculate(s);
        System.out.println(calculate);
    }

    public int calculate(String s) {
    
    
        Deque<Integer> deque = new ArrayDeque<>();
        char lastOp = '+';
        char[] ch = s.toCharArray();
        int len = ch.length;
        for (int i = 0; i < len; i++) {
    
    
            if (ch[i] == ' ') {
    
    
                continue;
            }
            if (Character.isDigit(ch[i])) {
    
    
                int tempNum = ch[i] - '0';
                while (++i < len && Character.isDigit(ch[i])) {
    
    
                    tempNum = tempNum * 10 + (ch[i] - '0');
                }
                i--;
                if (lastOp == '+') {
    
    
                    deque.push(tempNum);
                } else if (lastOp == '-') {
    
    
                    deque.push(-tempNum);
                } else {
    
    
                    deque.push(op(lastOp,deque.pop(),tempNum));
                }
            } else {
    
    
                lastOp = ch[i];
            }
        }

        int res = 0;
        for (int num : deque) {
    
    
            res += num;
        }
        return res;
    }

    public int op(char c,int a,int b) {
    
    
        if (c == '+') {
    
    
            return a + b;
        } else if (c == '-') {
    
    
            return a - b;
        } else if (c == '*') {
    
    
            return a * b;
        } else  {
    
    
            return a / b;
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_41688840/article/details/113252965