java 随机 生成四则算数表达式_自动生成小学四则运算题目

该项目是一个使用Java实现的程序,能够根据用户指定的数量和数值范围自动生成不包含负数和错误计算结果的四则运算题目。程序遵循特定规则,如避免运算过程中产生负数,保证除法结果为真分数,并限制每道题目运算符数量。此外,程序还能检查给定答案的正确性,输出统计结果。项目包括需求分析、设计、编码、测试和性能评估等阶段。
摘要由CSDN通过智能技术生成

结对项目

1.1 Github项目地址

https://github.com/everLuck666/-formula

1.2 项目成员

孙争:3118005106 邓富荣:3118005090

2.1 项目需求

1. 使用 -n 参数控制生成题目的个数,例如

Myapp.exe -n 10

将生成10个题目。

2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如

Myapp.exe -r 10

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2。

4. 生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数。

5. 每道题目中出现的运算符个数不超过3个。

6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:

1.

1. 四则运算题目1

2. 四则运算题目2

.......

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

1.

1. 答案1

2. 答案2

特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

8. 程序应能支持一万道题目的生成。

9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e .txt -a .txt

统计结果输出到文件Grade.txt,格式如下:

Correct: 5 (1, 3, 5, 7, 9)

Wrong: 5 (2, 4, 6, 8, 10)

其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。

2.2 PSP预估时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)

Planning 计划 20

Estimate 估计这个任务需要多少时间 2880

Development 开发 1440

Analysis 需求分析(包括学习新技术) 40

Design Spec 生成设计文档 20

Design Review 设计复审 20

Coding Standard 代码规范 40

Design 具体设计 1440

Coding 具体编码 1440

Code Review 代码复审 10

Test 测试(自我测试、修改代码、提交修改) 30

Reporting 报告 20

Test Report 测试报告 20

Size Measurement 计算工作量 10

Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 20

Total 合计

3. 解题思路

编程语言的选择:java

需要用到的知识:IO流、JTable、栈

结构分析

遇到的困难

IO流写入会覆盖之前的内容导致写入内容与预期不符,变量类型的转换

对于计算中心思想:用后缀表达式运算。

用逆波兰法;

中缀表达式转后缀表达式遵循以下原则:

1.遇到操作数,直接输出;

2、栈为空的时候遇到符号,入栈

3、遇到左括号将其入栈。

4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出;

5.遇到其他运算符’+’‘一’’*’’/'时,弹出所有优先级大于或等于该运算符的栈项元素,然后将该运算符入栈;

6.最终将栈中的元素依次出栈,输出。

4. 设计实现过程

根据需求,对每个功能进行细分、简化,找出每个功能的详细需求,把每个功能都实现完成,生成函数,然后考虑封装调用,在主函数中实现调用各个功能函数,完成开发。

5.思维导图

191859507_1_2020060108215799.png

6. 代码说明

main方法

public class major {

public static void main(String[] args){

Choose choose = new Choose();

}

主要调用函数

public class Choose extends JFrame{

public Choose() {

super("选择题目数量范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值