20172324 结对编程项目-四则运算 第二周 阶段总结

本文主要是介绍20172324 结对编程项目-四则运算 第二周 阶段总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

20172324 结对编程项目-四则运算 第二周 阶段总结

结对对象

  • 学号 20172321
  • 姓名 吴恒佚
  • 伙伴第二周博客:
  • 对结对伙伴的评价:感谢小吴同学对我的不离不弃,我这周因为啦啦操耽误了好多,小吴还一直帮助我,感动?

项目中自己负责的部分

基本上都是一起讨论完成的,比如比较难的中缀转后缀,我负责的差不多就是随机生成两种类型的题目。

个人贡献度划分

五五开

小组结对编程的照片

1332976-20180508215535867-166121923.png

相关过程的截图

  • 生成题目类驱动类的运行截图
    1332976-20180508210800468-708178060.png
    1332976-20180508210812742-544982946.png
    1332976-20180508210819269-1829530869.png

  • 后缀表达式计算的驱动类运行截图
    1332976-20180508211514609-1916845015.png
    1332976-20180508211521808-157105514.png

关键代码解释

  1. 在一个驱动类test里可以测试两个类,一个是随机生成整数题目的leveltest类,另一个是随机生成真分数型题目的fenshu
  • leveltest类代码如下:
import java.util.*;
import java.util.Random;
import java.util.Scanner;public class levelclass {public levelclass(){char[] operator = new char[]{'+', '-', '*', '÷'};Random random = new Random();Scanner scan = new Scanner(System.in);int num;int level;System.out.println("该程序只能计算一到五个操作符的算式。");System.out.println("输入你需要测试的算式等级:");level = scan.nextInt();System.out.println("输入你需要的式子数量:");num = scan.nextInt();switch (level){
//一级算式case 1:ArrayList<String> expression1 = new ArrayList<String>();for (int i = 0; i < num; i++) {int n = random.nextInt(1) + 1; //1个运算符int[] number = new int[n + 1];String ex = new String();for (int j = 0; j <= n; j++) {number[j] = random.nextInt(100) + 1; //2个数字}for (int j = 0; j < n; j++) {int s = random.nextInt(4);//随机选择某个运算符ex += String.valueOf(number[j]) + String.valueOf(operator[s]);if (s == 3) {number[j + 1] = decide(number[j], number[j + 1]);}}ex += String.valueOf(number[n]);ex += "=";expression1.add(ex);}for(int ii = 0; ii < expression1.size() ; ii++){System.out.print(expression1.get(ii) + "\n");}
//                System.out.println(expression1);break;
}private static int decide(int x,int y){//通过递归实现整除Random random=new Random();if(x%y!=0){y=random.nextInt(100)+1;return decide(x,y);}else{return y;}}public void produce(){}
}

因为case是重复的所以只用一个做例子。用户输入的式子等级n在外层循环里创建了一个可以放置n+1个数字的数组,一个内循环是用来给之前创建的数组赋值,另一个内循环将随机选中的数字数组中的某一索引中的值和操作数组中某一索引的值连起来拼成一个表达式。

  • fenshu类代码如下:
import java.util.Scanner;public class fenshu {public  fenshu() {String formula = null;int a, b,c,d;System.out.println("请输入题目的数量");Scanner scan2 = new Scanner(System.in);c = scan2.nextInt();String sz[] = new String[c];int x1, x2, m1, m2;for (d = 0; d < c; d++) {m1 = 1 + (int) (Math.random() * 10);x1 = 1 + (int) (Math.random() * m1);m2 = 1 + (int) (Math.random() * 10);x2 = 1 + (int) (Math.random() * m2);int operate = (int) (Math.random() * 3);//生成运算符if (operate == 0) {b = x1 * m2 + x2 * m1;a = m1 * m2;formula = yuefen(b, a);System.out.print(x1 + "/" + m1 + "+" + x2 + "/" + m2 + "=       ");}if (operate == 1) {b = x1 * m2 - x2 * m1;a = m1 * m2;formula = yuefen(b, a);System.out.print(x1 + "/" + m1 + "-" + x2 + "/" + m2 + "=       ");}if (operate == 2) {b = x1 * x2;a = m1 * m2;formula = yuefen(b, a);System.out.print(x1 + "/" + m1 + "*" + x2 + "/" + m2 + "=       ");}if (operate == 3) {b = m1 * x2;a = m2 * x1;formula  = yuefen(b, a);System.out.print(x1 + "/" + m1 + "/" + x2 + "/" + m2 + "=       ");}if ((d + 1) % 3 == 0) {System.out.println();}sz[d] = formula;}}public static String yuefen(int a,int b){int y = 1;for(int i=a;i>=1;i--){if(a%i==0&&b%i==0){y = i;break;}}int z = a/y;int m = b/y;if(z==0) {return "0";}return ""+z+"/"+m;}public void fs(){}}
  • 对正误的判断并且统计正确率
int wrong = 0;for(String st :expression){System.out.println(st);String str;str = st;Zhan lt = new Zhan();List<String> list = lt.work(str);List<String> list2 = lt.InfixToPostfix(list);System.out.println("输入答案");int daan = scan.nextInt();System.out.print("后缀表达式为:");lt.printList(list2);System.out.println(" ");if(daan != lt.doCal(list2)){System.out.println("错误    正确答案为:"+lt.doCal(list2));System.out.println(" ");wrong = wrong+1;}else{System.out.println("正确");System.out.println(" ");}}int sum=100-(wrong*100/num);System.out.println("正确率:"+sum+"%");

遇到的困难及解决办法

  • 问题一:

问题就是当客户输入测试等级3时,出来的题目会是客户需要的题目输入的三倍,如图所示
当客户输入测试等级4时,出来的题目会是客户需要的题目输入的两倍,如图所示
其他的情况下都是正确的,我debug发现,在case3和case4时程序会分别循环3遍和两遍。可是在这两个case里的代码和case1、2、5中的代码是一样的。我和吴恒佚想了很久都不知道为什么。

这是上周遇到的一个问题。

  • 问题一解决方案:why发现是case3、4、5都没有写break,case5没有影响,但是其他的就出现上图所示的问题了。
  • 问题二:这周的一个bug,很难遇到,是在偶然中发现的,当生成的题目一个÷后连着一个x时,计算结果就会出现问题,例如5÷5x25时,给出的正确答案不是25而是1。
  • 问题二解决办法:其实不是解决办法,只有一个思路,大概是因为除法乘法同时出现时会先计算乘法,然后变成一个类似于真分数计算的表达式,最后又取整数部分当作计算结果了。
    1332976-20180509010322890-840201231.png

项目地址

PSP时间统计:

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划50
Estimate估计这个任务需要多少时间60
Development开发600
Analysis需求分析 (包括学习新技术)150
Coding Standard代码规范 (为目前的开发制定合适的规范)45
Design UML设计项目UML类图20
Coding具体编码180
Code Review代码复审60
Test测试(自我测试,修改代码,提交修改)100
Size Measurement计算工作量(实际时间)30
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划20
合计1315

转载于:https://www.cnblogs.com/amberR/p/9011305.html

这篇关于20172324 结对编程项目-四则运算 第二周 阶段总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575972

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下