首页 > 其他分享 >结对项目

结对项目

时间:2023-09-28 13:12:01浏览次数:40  
标签:结对 项目 算式 30 运算符 括号 进栈 表达式

结对项目——小学四则运算

这个作业属于哪个课程 软件工程
这个作业要求在哪里 结对项目
这个作业的目标 1、尝试结对编程 2、深入熟悉开发过程 3、设计一个能自动生成小学四则运算题并批改题目的程序

一、合作者

姓名 学号
冯逸华 3121005162
马传丞 3121005096
GitHub仓库地址 GitHub

二、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 30 30
Development 开发 120 150
· Analysis · 需求分析 (包括学习新技术) 30 25
· Design Spec · 生成设计文档 30 35
· Design Review · 设计复审 (和同事审核设计文档) 30 25
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 15 15
· Design · 具体设计 60 50
· Coding · 具体编码 400 480
· Code Review · 代码复审 20 15
· Test · 测试(自我测试,修改代码,提交修改) 60 70
Reporting 报告 80 75
· Test Report · 测试报告 30 25
· Size Measurement · 计算工作量 30 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
合计 895 1015

三、效能分析

1、改进思路

程序中最消耗性能的部分就是生成多条算式时遍历比较算式的重复,一开始的比较思路是比较算式生成的后缀表达式的数组元素是否全部重复。但是每个算式都遍历的话非常耗时且占用内存较大。
改进思路就是添加筛选,先比较数组长度及对应算式产生的答案,若不同,则算式肯定不重复,直接返回不重复。

2、性能分析图

image

3、消耗最大的函数

用于去除重复的函数:Equation.filter()

因为里面用了许多逻辑判断和嵌套循环,时间复杂度高,随生成数量提高而呈幂次增长

四、设计实现过程

1、代码组织

  • Main

image

  • po包

image

  • Operand

image

  • Operator

image

  • util包
  • FileUtil

image

  • 项目结构

image

五、代码说明

1、关键代码

filter()

对存储表达式的指定数组做筛选,筛除不合格的表达式,返回存放合格表达式的数组。

image
image
image

generate()

生成随机中缀表达式,并返回

image
image
image

infixToPostfix()

将中缀表达式转换为后缀表达式
image

2、思路说明

(1)filter()

  • 说明:用于过滤重复的表达式
  • 思路:按顺序层层筛选,由于转换成后缀表达式,不用考虑括号
    1. 先去除运算过程含负数的
    2. 先比较结果
    3. 比较表达式是否一样
    4. 再比较包含的运算符是否相同
    5. 比较第一次运算的两数是否只是交换位置

(2)generate()

  • 说明:用于生成随机表达式
  • 思路:通过传参确定此次生成中包含的操作数数量、运算符数量、括号数量、数的范围,然后随机new出各对象,交替拼接操作数和运算符,最后随机添加括号

(3)infixTOPostfix

  • 说明: 将中缀表达式转换成后缀表达式

  • 思路:

    无括号:
    1.扫描中缀表达式的每一个字符,将数字入列;
    2.遇到运算符,栈空时直接进栈,栈顶非空时,运算符优先级大于栈顶元素才进栈,
    否则栈顶元素退栈入列,当前运算符再进栈;
    3.依次进行直至所有字符操作完毕
    有括号:
    1.扫描中缀表达式的每一个字符,将数字入列;
    2.遇到运算符,栈空时直接进栈,栈顶非空时,运算符优先级大于栈顶元素才进栈,
    否则栈顶元素退栈入列,当前运算符再进栈;
    3.遇到左括号,直接进栈,左括号后面的运算符直接进栈,直至遇到右括号;
    4.遇到右括号时,将栈顶元素依次退栈入列,直到遇到左括号,将左括号退栈,符号操作移动下一位
    5.重复以上操作,直至所有字符操作完成。

六、测试运行

1、测试用例

(1)生成1万个算式

image

(2)下载算式

image

(3)将生成的算式分题目和答案下载

image

image

image

(4)统计结果

image

image

七、项目小结

小结1:

冯逸华:
本来以为这个项目很快能完成,总体思路只花了20分钟,但尽管有思路,具体实现也没那么快。另外在去除重复表达式和添加多个小括号中也没有特别好的思路,拖了很长时间。关于结对编程,我的搭档能在一些地方提醒我,帮我想到更简单的实现,但总体来说,因为讨论和熟悉设备而花的成本还是挺高的。

小结2:

马传丞:
寒假刚刚学习java语言,正缺乏项目练手,这次的结对编程给我提供了一次机会。一开始接到项目需求的时候,有点两眼发愣,无从下手,后面查找了资料相对了解了这个项目大致思路。这次能完成这个作业,很大程度是因为有一个好搭档。我的搭档编程能力比我优秀许多,在项目编写之处,就能构思好整个项目的编写思路,所需要的主要函数,甚至主要函数的实现思路都有了。在一个下午左右的时间里,我的搭档向我解说,他的构思;解决我的疑惑,并完成框架搭建。这让我有了种我上我也行的感觉。最后,感谢搭档的帮助,让我对java编程有了更高的认识。

标签:结对,项目,算式,30,运算符,括号,进栈,表达式
From: https://www.cnblogs.com/fengyihua/p/17725105.html

相关文章

  • 结对项目:自动生成小学四则运算题目
    所属课程软件工程导论作业要求个人项目作业目标熟悉结对编程、完成小学四则运算题目的自动生成小组成员姓名班级学号林劲辰计科2班3121004707许庆阳计科2班3121004931Github链接:https://github.com/HsuQingYoung/PeerWork项目要求1、......
  • 结对项目:用python实现一个自动生成小学四则运算题目的命令行程序
    这个作业属于哪个课程计科21级12班这个作业的要求在哪里结对项目这个作业的目标了解结对项目的过程团队成员信息姓名学号肖兴明3121004712徐强3121004713Github链接GithubPSPPSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实......
  • 结对项目
    Github链接姓名:韩业浩 学号:3121004860这个作业属于那个课程软件工程-计科21级12班这个作业要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序一、PSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(......
  • 结对项目:自动生成小学四则运算题目
    软件工程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12?filter=all作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业目标学习算法,完成简单的四则运算团队成员:姓名:陈鑫杰学号:3121004688姓名:黄嘉俊学号:3121004696Git链接:h......
  • 五个步骤!轻松将ASP.NET MVC项目迁移至ASP.NET Core
    TelerikUIforASP.NETCore是用于跨平台响应式Web和云开发的最完整的UI工具集,拥有超过60个由KendoUI支持的ASP.NETCore组件。它的响应式和自适应的HTML5网格,提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。获取TelerikUIforASP.NETCore新版下载QQ技术交流......
  • 十一假期,就肝这些项目了!
    大家好,我是冰河~~哈哈,今天是2023年10.1假期前的最后一天,今年的中秋与国庆正好同时放假,总共8天假期。其实,跟大家一样,我也期待着放假,这样就有更多的时间为大家分享技术和项目了。前几天,就有不少小伙伴问我,冰河,你星球有哪些项目呢?我想趁着十一假期肝你星球的项目,可以吗?今天,我就给大......
  • 结对项目(王浩忠 曾铭鸿)
    学生个人信息成员学号王浩忠3121005099曾铭鸿3121005101作业信息这个作业属于哪个课程软件工程这个作业要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算的程序GitHub地址https://github.com/Binezis/Pair_ProgramPSP表格......
  • 结对项目
    姓名学号张钟杰3121005324伊尔帕提江3121005318Github结对项目github作业概述这个作业属于那个课程软件工程这个作业的要求结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序PSP表PSPPersonalSoftwareProcessStages预......
  • 使用vite创建vue3项目
    vite是一种新型前端构建工具,能够显著提升前端开发体验,它主要由两部分组成;一个开发服务器,它基于 原生ES模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资......
  • Web-入门-SpringBoot快速入门 创建springboot web项目
    web入门spring官网spring发展到今天已经形成了一种开发生态圈,spring提供了若干个子项目,为每个项目用于完成特定的功能。这些框架都是基于一个基础框架:直接基于SpringFramework基础框架进行开发会有两大难题:1.配置繁琐。2.入门难度大。所以spring家族意识到了这一点,......