实验一 多功能计算器

目录

一.预习内容:

项目分析

实验目标

运算符优先级认知

资料收集

二.算法设计

算法一:中缀表达式转为后缀表达式

算法二:计算后缀表达式

三.页面设计

页面组成

页面功能:

注意事项:

四.成品展示

五.改进措施


一.预习内容:

项目分析

       普通计算器项目的要求较为简单,但是需要有可视化的图像界面,即整体需要有和用户的交互能力。因此,输入输出算式时要有所体现,比如给出文本框进行 显示算式及结果,给出按钮进行点击输入。同时,要求能保存运算的 历史记录,除了求解普通的加减乘除表达式以外,还需要能正确识别 带括号的运算优先级。

实验目标

1.能通过设计的按钮控件输入并实现简单算数运算,要求表达式在编辑框中显示,能运算结果,输出在编辑框内显示;
2.能实现混合运算的求解,算术表达式中包括加,减,乘,除,括号等运算;并能够识别括号;

运算符优先级认知

资料收集

//中缀表达式向后缀表达式转换思路研究

中缀表达式转后缀表达式(Java代码实现) - 听风1108 - 博客园

//队列基本操作讲解

java队列的取出队首_Java队列Queue的使用_Long Yu的博客-CSDN博客

二.算法设计

算法一:中缀表达式转为后缀表达式

算法需求:

后缀表达式队列:postQueue,用于存储逆波兰表达式(其实不用队列排序直接输出也行)

操作符栈:opStack,对用户输入的操作符进行处理,用于存储运算符

③字符串:用于输入中缀表达式

算法思路:

左向右依次读取算术表达式的元素X,分以下情况进行不同的处理:

1)如果X是操作数,直接入队

2)如果X是运算符,再分以下情况:

      a)如果栈为空,直接入栈。

      b)如果X==”,直接入栈。

      c)如果X==”,则将栈里的元素逐个出栈,并入队后缀表达式队列中,直到第一个配对的”(”出栈。(注:“(”“)”都不 入队)

      d)如果是其他操作符(+ - * /,则和栈顶元素进行比较优先级。 如果栈顶元素的优先级大于等于X,则出栈并把栈中弹出的元素入队,直到栈顶元素的优先级小于X或者栈为空。弹出完这些元素后,才将遇到的操作符压入到栈中。

(3)最后将栈中剩余的操作符全部入队

算法二:计算后缀表达式

算法需求:

①结果栈Res_Stack

算法思路:

1、从左开始向右遍历后缀表达式的元素,即算法一中的postQueue

2、如果取到的元素是操作数,直接入Res_Stack,如果是运算符,从栈中弹出2个数进行运算,然后把运算结果入栈

3遍历后缀表达式,计算结果就保存在栈里了。

三.页面设计

页面组成

①字符串输入文本框

②历史记录文本框

③多个提供操作按钮以及数字按钮

页面功能:

基于JTextArea与JTextFiled的文本框设计,加入监听器Actionlisten,对鼠标点击按钮进行响应,当鼠标点击“=”时进行函数调用以及计算,并且在历史记录文本框显示对应的运算记录。

注意事项:

字符串输入的过程中,右括号的个数应该受到左括号的制约,即右括号的个数小于等于左括号的个数。

对于每一个数字,小数点应该只能有一个,而当计算器进行了运算符的点击而开始输入新的数字后,则可以重新输入小数点。

四.成品展示

五.改进措施

1.新增了对运算符的控制功能,即多个连续的运算符不可以连续输入,如++、*-、+*等都是错误的,输入一个运算符后,后面无法继续输入运算符

2.新增了补0功能,即当小数点输入而没有输入数字时,自动在小数点前面补0,而在数字后面输入小数点而没有数字后,自动在小数点后面补0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值