结对项目:实现一个自动生成小学四则运算题目的命令行程序
结对作业
作业须知
这个作业在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
---|---|
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11148 |
这个作业的目标 | 结对编程如何提高效率以及两个人的分工合作 |
结对成员
姓名 | 学号 |
---|---|
邹尊业 | 3118005350 |
游宇权 | 3118005345 |
GitHub🔗:https://github.com/Assassins-Roy/Calculate
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
·Estimate | · 估计这个任务需要多少时间 | 840 | 900 |
Development | 开发 | 720 | 810 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 120 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 30 | 60 |
· Coding | · 具体编码 | 360 | 360 |
· Code Review | · 代码复审 | 60 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 180 |
Reporting | 报告 | 130 | 190 |
· Test Report | · 测试报告 | 60 | 120 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 870 | 1030 |
效能分析
设计实现过程
代码目录图
类图
实现过程
关键代码
package calculate;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Random;
import java.util.Scanner;
public class GenerNum {
int max;
public String FraNumber(){
int a=(int)(1+Math.random()*(max-1));//系数
int b=(int)(1+Math.random()*(max-1));//分子
int c = (int)(b+1+Math.random()*(max-b));//分母
String d= +a+"'"+b + "/" + c;
return d;
}
//随机生成整数
public String IntNumber(){
Random random = new Random();
int a = 1+random.nextInt(max - 2);
String d = Integer.toString(a);
return d;
}
//随机生成运算符号
public String symbol(int flag) {
Random rand = new Random();
String str = null;
if(flag==1) {
int a = rand.nextInt(4);
if (a == 0)
str = " + ";
else if (a == 1)
str = " - ";
else if (a == 2)
str = " × ";
else if (a == 3)
str = " ÷ ";
} else{
int a = rand.nextInt(2);
if (a == 0)
str = " + ";
else if (a == 1)
str = " - ";
}
return str;
}
public String formula(){
boolean flag=true;
String str = "";
String str1="";
int t;
Random rand = new Random();
t = rand.nextInt(3) + 2;
String[] number = new String[t];//存放数字
String[] symbol = new String[t-1];//存放运算符号
String[] total = new String[4*t-3];//存放式子
String[] total1 = new String[4*t-3];
for(int i = 0;i < t;i++) {
int a=(int)(Math.random()*2);
if(a==0){
number[i] = IntNumber();
}else
number[i]=FraNumber();
}
for(int i = 0;i < t-1;i++) {
symbol[i] = symbol(1);
if(i>0) {
if (symbol[i - 1] == (" + ") | symbol[i - 1] == (" - ")) {
symbol[i] = symbol(2);
}
}
}
for(int i = 0,j=0;j<t;j++) {
total[i] = number[j];
i+=2;
}
for(int i = 1,j=0;j<t-1;j++) {
total[i] = symbol[j];
i+=2;
}
for(int i = 0;i < 2*t-1;i++) {
str = str + total[i];
}
return str;
}
/*public static void main(String[] args) {
GenerNum g=new GenerNum();
System.out.println(g.formula());
}*/
}
随机生成分子分母,以及分数前面的系数,因为要求不能存在假分数,所以我们考虑了这一步骤,然后随机生成的符号以及符号个数。
测试运行
运行结果
- -n 10 -r 10
题目
答案
评分
- -n 10000 -r 10
题目
答案
评分
项目小结
四则运算的方法编写,在当时我们都遇到了比较大的问题,不过我们的基本思路还是按照生成随机数来控制生成的数字以及符号和符号个数。因为第一次结对编程,合作的过程中因为国庆的假期也导致了交流的中断而进度无法跟进的问题,后来发现这些问题其实都可以通过协商来解决。但等到我们放假回校后,这些问题也解决了,因为都是在一个宿舍里面。邹尊业在遇到问题时候能够直接提出来,给我们一起去解决。游宇权平时能够发现一些细节的问题,有利于问题的解决。总而言之,这次结对编程的感受还是很不戳滴。