week_2 四则运算
coding地址: https://git.coding.net/lvgx/week_2.git
一. 需求分析
1.接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题
2.每个数字在 0 和 100 之间,运算符在3个到5个之间。
3.每个练习题至少要包含2种运算符。
4.所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
5.练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
附加需求(改进部分):
1.支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。
2.扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1 /6=2/3,而非4/6,且计算过程中与结果都须为真分数。
二.功能设计
实现点击可执行程序,出现提示词“请输入要生成的运算式”,运行结束,显示运算式,且运算式满足题目要求。最后计算结束,可以点击文件“result.txt”,对照答案。
三.设计实现
设计了三个类
main:主函数,实现输出运算式,运算的功能
symbol:随机实现运算符
randomnumber:随机生成随机数
四.算法详解
1.生成随机数
有Math类的random()方法以及Random类生成随机数两种方式,选择了第一种较为熟悉便捷的方法,并将生成随机数的方法装入一个类,便于调用,实现模块化
2.生成随机符号
将四种运算符装入一个数组中,通过生成随机数,对应到数组的检索值,并且个数满足设定范围,当几个随机符号一致时,将最后一个重新生成且不同于其他符号,并且覆盖掉最后一个字符,实现生成随机运算符的步骤
3.生成运算式
将生成的随机数放在一个数组里,将生成的运算符放在一个数组里,将二者合并,去除逗号括号,输出
4.获取生成个数N
通过函数获取输入数字,并判断其是否为正整数,且满足设定范围。
5.运算式的计算
通过迭代进行运算符优先级的判定,进行正常的运算
6.txt文件的生成
五.测试运行

六.代码
int results;
int n=numberTest();
//生成问题----------------------------------------------------
Result result = new Result();
String[] boxs = new String[n]; for(int j=0; j<n;) {
//随机生成运算符的个数
int Snum = (int) (Math.random() * 4 + 2);
//随机生成的数字个数
int Nnum = Snum + 1; //创建一个链表,并填入随机数
int[] nums = new int[Nnum];
for (int i = 0; i <= nums.length - 1; i++) {
nums[i] = (int) (Math.random()*101);
} //创建一个字符链表,并填入随机运算符
char[] sysmbols = new char[Snum];
for (int i = 0; i <= sysmbols.length - 1; i++) {
sysmbols[i] = Symbol.symbol();
} //连接两个链表,获得运算式
Object[] temp = new Object[Snum + Nnum+3];
for (int i = 0; i <Snum + Nnum; i += 2) {
temp[i] = nums[i / 2];
}
for (int i = 1; i <Snum + Nnum; i += 2) {
temp[i] = sysmbols[i / 2];
} List<Integer>resultN = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
resultN.add(nums[i]);
}
List <Character>resultS = new ArrayList<>();
for (int i = 0; i < sysmbols.length; i++) {
resultS.add(sysmbols[i]);
} Box box = new Box(resultN,resultS);
results = result.getResult(box);
if(results > 0 ) {
temp[Snum + Nnum] = '=';
temp[Snum + Nnum+1] = results;
temp[Snum + Nnum+2]= "\r\n";
boxs[j] = Arrays.toString(temp).replace(',', ' ').replace('[', ' ').replace(']', ' ') ;
j++;
}
else
continue;
//生成完毕--------------------------------------------------------
//输出
result.outQuestion(boxs);
System.out.println(Arrays.toString(temp).replace(',', ' ').replace('[', ' ').replace(']', ' '));
七.总结
其实对于java我并不是非常熟悉,可以说非常薄弱了,对于一个程序,我可能有一定的思维,但是因为不熟悉这门语言而不能熟练的运用相关函数,所以觉得这次作业对我来讲比较困难。通过这次作业,我深深的明白自己的代码能力有多薄弱,别人很快能编辑好的函数方法,我却要查询尝试多次才能实现。这促使我对java学习,有了一个微小的提高,因为只有不断应用,才能更加深刻的了解他的含义。所以我个人觉得,通过项目可以较好的促进个人的学习。还有非常感谢课代表张航同学,是他的耐心和帮助,才能使我在规定时间完成作业。故而有些内容是借鉴张航同学的博客http://www.cnblogs.com/zanghh/
还有我觉得讨论式学习有助于大家共同的提高,就比如说大家交流,互相学习发现还可以通过js成熟的eval函数可以简化运算过程等
八.PSP
|
SP2.1 |
任务内容 |
计划共完成需要的时间(h) |
实际完成需要的时间(h) |
|
Planning |
计划 |
25 |
50 |
|
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
25 |
50 |
|
Development |
开发 |
20 |
45 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
3 |
5 |
|
· Design Spec |
· 生成设计文档 |
0 |
0 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0 |
0 |
|
· Design |
· 具体设计 |
3 |
5 |
|
· Coding |
· 具体编码 |
10 |
25 |
|
· Code Review |
· 代码复审 |
2 |
4 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
2 |
6 |
|
Reporting |
报告 |
5 |
5 |
|
· Test Report |
· 测试报告 |
4 |
4 |
|
· Size Measurement |
· 计算工作量 |
0.5 |
0.5 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
0.5 |
0.5 |
九.不足
通过这次小小的项目,我认识到自己知识储备量的不足,也意识到不动手,只会一些理论的东西,并不能提高自己的能力。我会更加努力,做出更好的程序
week_2 四则运算的更多相关文章
- 介绍一款原创的四则运算算式生成器:CalculateIt2
家里小朋友读一年级了,最近每天都有一些10以内的加减法口算练习,作为程序员爸爸,自然也是想办法能够偷懒,让电脑出题,给小朋友做些练习.于是,自己在业余时间开发了一个四则运算算式生成器,名为:Calcu ...
- 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
1. 编写一个能自动生成小学四则运算题目的程序.(10分) 基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图. 本题发一篇随笔,内容包括: 题 ...
- 四则运算appNABCD模型
团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...
- 第一章-第一题(小学生四则运算)--By郭青云
1.项目需求 a) 除了整数以外,还要支持真分数的四则运算. (例如: 1/6 + 1/8 = 7/24) b) 让程序能接受用户输入答案,并判定对错. 最后给出总共 对/错 的数量. c) 逐步扩 ...
- 一个简易的四则运算单元...(15.12.15 BUG更新)
网上找的, 没有作者信息, 只能在这里感谢一下了, 支持标准写法的四则运算 --2015-12-15 修改了一个内存泄漏的BUG - Pop方法没有释放申请的内存 unit Base.Calculat ...
- 利用ANTLR4实现一个简单的四则运算计算器
利用ANTLR4实现一个简单的四则运算计算器 ANTLR4介绍 ANTLR能够自动地帮助你完成词法分析和语法分析的工作, 免去了手写去写词法分析器和语法分析器的麻烦 它是基于LL(k)的, 以递归下降 ...
- 【实践】js实现简易的四则运算计算器
最近看了一个大神推荐的某公司面试程序员的js 面试题,题目是用js 做一个计算器于是跟着大神的思想自己做了一下 ps:功能还没有完善好毕竟自己还是一只菜鸟还在不断学习中. 闲话不多说先上css代码 & ...
- HDU 5938 Four Operations(四则运算)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- C语言实现四则运算
学生:宋丹丹 张潇裕 #include<iostream>#include<ctime>using namespace std;void main(){ int x1,x2,a ...
随机推荐
- ETL项目2:大数据清洗,处理:使用MapReduce进行离线数据分析并报表显示完整项目
ETL项目2:大数据清洗,处理:使用MapReduce进行离线数据分析并报表显示完整项目 思路同我之前的博客的思路 https://www.cnblogs.com/symkmk123/p/101974 ...
- u-boot-1.1.6第2阶段入口函数start_armboot分析
学习目标: 1.分析u-boot-1.1.6第2阶段入口函数void start_armboot (void),熟悉该函数所实现的功能 2.为后面能够掌握u-boot-1.1.6如何启动内核过程打下基 ...
- css文字环绕
html: <div class="wrap-div-topSpacer"></div> <div class="wrap-div" ...
- 【Maven】在pom.xml文件中使用resources插件的小作用
在spring boot创建web项目打包为jar包的过程中,是不会把webapp目录下的页面也打包进去的,这个时候接触到了maven的 resources插件. ================== ...
- 利用BlockingCollection实现生产者和消费者队列,实现写文本
最近开发几个小项目,需要把结果写到txt文件里面,并且按照时间进行分文件,由于对于效率要求较高,所以采用 生产者和消费者 模型来进行写出文本,线程中只需要添加队列就立即返回,而不需要等待写文件的时间 ...
- mysql mtr写入数据
BEGIN; --disable_query_log --let $rows= 100 WHILE($rows) { --eval INSERT INTO t1 (a) VALUES ( $rows ...
- lua编程之协程介绍
一,lua协程简介 协程(coroutine),意思就是协作的例程,最早由Melvin Conway在1963年提出并实现.跟主流程序语言中的线程不一样,线程属于侵入式组件,线程实现的系统称之为抢占式 ...
- 大数据中Hadoop集群搭建与配置
前提环境是之前搭建的4台Linux虚拟机,详情参见 Linux集群搭建 该环境对应4台服务器,192.168.1.60.61.62.63,其中60为主机,其余为从机 软件版本选择: Java:JDK1 ...
- [Lua] try catch实现
参考了https://blog.csdn.net/waruqi/article/details/53649634这里的代码,但实际使用时还有些问题,修改后在此记录一下. -- 异常捕获 functio ...
- Unity3D — —存读档【转载】
详细可参考此篇博文: Unity序列化之XML,JSON--------合成与解析 简单例子(SiKi学院教程): using System.Collections; using System.Col ...