java简易计算器相关技术_技术分享

本文介绍了使用Java实现简易计算器的思路与代码实现,包括界面布局、事件处理和计算功能的详细步骤。通过分析任务目标,掌握了正则表达式、String类方法、Java异常处理、Swing组件和布局管理。在事件处理中,设计了接口处理界面事件,并解决了输入合法性、计算逻辑等问题。最后,总结了实验中的错误分析和解决方法,以及编程感悟。
摘要由CSDN通过智能技术生成

一、任务目标学会分析“简易计算器”任务的实现思路

根据思路独立完成“简易计算器”的源代码编写、编译和运行

掌握正则表达式来判定数字键或者数据是否合法

掌握String类常用方法的使用,如:contains方法等

掌握Java异常处理机制

熟练掌握Swing包(JTextField控件、JButton控件和控件数组)的使用,以及常用布局方式的使用

掌握GUI开发过程中如何处理组件上发生的界面事件

二、实现思路

2.1 界面布局实现思路根据实验要求,利用GridBagLayout布局将每个组件放在合适的位置,利用GridBagConstraints类中的Insets方法实现组件间隔

利用数组存放每个组件显示的文本

2.2 事件处理实现思路

设计ComputerListener接口继承按钮触发事件ActionListener接口以增加其抽象方法实现将界面事件传至PoliceListen类(PoliceListen类实现接口ComputerListener)做事件处理。

2.3 计算功能实现思路输入合法机制

避免第一位为符号,设置判断当第一位按非数字使不处理

当第一位为零,第二位也为零,设置判断当第一位为零时输入数字无效

避免首位为零,其后出现多个零(即0001),判断该输入的倒数第二位是否为符号,倒数第一位是否为0,在对按钮0。是则不做处理

避免输出数字不合法(多个小数点 即6.6.6),利用循环以符号位为分割线,判该数字是否存在已存在小数点,即每个运算符号后的数字至多存在一个小数点

排除多符号一起串连(即8+*9+6*/5),点击运算符触发事件并判断前一位是否为符号,是则不做处理

计算字符串

判断最后一位是否为运算符,利用String类中的charAt()方法提取最后一位进行判断,是则提示错误,否则运算

字符和数字分离,两次利用StringTokenizer类进行字符串提取分析分别得到数字序列和运算符序列

将数字序列和运算符序列存放在两个链表中,链表的删除较为便利

根据优先级计算,设置两个循环(当符号链表中的数据不为空则继续),第一个循环计算所有得乘除,即符号前后得两个数乘除,结果放在第一个数中删除第一个数和删除符号;第二个循环计算所有的加减,结果放在第一个数中删除第一个数和删除符号

三、实现代码及运行结果

UML图

8690d4f2844cab5c193be2842243ef2a.png

实现代码

c8141a808075917bc23ef619db02e9f7.png

运行结果

dce3d562f6103e21dd591d692922e2b5.png

四、总结或感悟

4.1 错误分析输入一个数中多个小数点

分析器的StringTokenizer的是否错误

正则表达式的使用错误

4.2 错误解决以运算符为分割,运算符后的数字之多只有一个小数点

在分析器使用分析字符串中的标点符号时未排除”0”,最后在单步调试中发现错误

“[+-*/]” 该正则表达式可以匹配”.”,导致浪费大量的时间检查在”.”的触发事件上

4.3 总结感悟

通过本次实验学习到了以下几点:

该开始入手实验时无从下手,一边考虑如何布局,一边考虑如何输出合法,一边考虑如何实现计算,一心三用,没有主次先后的编程观念。浪费比较多的时间;而后有了步骤,先将组件间的布局做好,在考虑输入数据的合法,最后在合法的情况下实现计算

学习到了一种新的布局方式GridBagLayout布局,该布局也是一种类似网格布局,改进GridLayout布局不能改变组件在网格中的大小的,组件间的间隔问题

本次实验未使用 WindowBuilding插件,主要的原因时想检验以下自己在暑假看课本的成果,以及个人认为在使用插件时容易将代码弄乱。不过在布局方面花费比较多的时间。但也熟悉了几个布局的特点,以及他们的常用方法

本次实验最大的收获就是熟悉掌握了一个类中实例的对象在利用构造方 法在各个类中的重复使用,以及复习接口的相关知识

五、代码附录

Text.java

cf067acf80f47d36fca41fbccb566ebe.png

ComputerListener.java

818fb4bc65d7fa3357823dac4f987ba7.png

Win.java

576d7156a4eab6253205ddff0e22675d.png

PoliceListen.java

c8141a808075917bc23ef619db02e9f7.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值