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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter