这几天用java写了一个计算器程序,开始写的时候原本只是想实现一下GUI(这个是直接读三个字母还是什么“固椅”的发音)界面,熟悉一下Java GUI 编程,为Java期末大作业练练手,本以为代码不会很长,结果写完下来发现到了惊人的千行数量级,我分析了一下,主要是在实现监听器的时候花了很大篇幅,主体程序应该会短不少。整个程序分为三个.java文件,分别为 Calculator.java EvaluateExpression.java Arith.java ,程序已放到Github上去了(https://github.com/JiaxinTse),首先是用户在界面上输入,然后输入完得到一个字符串,在用户按下等于号的时候把这个字符串传给EvaluateExpression.java里的一个中缀表达式求值函数,计算出结果,在传入表达式之前要对表达式进行括号匹配分析,由于计算器精度需要,又考虑到java中double型数据运算存在的潜在误差,于是重新实现了浮点数的加减乘除运算,原因是我遇到了这样一个问题(http://blog.csdn.net/jackiehff/article/details/8582449 )

程序花了很大篇幅阻止用户的非法输入,所以原本可以写的不是很长的监听器类最后变得很长,因为我觉得在用户输入的时候就尽可能地减少错误要比你先让用户随便输入最后对表达式进行综合分析要来得简单,下面简单列举一些阻止的非法输入:

):第一个符号就是右括号

(1+2)3:右括号后面直接接数字,类似的左括号也有这些情况

2.3.4:在一个数字上输入多个小数点

(*):括号后面直接接运算符

(1+2)*=:等号前面出现了非法符号

1+*2:连续输入运算符

等等...

这些判断是在用户输入阶段进行的,如果判断为非法,就不做任何处理,反应在程序界面上就是输入无反应,中缀表达式求值直接利用了我之前写的一个程序

http://www.cnblogs.com/journal-of-xjx/p/5936448.html),但是由于java中没有指针,所以改用数组重新定义了栈,这次直接定义了两个栈,一个是操作数栈,一个是操作符栈,这一次也算是完善了上次那个程序,可以实现了负数和小数的计算了, 所以这次的中缀表达式程序比上次多了不少代码。

窗体的主要布局如下

整个界面模仿Win10自带的计算器

以下是整个界面各部分组件的布局

以下是弹出对话框的效果

上面的链接都是可以打开的哦

写了三天的时间,有兴趣的可以去我的github上看看

------------------------------------------------------------第二版更新-----------------------------------------------------------------

1.添加了部分功能

2.界面优化

以下是部分更新后的截图

1.启动程序图

2.关于界面图

3.计算过程图

Java实现GUI计算器【代码】的更多相关文章

  1. Java之GUI编程

    GUI编程 组建 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUI的核心技术:Swing AWT 为什么不流行? 界面不美观. 需要jre环境.(没必 ...

  2. 【Java】GUI编程

    GUI编程 前言 某koukou老师的任务罢了,好在狂神老师居然有GUI的课,只能说是有救星了. [狂神说Java]GUI编程入门到游戏实战 最好笑的是,老师要求掌握的居然是14年的知识,就连狂神在上 ...

  3. 2.JAVA之GUI编程布局

    布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...

  4. 3.JAVA之GUI编程Frame窗口

    创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...

  5. 5.JAVA之GUI编程窗体事件

    我们回顾下第三篇时的内容: 在3.JAVA之GUI编程Frame窗口中窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉. 现在我们就来解决下这个问题. ******************* ...

  6. 8.JAVA之GUI编程键盘码查询器

    程序使用说明: 1.本程序由于是java代码编写,所以运行需安装jdk并配置好环境变量. 2. 复制java代码到记事本内,另存为Keyboard_events.java: 3.复制批处理代码到记事本 ...

  7. 9.JAVA之GUI编程列出指定目录内容

    代码如下: /*列出指定目录内容*/ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import ...

  8. 10.JAVA之GUI编程弹出对话框Dialog

    在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...

  9. 11.JAVA之GUI编程菜单

    功能:添加菜单组件 知识总结: 代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; impor ...

随机推荐

  1. windows dos 常用命令行

    有关某个命令的详细信息,请键入 HELP 命令名 dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目录 rd (remove direc ...

  2. phpStorm 显示行号

  3. javascript飞机大战-----004创建子弹对象

    /* 创建子弹:因为子弹不是只创建一个所以要用构造函数 注意一点:子弹发射的位置应该是英雄机的正中央的位置,所以需要传点东西进来 */ function Bullet(l,t){ this.l = l ...

  4. Feature extraction using convolution

    http://ufldl.stanford.edu/wiki/index.php/Feature_extraction_using_convolution http://ufldl.stanford. ...

  5. MySQL插入性能优化(转)

    原文:http://tech.uc.cn/?p=634 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时 ...

  6. Flask简介之简单应用

    Flask 0.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收ht ...

  7. mysql实现开窗函数、Mysql实现分析函数

    关键字:mysql实现开窗函数.Mysql实现分析函数.利用变量实现窗口函数 注意,变量是从左到右顺序执行的 --测试数据 CREATE TABLE `tem` ( `id` ) NOT NULL A ...

  8. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  9. PAT 1044 Shopping in Mars[二分][难]

    1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...

  10. PHP对象转数组

    Solution json_decode( json_encode( $obj ), true ): But why?You should have a look at the function na ...