四则运算题目生成程序(基于控制台)

 

(项目文件地址:https://git.coding.net/Aes/Exp1.git)

一、需求分析

1.将用户的输入作为参数,生成不同数量的一定范围的算式

2.算式的运算符数量不超过3个(随机生成1-3运算符的算式)

3.判断用户的答案是否正确

4.将题目和答案输出到文件中

5.使用分数计算,并且要保证生成的算式不重复

 

二、设计思路

1、算式生成:

随机生成一个参数m,控制运算符的数量,则数字数量为m+1。随机生成一个数字,一个运算符的规律来生成算式,最后得到三个数组,一个存放运算符,一个存放数字,还有一个存放完整的算式。

2、计算优先运算符

根据存放运算符的数组来进行遍历,判断之前是否出现过”*/”符号,再根据当前数组遍历的位置,来生成一个算符优先的数组。数组元素存放的是,优先计算的符号的下标。如:“2+3*5-6”这个算式中,先算*,再算+和-,所以优先符数组里面是元素是:1,0,2。

3、计算算式的结果

思路就是,例如:1+2*3-4,根据计算出来的优先数组,先算2*3,结果存入result,2和3计算过后,就将这两个数的位置0,再算1+2,2已经置0了,所以是1+result,然后置0,算3-4,3已经置0了,所以算result-4,最后的就是结果。

但是,我又发现了这个想法对于1*2+3*4或者1+2+3*4,这种式子来说,(优先符为021或者201)是不能计算出正确结果的,所以,我就讲这种情况特地来计算,算出左右两边的,再来算中间的操作符。

4、计算结果精度

BigDecimal类来进行精确的计算,直接使用a*b,或者a/b的double型计算,计算结果经常会不准确。

5、文件输出

将算式和答案存入list中,写一个函数,用list作为函数的参数,遍历将list中的内容输出文件

 

三、运行截图

四、总结

经过同学的提醒才知道原来可以将中缀表达式转换为后缀表达式,然后用栈数据结构来进行计算。这样更简单方便。而不用像我的方法一样,要思考各种的情况。而且使用栈能够更好的计算带有括号的算式。

括号、分数、查重功能没有实现。

五、PSP表格

PSP2.1

Personal Software Process Stages

Time Senior Student

Time

Planning

计划

5

5

· Estimate

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

5

5

Development

开发

420

512

· Analysis

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

20

15

· Design Spec

生成设计文档

10

5

· Design Review

设计复审

10

10

· Coding Standard

代码规范

20

2

· Design

具体设计

40

60

· Coding

具体编码

240

300

· Code Review

代码复审

20

0

· Test

测试(自我测试,修改代码,提交修改)

60

120

Reporting

报告

30

6

·

测试报告

20

2

·

计算工作量

5

1

·

并提出过程改进计划

5

3

 

 

 

 

(单位:分钟)

 

posted on 2017-09-23 22:36 Aeons 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Aeons/p/7583227.html

实验一: Java编程基础 (1) 配置环境变量,熟悉编程环境。 (2) 建立一个Java的Application程序,编译、运行以下例题: public class ex01 { public static void main( String arg[ ]) { System.out.println(“hello!”); } } 实验二:流程控制 (1) 编程输出100以内的奇数。 (2) 编程输出乘法表。 (3) 编写程序,定义一个一维数组并赋有初值,同时找出一维数组中的最大值和最小值并输出。 实验三:类和对象 (1) 设计一个User类,其中包括用户名、口令等属性以及构造方法(至少重载2个)、获取和设置口令的方法、显示和修改用户名的方法等。编写应用程序测试User类。 (2) 定义一个Student类,其中包括学号、姓名、性别、出生年月等属性以及init( )——初始化各属性、display( )——显示各属性、modify( )¬——修改姓名等方法。实现并测试这个类。 (3) 从上题的Student类中派生出Graduate(研究生)类,添加属性:专业subject、导师adviser。重载相应的成员方法。并测试这个类。 实验四:类的继承 (1) 定义一个Animal类,其中包括昵称、性别、体重属性,构造函数初始化各属性,显示各属性的成员函数、修改属性的成员函数。实现并测试这个类。 (2) 从上题的类中派生出Dog类,添加年龄属性。重载相应的成员方法,并添加新的方法bark(),输出“wangwangwang”。并测试这个类。 实验五:接口 (1) 定义一个接口Inf,含有常量π和一个实现计算功能的方法calculate( ),再分别定义一个面积类area和一个周长类circumference,各自按计算圆面积和圆周长具体实现接口中的方法,并以半径为5来测试这两个类。 (2) 定义一个接口run(),汽车类和卡车类分别实现这个类,汽车类实现这个接口输出的是“汽车在跑”,卡车类输出的是“卡车在跑”,丰富这两个类,在主程序中测试。 实验六:异常处理 (1) 定义一个类,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。 (2) *定义一个类Caculate实现10以内的整数加减法的计算。自定义一个异常类NumberRangeException,当试图进行超范围运算时,产生相应的信息。编写应用程序进行测试。 实验七:图形界面编程 (1) 在窗体上产生一个单文本框和两个命令按纽:“显示”和“清除”。当用户单击“显示”按纽时,在文本框中显示“Java 程序”字样;单击“清除”按纽时清空文本框。 (2)设计如下界面: 当用户输入了两个操作数并点击运算种类按纽后,在运算结果对应的文本框中显示运算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值