课程:构建之法
姓名学号:骆炳岑1759214 陆心妍:1759209
一 . 项目简介
ppt上所给题目如下图
A方案:输入所需要的算式个数,自动生成算式
B方案:用户手动输入数字、运算符,显示计算结果
沟通后认为A方案更贴切题目,意见统一后开始合作(同时陆心妍也完成了B方案的代码,见本文章末)
二 . 合作流程
1.项目目标
(1)初步掌握结对编程的方式过程
(2)编写小学四则运算测试系统,要求完成100以内的加,减,乘,除四则运算(两个运算符)
2.项目需求
(1)写出合作流程及发生的问题,矛盾,解决心得
(2)所有四则运算表达式均需随机生成
(3)用户可控制算式个数
(4)生成的题目中计算过程不能产生负数
(5)依次生成每一条表达式时,检索是否与前面生成的表达式重复
3.PSP表格
PSP2.1 | Personal Software Process Stages |
预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 30 | 45 |
Analysis | 需求分析 | 40 | 60 |
Design Review | 设计复审 (和同伴审核设计文档) | 30 | 45 |
Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 25 |
Design | 具体设计 | 60 | 120 |
Coding | 具体编码 | 120 | 200 |
Code Review | 代码复审 | 30 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 130 |
Reporting | 报告 | 60 | 90 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 45 |
合计 | 520 | 790 |
4.设计思路
(1)算式本身分成四个部分(实现)
随机100以内的数e1
‘+’‘-’‘*’‘/’的随机产生y(用数组实现)
随机100以内的数e2
‘=’
(2)使用参数控制生成题目的数量(实现)
(3)依次生成每一条表达式时,用数字做标记,检索之后生成的算式是否重复
(4)判断是否为减法且判断e1>e2?是则保留,否交换位置(实现)
三 . 代码及截图
package 四则运算; import java.util.*; public class test { private static Scanner sc; public static void main(String [] args) { int e1,e2,t; String y; System.out.println("你要计算的式子个数:"); sc = new Scanner(System.in ); int count=sc. nextInt(); String[] str=new String[] {"+","-","x","/"}; //第一个随机数 int[] a=new int[100]; for(int i=1;i<=100;i++) { a[i-1]=i; } //第二个随机数 int[] b=new int[100]; for(int i=1;i<=100;i++) { b[i-1]=i; } Random r=new Random(); for(int i=0; i<count;i++) { e1=a[r.nextInt(100)]; y=str[r. nextInt(4)]; e2=b[r.nextInt(100)]; //当为减法且被减数小于减数时,被减数与减数交换位置 if(y=="-" ) { if(e1<e2) { t=e1; e1=e2; e2=t; } } //输出式子 System.out.println(e1+y+e2+"="); } } }
四 . 心得
骆炳岑:两人是第一次参与结对编程的项目,对于合作项目来说队友真的非常重要,虽然中间有过意见不合但能很快找出最佳方案化解问题,合作非常愉快。在此次此项目中,发现自己还有很多不足,基础还不是很扎实,还需多多练习。
陆心妍:结对编程真的会带来1+1>2的效果吗?
对我们来说,结对编程的确有很大的帮助。我编写的程序需要用户手动输入数字、运算符,按照老师的题目要求“给同学出300道计算题”,这样会耗费很多的时间。而骆炳岑的程序则可以自动完成,虽然程序有点小问题,但经过我们的讨论、摸索,程序基本可以完成题目要求。如此,结对编程帮助我们加深对代码的理解,编写出更完善的代码。
五 . 另附 B方案代码
说明:需要用户手动输入,耗费较多时间成本、人力成本。
import java.text.DecimalFormat; import java.util.Scanner; public class JS { public static void main(String[] args) { String condition = ""; JS jisuan = new JS(); do{ Scanner scanner = new Scanner(System.in); try{ System.out.print("请输入第一个数:"); double x = scanner.nextDouble(); System.out.print("请输入第二个数:"); double y = scanner.nextDouble(); System.out.print("请输入运算符:"); String s = scanner.next(); char z = s.charAt(0); Jisuan.suan(x, y, z); } catch(Exception e){ System.out.println("请输入正确的数据!"); } System.out.print("是否继续?continue:继续,任意字符:结束"); condition = scanner.next(); } while("continue".equals(condition)); } public static void suan(double x,double y,Character z) { DecimalFormat r=new DecimalFormat(); r.applyPattern("#0.00"); if(z.equals('+')) { System.out.println(x+"+"+y+"=" + r.format((x+y))); } else if(z.equals('-')) { System.out.println(x+"-"+y+"=" + r.format((x-y))); } else if(z.equals('*')) { System.out.println(x+"*"+y+"=" + r.format((x*y))); } else if(z.equals('/')) { if(y==0){ System.out.println("被除数不能为0"); } else{ System.out.println(x+"/"+y+"=" + r.format((x/y))); } } else{ System.out.println("无法识别改运算符"); } } }