这几天用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. 【node】----mocha单元测试框架-----【巷子】

    1.mocha简介 单元测试是用来对一个模块.一个函数.或者一个类来进行正确性的检测工作   特点:      既可以测试简单的JavaScript函数,又可以测试异步代码,           可以 ...

  2. 2.5 – Garbage Collection 自动垃圾回收 Stop-the-world vs. incremental vs. concurrent 垃圾回收策略

    2.5 – Garbage Collection  自动垃圾回收 Lua 5.3 Reference Manual http://www.lua.org/manual/5.3/manual.html# ...

  3. Spark集群安装和WordCount编写

    一.Spark概述 官网:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 为大数据处理而设计的快速通用的计算引擎. Spark加州大学 ...

  4. FPN(feature pyramid networks)

    多尺度的object detection算法:FPN(feature pyramid networks). 原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征 ...

  5. uchome 全局变量

    $_SC: Array ( [dbhost] => localhost [dbuser] => root [dbpw] => root [dbcharset] => utf8 ...

  6. git-【十】忽略文件

    1.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置 ...

  7. c primer plus(五版)编程练习-第六章编程练习

    1.编写一个程序,创建一个具有26 个元素的数组,并在其中存储26 个小写字母.并让该程序显示该数组的内容. #include<stdio.h> #define SIZE 26 int m ...

  8. git-flow工作流程

    什么是 git-flow? 一旦安装安装 git-flow,你将会拥有一些扩展命令.这些命令会在一个预定义的顺序下自动执行多个操作.是的,这就是我们的工作流程! git-flow 并不是要替代 Git ...

  9. POJ2506:Tiling(递推+大数斐波那契)

    http://poj.org/problem?id=2506 #include <iostream> #include <stdio.h> #include <strin ...

  10. Selenium IDE脚本录制步骤简介

    录制脚本步骤: 1.打开Selenium IDE,输入需要录制脚本的地址,然后启动Firefox,输入selenium IDE需录制的地址,根据实际需求,做相关操作: 2.录制过程中,会发现做的相关操 ...