我们大家都知道,我们在学习每一门语言的时候,基本上的人都写了计算器,那么你还记得你当时为了实现连加,连乘,连除,连减,多层括号是如何实现的么,如果你用了几十行就搞定了,那么你是高手,当然了,这里就是来介绍是如何实现的,这是我当时写计算器的时候采用的方法,如果喜欢记得点赞哦。。。

一.先实现没有括号的连加运算

2+5+6

上面是一个简单的等式,我们的任务就是能计算出它的结果,首先你看到这个你可能也会想到拆分,把每一个字符拆分到集合中,然后进行判断处理,但是今天只采用拆分,不采用集合

上面的等式可以拆分成 "2" "+" "5" "+" "6"

现在开始顺着我的思路走哦~~~

可以看到我定义了一个parse方法,我就像通过调用这个方法就能返回正确的结果,那么我们先实现最简单的一种

直接返回字符串的双精度的值,那么你们有疑问了,这有什么软用?不,我告诉你,这有用,-->它实现了一个字符串的数字转化成了一个真正的数字

可以看到这里顺利的完成了转化,现在不理解没关系,往下看

现在的这个方法就好像一个小孩子,它只认识字符串的数字

那么现在孩子慢慢长大,他遇到了加号+

这时候这个小孩子根本不会算,但是他发现他会算里面的一部分,也就是里面的"2"和"5"

于是这个小孩子把它拆出来,于是parse方法就多了一个判断,如下:

可以看到,它对加号前后进行了拆分,然后又调用自己,因为拆出来的是一个字符串的数字,这个孩子之前就已经认识它了,所以调用自己能算出结果,然后中间采用加号相加,这样子就实现了"2+5"

如果跟着写的亲们,自己就应该能发现,这里不仅实现了"2+5"还实现了"2+5+6+8"连加的功能,哇塞,好神奇啊发现,这是因为这个方法它发现加号就会拆分,所以"2+5+6+8" 就变成了"2" + "5+6+8" --> "2" + "5" + "6+8" -->"2" + "5" + "6" + "8"

这样子拆出来的每一个都是一个字符串的数字,所以都能算出来并且返回

这就是递归,很多时候递归确实只能靠自己想,我也很难给你们讲清楚,但是递归和while循环有一点是一样的,必须有一个条件是终止的,在递归里面就是必须有一个时候是要有确定返回值的,我们这里确定的返回值就是return Double.parseDouble(content);

大家好好理解一下,虽说代码就几句,但是里面意义还得靠大家自己仔细研究研究。好了话不多说,我们接下去分析

之前我们为什么拿"+"先作判断,这是因为加号两边的等式是可以先算出来的,不影响最后的结果,如果不懂,请回到小学课堂,听老师再给你念叨念叨~~~~

二.实现加减混合的计算

我们知道上面我们已经实现了连加,其实连减的道理也是一样的

图中标记出来的地方,如果代码走到了这里,说明等式里面已经没有"+"了,为什么呢,因为"+"上面有判断,如果存在就直接再if语句中返回了,所以走到了标记处等式中必须没有"+"号

"2-3+8-4"  那么如果现在的字符串是这样子的,会被拆分成"2-3" "+" "8-4"

加好两边还是调用parse方法,"2-3"这个等式就走到了标记的地方,然后现在这个方法不能算啊,除了加好不认识其他的,所以标记的地方又得做相同的判断了

可以看到做了一个和"+"号很类似的判断,只不过寻找减号的方法是lastIndexOf("-")   为什么是这个呢,因为最后一个减号前后的等式先计算这是不影响结果的

假如一个等式"8-2-6"    答案是0大家都是知道的,如果你弄成"8" - "2-6" 这就完全不一样了,这个值就变成了 8-(-4) -->8+4-->12

但是你按照最后一个减号前后拆分   "8-2" - "6"  -->   "6" - "6"  -->0答案是正确的!

所以就是这里不一样,其他还是和加号一样是自己调用自己,如此已经实现了连加连减的混合运算啦

可以看到都是没有问题的

三.实现连加连减连乘法

我们前面已经实现了连加连减,所以走到减号判断的下面的等式是没有加号和减号啦

走到箭头的标记处的等式是只有"*"和"/"啦,所以我们现在就实现对乘号的判断,原理一样,我就不解释了,直接上代码了

和加号一样,是不是很简单了?那么最后除号也一并解决吧

到这里已经实现了+-*/的混合等式的运算,而且代码量简直就是少的可怜,后面还是复制粘贴的,这里最关键就是让大家理解递归的思想,一个方法我比喻成一个小孩子,开始值认识一个字符串的数字,后来能认识"+",知道了拆分。。。。。然后成为了大人,成功学会了混合运算

这里我对代码进行测试

可以看到都是没有问题的,那么小金子我先吃饭啦,后面的括号的实现,容我吃完饭,下一个博客再给大家说哈

计算器核心算法(一)相关推荐

  1. 用计算机连乘带加怎么算,计算器核心算法(一)

    我们大家都知道,我们在学习每一门语言的时候,基本上的人都写了计算器,那么你还记得你当时为了实现连加,连乘,连除,连减,多层括号是如何实现的么,如果你用了几十行就搞定了,那么你是高手,当然了,这里就是来 ...

  2. 阿里资深AI工程师教你逐个击破机器学习核心算法

    01 近年来,随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后,机器学习尤其是深度学习的热潮席卷了整个 IT 界. 所有的互联网公司,尤其是 Google 微软,百度,腾讯等巨头,无 ...

  3. 核心算法缺位,人工智能发展面临“卡脖子”窘境

    http://www.xinhuanet.com/politics/2019-04/30/c_1124435131.htm "徐匡迪之问"引发业界共鸣-- 核心算法缺位,人工智能发 ...

  4. SQL关键字转换大写核心算法实现

    1 不跟你多废话 上代码! /// <summary>/// SQL关键字转换器/// </summary>public class SqlConverter : IKeywo ...

  5. x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()

    x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode() 宏块编码函数x264_macroblock_encode()是完成变换与量化的主要函数,而x264_m ...

  6. 【视频课】零基础免费38课时深度学习+超60小时CV核心算法+15大Pytorch CV实践案例助你攻略CV...

    计算机视觉中大大小小可以包括至少30个以上的方向,在基于深度学习的计算机视觉研究方向中,图像分类,图像分割,目标检测无疑是最基础最底层的任务,掌握好之后可以很快的迁移到其他方向,比如目标识别,目标跟踪 ...

  7. 医疗软件产品核心算法部分说明--转载截取

    各方资料汇总说明 核心算法概述 算法类型: 公认成熟算法:公开文献专利标准.原理简单明确.上市超过四年且无不良时间.公认成熟算法名称.原理.用途,全新算法列明名称.原理.用途,并提供验证资料. 全新算 ...

  8. kylin分析引擎:运行原理、维度和Cube等名词解释、核心算法

    架构 kylin是一款分析引擎,最常用的数据源是Hive.1.5版本之后数据源增加了kafka,但最常用的仍然是Hive.但是Hive查询比较慢,Kylin解决了这一问题. 大致流程: 第一步:从Hi ...

  9. 重磅下载!业界首本强化学习应用宝典,阿里核心算法团队联袂打造

    作为一名技术人,你是否曾有过这样的疑惑: 人工智能大热,作为一名传统程序员,该如何转型或学习? 网上AI教程.书籍,质量参差不齐,如何找到真正专业的资源? AI理论遍地皆是,但几乎都在纸上谈兵,该从哪 ...

最新文章

  1. Burpsuite学习(4)
  2. python求1到n的乘积_Python简单实现两个任意字符串乘积的方法示例
  3. 后台开发经典书籍--linux性能优化
  4. (37)zabbix snmp类型 无需安装agent也能监控
  5. [导入]用Javascript实现interface的类似功能
  6. MySQL存储过程及触发器
  7. MySQL(介绍,安装,密码操作,权限表)
  8. 习题2.6 递归求简单交错幂级数的部分和 (15 分)
  9. 在线node服务器,如何将你的node服务放到线上服务器
  10. android 如何快速检测到画面变化_电瓶修复—如何快速检测电池的好坏2
  11. LWN:Fedora 关于无驱动打印的讨论!
  12. OpenCV——图像连通域
  13. 【Python】新华字典(bushi
  14. bxl文件转换为AD可以用的原理图和PCB库文件
  15. 【MYSQL】foreign key 外键约束(详解)
  16. halo开源博客搭建微信小程序实现内容同步-总结
  17. html文章目录自动生成,javascript:如何自动生成一篇文章的目录
  18. 键盘输入10个正整数,先打印输出奇数,再输出偶数
  19. 显示hosts文件为只读问题
  20. java遍历指定目录下所有文件

热门文章

  1. idea中Maven镜像源详细配置步骤(对所有项目)
  2. 电子名片H5功能,让你完美展示企业和产品信息
  3. Q宠猪猪伴侣 V2.50 多宠版 Beta4 ~~ 天空原创软件
  4. 机器学习----流行学习(manifold learning)的通俗理解
  5. 包容与信任是最好的激励
  6. 印度封杀中国货 商务部急晤印度驻华大使.
  7. 《玩偶之家》 读后感
  8. iOS自动化测试第一季-金阳光-专题视频课程
  9. 标准输出stdout stderr
  10. 嵌入式 linux 屏 翻转,linux嵌入式qt的屏幕旋转与字体大小疑点