Java编写简单计算器算法

Java编写简单计算器


(加抽象方法)

根据表达式得出答案的算法

类似下面图的面板操作方法
(表达式不能有括号)
Java编写简单计算器算法

// An highlighted block
import java.util.ArrayList;
//计算表达式的最终结果
public class finalres {
    float gofinal(String str) {
        resul x = new resul();
        //将字符串转化为一个字符数组便于判断
        char a[] = str.toCharArray();
        //记录字符串表达式的长度
        int len = str.length();
        ArrayList<String> b = new ArrayList<>();
        String r1, r2;
        //设置r3 最后将结果存储在r3中
        float r3 = 1;
        int p, p1;
        //设置p1为每次接受信号量
        p1 = 0;
        //把计算式转化为每个元素方便计算
        for (int i = 0; i <= len-1; i++) {
            if (i == len-1) {
                b.add(str.substring(p1));
            }
            //每次遇到运算符时将运算符以及运算符之前的一个元素加入到列表中
            if ("+".equals(String.valueOf(a[i])) || "-".equals(String.valueOf(a[i])) || "*".equals(String.valueOf(a[i])) || "/".equals(String.valueOf(a[i]))) {
                b.add(str.substring(p1, i));
                //每次添加后将p1移到运算符后的位置
                p1 = i + 1;
                b.add(str.substring(i, i+1));
            }
        }
        //记录b的大小
        p = b.size();
        int blen = 0;
        //先计算*和/
        while (blen <= p - 1) {
            if (blen == p - 1) {
                break;
            }
            //从左往右找*运算符
            if (b.get(blen).equals("*")) {
                r1 = b.get(blen - 1);
                r2 = b.get(blen + 1);
                r3 = x.mul(Float.parseFloat(r1), Float.parseFloat(r2));
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.add(blen - 1, String.valueOf(r3));
                p = b.size();
                blen--;
            }
            //从左往右找/运算符
            if (b.get(blen).equals("/")) {
                r1 = b.get(blen - 1);
                r2 = b.get(blen + 1);
                r3 = x.div(Float.parseFloat(r1), Float.parseFloat(r2));
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.add(blen - 1, String.valueOf(r3));
                p = b.size();
                blen--;
            }
            blen++;
        }
        //把blen归零
        blen = 0;
        //在计算加减
        while (blen <= p - 1) {
            if (blen == p - 1) {
                break;
            }
            //从左往右找+运算符
            if (b.get(blen).equals("+")) {
                r1 = b.get(blen - 1);
                r2 = b.get(blen + 1);
                r3 = x.add(Float.parseFloat(r1), Float.parseFloat(r2));
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.add(blen - 1, String.valueOf(r3));
                p = b.size();
                blen--;
            }
            //从左往右找-运算符
            if (b.get(blen).equals("-")) {
                r1 = b.get(blen - 1);
                r2 = b.get(blen + 1);
                r3 = x.sub(Float.parseFloat(r1), Float.parseFloat(r2));
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.remove(blen - 1);
                b.add(blen - 1, String.valueOf(r3));
                p = b.size();
                blen--;
            }
             //当剩下3个元素时直接计算
            if (b.size() == 3) {
                r1 = b.get(0);
                r2 = b.get(2);
                if ("+".equals(b.get(1))) {
                    r3 = x.add(Float.parseFloat(r1), Float.parseFloat(r2));
                    break;
                } else {
                    r3 = x.sub(Float.parseFloat(r1), Float.parseFloat(r2));
                    break;
                }
            }
            blen++;
        }
        //返回最终答案
        return r3;
    }
}