`
bulote
  • 浏览: 1305690 次
文章分类
社区版块
存档分类
最新评论

用java实现了一个小的计算器算法

 
阅读更多

突然之间心血来潮,就是想试一试数据结构怎么用.到现在才感觉的,数据结构是一种思想,一种思维方式,用怎样的方式去解决怎样的问题,这些是数据结构和算法给我们的.

言归正传吧,说说这个小计算器(其实还有太多需要扩展和改进的地方).暂时只局限在加减乘除,因为定义的是int类型的,所以也限制在整数运算吧.

主要思路是这样的:计算器最主要的部分是获取用户输入,然后根据算法将获取到的输入存储成为二叉树.当然,肯定要用栈存储的.

先看一下简单的分析:

1+2-3: 存储成二叉树应该是这样的:节点上的值为运算符,左右孩子为数值:

+

/ \

+ 3

/ \

1 2

也就是说,存好后用后序方法来进行读取,然后计算.

如果有*和/,则如下:

1+2*3-6/2:

-

/ \

+ /

/\ / \

1 * 6 2

/\

2 3

其实,从这些分析上,可以得出一个结论,暂且是对于这个计算器范围内的结论(没有括号之类的...)

(1)两个栈,一个CTack,用来存放暂时的操作符,一个TTack,用来存放二叉树.两个栈结构,一个栈存放的是String类型,另一个存放二叉树Node类型.

(2)一次对用户输入的字符进行遍历,通过下面的原则判断是否压栈还是出栈组成二叉树.

方式:首先,在输入字符是数字时,先创建一个TTack,左右孩子赋值为null,data值赋值为数字.

输入遍历到操作符时:a: CTack为空;b:CTack当前操作符优先级<读入的操作符 ; 压栈CTack

aa:CTack当前操作符优先级>=读入操作符优先级,新建Node,出栈TTack中的两个Node分别

作为新Node的左右孩子,操作符作为节点值,之后再次压栈TTack.

(3)读完后,如果CTack还不是null,则以此取出TTack中的两个Node作为新Node的左右孩子,CTack出栈的操作符作为节点值.之后压栈.

思路大体就是这样,这个过程中其实有很多问题,其中比较难的是:如果操作符和已经有的是相等的关系,那么就是循环进行新建节点,压栈这些操作.

核心程序:

对栈的操作:

工具操作:其中getResult方法用到了递归调用的方法.

定义优先级:

定义二叉树:

总结:

其实,这个程序只是实现了一个思想,还有很多没有考虑到的地方,还有很多代码需要重构.总的来说,学会了这种思想也是一个小小的进步,接下来会好好完善一下代码.

GOGO~

分享到:
评论

相关推荐

    很好用一个简单的计算器算法做法

    一个比较好的Java写的计算器代码! /** * 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。 */ public class Calculator extends JFrame implements ActionListener {

    java实现计算器java实现的计算器

    java实现的计算器,算法简单,界面友好.

    最全房贷计算器 java 代码 含算法

    房贷计算器 java代码,内含房贷计算的各种可能性,例如正常还款,提前还款信息等,可参考 https://www.rong360.com/calculator/fangdai.html 进行验证

    java实现的一个简单计算器

    用java语言实现的一个简单计算器,支持加减乘除,小数,带括号运算,不支持负数,该程序带有界面,附带使用方法,算法实现简单,可能有一些小bug未解决,主要是测试有限。。

    java栈实现计算器中缀表达式

    “计算中缀表达式”可以称得上是一个特别经典的关于栈的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说,这是一道必须要掌握的算法题。中缀表达式、...

    Java计算器核心算法代码实现

    今天小编就为大家分享一篇关于Java计算器核心算法代码实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Java计算器代码(带括号运算)

    一个用Java实现的计算器小功能, 可以支持加减乘数, 以及括号运算

    计算器 JAVA 算法

    自己写的简单计算器 实现了基本的功能 这个我们课程设计的时候写的 老师给我们的三个题中 计算器是其中的一个

    Java实现计算器,带界面

    一款功能强大的计算器,利用javafx实现的界面,这是我们去年的Java大作业和实验的结合,我把简易计算器的界面和功能强大的算法结合实现而成

    java版计算器实现

    个人用java awt实现的一个计算器,里面运算主要实现了+、-、*、/、取负以及x^y次幂运算,括号以及括号的嵌套运算,界面其它事件实现了后退、重置等,基本逻辑已实现,如有必要可自行实现相应的算法并按照已定义的...

    Java EJB编写计算器的例子.rar

    Java EJB制作的计算器源码,Calculator计算器,是很多初学软件编写朋友都喜欢仿写的功能,从中可以熟悉一下一些基本的Java代码编写规范,算法和技巧等。因测试时Java环境问题,我没有调试起来,这个自己下载源码编译...

    Java计算器(包括源码)

    Java计算器界面精美,实现计算器算法,完成模拟windows自带计算器实现(包括源码)免费发布。

    java实现计算器.zip

    实现一个计算器。要求: 1、参照Windows计算器功能,实现加、减、乘、除运算; 2、声明为按钮数组; 3、对0~9数字操作,采用相同的算法; 4、解决除数为零的问题; 5、具有清除一个数字、全部清除、开平方和...

    java 计算器 简易计算器

    用java写的简易计算器,可实现基本的加减乘除算法,支持连续加减乘除

    Java计算器源码含界面(基于堆栈算法实现)

    Java计算器源码含界面(基于堆栈算法实现) 本程序适合初学者练习使用。尤其是对栈算法的学习及有好处

    java实现JFrame计算器

    实现简单的加减乘除,没有实现小数点的运算,界面是使用WindowBuilder控件布局。

    Java实现简易计算器.rar

    用Java的swing来实现一个简单计算器,主要内容为图形用户界面GUI的实现以及运算表达式核心算法的设计编写

    JAVASwing逆波兰计算器

    刚学两周JAVA,写了个计算器。用的过时的Swing,来个前辈提点意见

    通过java代码实现加减乘除的简单算法

    通过java代码实现加减乘除的简单算法。并打印到控制台。

Global site tag (gtag.js) - Google Analytics