为了账号安全,请及时绑定邮箱和手机立即绑定

贴上代码,getResult()函数,能够计算一个字符串型包含括号的中缀表达式,并且返回最终结果。这样这个计算器就完整了。

public String getResult(){
    Stack<Character> opAtor = new Stack<>();
    Stack<Double> opNum = new Stack<>();
    String exp = editText.getText().toString().trim();
    exp = exp.concat("#");
    opAtor.push('#');

    for (int i = 0; i<exp.length(); i++) {//扫描字符串
        if (Character.isDigit(exp.charAt(i))) {
            double temp = exp.charAt(i) - '0';//读取exp【i】中的数字
            double decimal = 0.0, w = 10;//如果这个字符exp【i】后面还有小数位数,w记录位数

            while (Character.isDigit(exp.charAt(i+1))) {  //检查exp【i】之后是否为数字,一直到不是数字为止
                temp = temp * 10 + (exp.charAt(i+1) - '0'); //是则记录在temp中
                i++;
            }

            if (exp.charAt(i+1) == '.') { //说明exp的下个字符为小数点
                i++;//跳过小数点

                while (Character.isDigit(exp.charAt(i+1))) {//读取小数部分
                    decimal = decimal + (double)(exp.charAt(i+1) - '0')/w;
                    w *= 10;
                    i++;
                }
            }

            temp += decimal;//最后结果才是真正的temp
            opNum.push(temp);
        }
        else {
            switch (Precede(opAtor.peek(), exp.charAt(i))) { //比较运算符优先级函数
                case '<':
                    opAtor.push(exp.charAt(i));//高于栈顶
                    break;

                case '='://只有一种情况,栈顶为左括号,exp【i】为右括号
                    opAtor.pop();
                    break;

                case '>'://优先级低于栈顶,开始计算
                    char c = opAtor.pop();
                    double b = opNum.pop();
                    double a = opNum.pop();
                    opNum.push(Operator(a, c, b));//计算(a c b),结果入栈
                    i--;//循环结束执行i++操作,所以指示器i回退,否则会漏掉一个运算符(exp[i]并没有入栈)
                    break;
            }
        }
    }

    return String.valueOf(opNum.pop());
}


正在回答

1 回答

啊啊啊啊

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第一门课(入门篇)
  • 参与学习       312584    人
  • 解答问题       4633    个

想快速掌握Android应用开发基础,选择学习这门课程就对了。

进入课程

贴上代码,getResult()函数,能够计算一个字符串型包含括号的中缀表达式,并且返回最终结果。这样这个计算器就完整了。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信