20175314 结队编程项目——四则运算第一周
- 结对小组成员:20175302闫君廷 20175314薛勐
一、任务要求
1、自动生成四则运算题目(加、减、乘、除)
2、支持复合运算(支持整数、多运算符、支持真分数)
3、统计正确率或得分
4、既可以用前缀算法(波兰算法)实现加减乘除也可以用后缀算法实现
二、需求分析
1、自动生成表达式(多运算符,随机数为整数)
2、运用堆栈前缀表达式的计算机求值
3、计算自动生成的表达式的结果
4、判断用户输入的答案是否和正确答案相符
5、统计正确题目的个数
三、本周达成
- 自动生成四则运算题目(加、减、乘、除)并可控整数范围和题目数量
- 支持复合运算(支持整数、多运算符、支持真分数)
- 可以反馈题目正确与否,若错误则给出正确答案
四、代码
PracticeSystem.java
import java.util.*;
public class PracticeSystem {
public static void main(String[] args) {
int a, b, c, i, f , y, m1, m2, x1, x2;
yunsuan yunsuan =new yunsuan();
Scanner in = new Scanner(System.in);
System.out.println("欢迎使用四则运算系统");
System.out.println("请输入题目数量:");
int total = in.nextInt();
System.out.println("请输入整数范围:");
y = in.nextInt();
for (i = 0; i < total; i++) {
f = (int) (Math.random() * 2);//随机生成0或1,0是整数,1是真分数,3,4是复杂运算
if (f == 0) {
int d = 0;
int answer;
a = (int) (Math.random() * (y + 1));//随机生成一个范围内的整数
b = (int) (Math.random() * (y + 1));//随机生成一个范围内的整数
if (b == 0)
c = (int) (Math.random() * 3);//随机生成一个0-3的整数,0表示加法,1表示减法,2表示乘法,3表示除法
else
c = (int) (Math.random() * 4);
if (c == 0) {
d =yunsuan.jia(a,b);
}
if (c == 1) {
d =yunsuan.jian(a,b);
}
if (c == 2) {
d =yunsuan .cheng(a,b);
}
if (c == 3) {
d =yunsuan.chu(a,b);
}
answer = in.nextInt();
if (answer == d)
System.out.println("回答正确");
else
System.out.println("回答错误,正确答案是:" + d);
}
if (f == 1) {
String d = null;
m1 = 1 + (int) (Math.random() * y);//随机生成一个小于y的分母
x1 = 1 + (int) (Math.random() * m1);//生成一个比分母小的分子,实现真分数
m2 = 1 + (int) (Math.random() * y);//随机生成一个小于y的分母
x2 = 1 + (int) (Math.random() * m2);//生成一个比分母小的分子,实现真分数
c = (int) (Math.random() * 4);//生成运算符
if((x1/m1)<(x2/m2)&&c==1)
c--;
if (c == 0) {
d=yunsuan.fjia(m1,x1,m2,x2);
}
if (c == 1) {
d=yunsuan.fjian(m1,x1,m2,x2);
}
if (c == 2) {
d=yunsuan.fcheng(m1,x1,m2,x2);
}
if (c == 3) {
d=yunsuan.fchu(m1,x1,m2,x2);
}
String answer = in.next();
if (answer.equals(d))
System.out.println("回答正确");
else
System.out.println("回答错误,正确答案是" + d);
}
}
}
}
yunsuan.java
class yunsuan {
int jia(int a, int b){
System.out.print(a + " + " + b + " = " );
return a+b;
}
int jian(int a, int b){
System.out.print(a + " - " + b + " = " );
return a-b;
}
int cheng(int a, int b){
System.out.print(a + " * " + b + " = " );
return a*b;
}
int chu(int a, int b){
System.out.print(a + " / " + b + " = " );
return a/b;
}
String fjia(int m1,int x1,int m2,int x2){
int Z,M;
Z = x1 * m2 + x2 * m1;
M = m1 * m2;
System.out.print("("+x1 + "/" + m1 + ") + (" + x2 + "/" + m2 + ") = ");
return yuefen.yf(Z, M);
}
String fjian(int m1,int x1,int m2,int x2){
int Z,M;
Z = x1 * m2 - x2 * m1;
M = m1 * m2;
System.out.print("("+x1 + "/" + m1 + ") - (" + x2 + "/" + m2 + ") = ");
return yuefen.yf(Z,M);
}
String fcheng(int m1,int x1,int m2,int x2){
int Z,M;
Z = x1 * x2;
M = m1 * m2;
System.out.print("("+x1 + "/" + m1 + ") * (" + x2 + "/" + m2 + ") =");
return yuefen.yf(Z, M);
}
String fchu(int m1,int x1,int m2,int x2){
int Z,M;
Z = m2 * x1;
M = m1 * x2;
System.out.print("("+x1 + "/" + m1 + ") / (" + x2 + "/" + m2 + ") = ");
return yuefen.yf(Z, M);
}
}
yuefen.java
class yuefen {
static String yf(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;
}
}
五、码云链接
六、UML类图
七、测试结果
简单题目测试结果正常:
分数运算结果和答案格式不同导致错误(测试异常):
复合运算测试结果暂且正常:
八、遇到的问题
分数运算结果和答案格式不同导致错误:(1/1)+(1/1)=2/1=2,但是程序并不能够区别识别不同的表达形式,我们打算在下一周认真分析解决这个问题并加以总结。
九、心得体会
本次结对项目任务与我们大一上学习的程序设计基础实验一类似,所以在算法设计逻辑上没有遇到困难,但也因为本周我和队友其他事情较多(本周有四科的实验),第一周阶段性的结对项目完成的较为粗糙,但是一个完整的四则运算计算器系统已初具模型,并且这次宝贵的机会给了我们做一个较大程序的体验,与课本上测试题不同,与实验也不尽相同,作为一个系统项目开发,我们需要考虑地更面面俱到,而且即使在编程之前尽我们所能做出完善,也还是会在测试的时候遇到意想不到的问题,通过在网上查找我们也发现了很多我们程序的不足之处,需要不断的学习和完善才能使一个简单的系统趋于完美,比如说前缀表达式的计算机求值,这是我们之前没有遇见过的。因为本周的不足,我们已规划好了在下一阶段的目标,除了完成老师的要求,受启发于Example2_1的例题,我们还打算在我们的四则运算系统程序里加入语言包的功能,这会是一次大胆的尝试也是对未来编程学习的基础。
十、Personal Software Process时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 30 | 12.5% |
设计 | 30 | 12.5% |
代码实现 | 120 | 50% |
测试 | 30 | 12.5% |
分析总结 | 30 | 12.5% |
十一、结对学习照片
十二、点评伙伴
本次我的队友对小组做出了很大的贡献,我们一起商量一起操作,互相交流程序实现的方法。配合比较顺利,感觉还是挺好的,渐渐能够发现结对学习的优越性:能够互相监督,而且每个人都有自己的优势,在一起工作的时候互相取长补短,对每个人的成长也有很大的帮助。下周我们小组将继续挑战自己!