零基础安卓开发:开发简易计算器(三)——算法与按钮绑定功能

算法实现

关于算法实现我简要介绍一下,主要是利用递归的思想。
例如这个式子: “1+56/72-4”
假设计算函数为 public static double calculate( String str){}
我们先从这个字符串内寻找计算符号 例如加号
如果 找到了加号
则返回结果 calculate(“1”)+calculate(“56/72-4”)
递归终止条件为字符串内部没有符号,例如上式的 calculate(“1”)就返回 1.0
依次类推,值得注意的是减法和除法不满足结合律,需要从后往前查找符号。
优先级越高的运算应该放到越后面查找。
关于括号的实现():
优先计算括号内内容,查找最里面的括号,并计算该括号内算式的值,直到消除所有括号,把整个带括号的字符串变为不带括号的字符串为止

括号实现:

int startIndex = content.lastIndexOf("(");
        // 如果不是-1,标识这个等式中有括号,继续找与之对应的右括号
        if (startIndex != -1) {
            // 从左括号的位置开始找,找到第一个右括号,这对括号里面一定没有括号,所以就可以交给写好的parse(Stringcontent)方法算出结果!
            int endIndex = content.indexOf(")", startIndex);
            double d = parse(content.substring(startIndex + 1, endIndex));
            return parse(content.substring(0, startIndex) //
                    + d + content.substring(endIndex + 1));

总的计算函数实现:

 public static double parse(String content) {

        // 找到字符串中最后一个左括号
        int startIndex = content.lastIndexOf("(");
        // 如果不是-1,标识这个等式中有括号,继续找与之对应的右括号
        if (startIndex != -1) {
            // 从左括号的位置开始找,找到第一个右括号,这对括号里面一定没有括号,所以就可以交给写好的parse(Stringcontent)方法算出结果!
            int endIndex = content.indexOf(")", startIndex);
            double d = parse(content.substring(startIndex + 1, endIndex));
            return parse(content.substring(0, startIndex) //
                    + d + content.substring(endIndex + 1));
        }

        int index = content.indexOf("+");
        if (index != -1) {
            return parse(content.substring(0, index)) + parse(content.substring(index + 1));
        }
        // 这里<---
        index = content.lastIndexOf("-");
        if (index != -1&&index !=0&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值