首页 > 试题广场 >

计算器

[编程题]计算器
  • 热度指数:216 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。
示例 :
输入: "3+2*2" 输出: 7
输入:"3+5/2" 输出: 5
示例1

输入

" 3/2 "

输出

1

备注:
语言不限
 
  public long calculate (String s) {
        // write code here
        List<String> compute = patternIndex(s);

        Queue<String> queue = new ArrayDeque<>();
        // 四为和俩位的时候单独拿
        Set<Integer> computeIndex = new TreeSet<>();
        for (int i = 1; i < compute.size(); i+=2) {
             if (compute.get(i).equals("*")||compute.get(i).equals("/")){
                 computeIndex.add(i);
                 computeIndex.add(i-1);
                 computeIndex.add(i+1);
             }
        }
        List<Integer> list = new ArrayList<>(computeIndex);
        for (int i = 0; i <list.size(); i++) {
            System.out.println(compute.get(list.get(i)));
            queue.add(compute.get(list.get(i)));
        }
        for (int i = list.size()-1; i >=0; i--) {

           compute.remove((int)list.get(i));
        }
        for (int i = 1; i < compute.size(); i+=2) {
                if ("+".equals(compute.get(i))||"+".equals(compute.get(i))){
                    queue.add(compute.get(i));
                    queue.add(compute.get(i-1));
                }else {
                    queue.add(compute.get(i-1));
                    queue.add(compute.get(i));
                }
        }
        long l = Long.valueOf(queue.poll());
        int size = queue.size();
        for (int i = 1; i < size; i+=2) {
            String poll1 = queue.poll();
            l = compute(l, Long.valueOf(queue.poll()), poll1);
        }
        return l;
    }

     private Long compute(Long pre,Long next,String compote){
         switch (compote){
             case "+": return pre+next;
             case "-": return pre-next;
             case "*": return pre*next;
             case "/": return pre/next;
             default:{
                 return 0L;
             }
         }

     }

    private List<String> patternIndex(String s){
        char[] chars = s.toCharArray();
        List<String> list = new ArrayList<>();
        String num = "";
        for (int i = 0; i < chars.length; i++) {
           String str = chars[i]+ "";
            if (!str.matches("[0-9]")){
                if (!str.equals(" ")) {
                    list.add(num);
                    list.add(str);
                    num = "";
                }
            }else {
                num += chars[i];
            }
        }
        if (!num.equals("")) {
            list.add(num);
        }
        return list;
    }
各位大佬,请问我这样写有bug吗?
发表于 2023-05-22 23:19:58 回复(0)