Skip to content

setezzy/four-arithmetic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

运行:java -jar MyCalculator.jar -n

需求分析

目标

本软件的主要目标为:四则混合运算题目生成及计算

用户特点

本软件最终用户为小学生(或小学教师),会基本的四则混合运算,不会负数计算。故我们应基于上述用户特点进行软件开发。

假定和约束

开发方法:面向对象的开发技术

开发语言:Java

开发期限:1周

需求规定

由于软件规模较小,在此只考虑功能需求。以小学生为主要服务对象,对软件的功能初步设定为:

a.表达式生成功能。分为操作数随机生成,运算符随机生成以及最终表达式生成。操作数包括100以内正整数和真分数;运算符包括( +, -, *, ÷);最终表达式需要包含带括号的子表达式。其中操作数及运算符序列个数也随机生成。

b. 表达式计算功能。要求计算带括号的混合运算的结果,若最后结果为分数,则需要对分数进行化简。

c. 用户交互功能。首先判断用户输入是否非法,例如输入字母时要求用户重新输入;再对用户答案进行正确性判断:若正确,记得分,若错误,显示正确答案。最后显示用户的最终得分。

d. 用命令行参数n控制题目数量

功能图

详细设计

设计思路

a. 生成操作数数组:随机生成正整数或真分数,可由随机数决定。特别注意的是生成分数时,分子应小于分母。将操作数数目作为该方法变量,循环生成操作数,存入数组。

b. 生成运算符数组:随机生成四种运算符,通过switch()实现。当生成的运算符为乘或除时,考虑插入括号,且保证括号插入在低优先级运算符两侧:若乘/除号前一个是加/减号,可以插入括号,是否插入可由随机数决定。将操作数数目作为该方法变量,循环生成操作数,存入数组,当运算符数量达到最大值时,最后插入”=”。

c. 生成表达式:将a,b步骤生成的序列按序插入就得到一个符合逻辑的表达式。首先遍历操作数数组,当有括号时,判断是否为左括号,若是,则先插入括号,再依次插入数字和运算符和对应的右括号。

d. 表达式计算:在这里并未采用逆波兰表达式计算方法,而是参考了其他实现方法:先定义无括号的方法,具体实现为将表达式拆分分别放入list(分为操作数list和运算符list),接下来取运算符,取对应索引处左右的操作数,计算,并将计算结果放回当前索引位置。有括号的方法,具体实现为查找表达式中的括号,取出括号内的子表达式,调用无括号方法进行计算,用该计算结果替换该子串,得到新的表达式,再递归调用有括号方法。

e. 用户交互:用main()函数的String args[]参数接收用户定义的题目数量,循环调用c步骤的方法生成题目;接收用户输入的答案,若不合法则要求重新输入,将用户答案与d步骤得到的运算结果匹配,若相等,则显示“正确”,并计入得分,否则显示“错误”并显示正确答案。

设计实现

程序整体流程图

类图

About

Automatic generation of four arithmetic expressions (command line version)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages