Github项目链接:https://github.com/shoulder01/Fouroperation.git
一、项目相关要求
1. 使用 -n 参数控制生成题目的个数(实现)
2.使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围(实现)
3.生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2(实现)
4.生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数(未实现)
5.每道题目中出现的运算符个数不超过3个。(实现)
6. 程序一次运行生成的题目不能重复(未实现)
7.在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件(未实现)
8. 程序应能支持一万道题目的生成。(实现)
9. 程序支持对给定的题目文件和答案文件(未实现),判定答案中的对错并进行数量统计(实现)
二、PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
60 |
40 |
· Estimate |
· 估计这个任务需要多少时间 |
1440 |
1520 |
Development |
开发 |
1250 |
1330 |
· Analysis |
· 需求分析 (包括学习新技术) |
90 |
60 |
· Design Spec |
· 生成设计文档 |
100 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 |
40 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
20 |
· Design |
· 具体设计 |
60 |
60 |
· Coding |
· 具体编码 |
500 |
500 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
250 |
300 |
Reporting |
报告 |
90 |
90 |
· Test Report |
· 测试报告 |
50 |
50 |
· Size Measurement |
· 计算工作量 |
30 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
90 |
90 |
合计 |
|
1400 |
1460 |
三、代码
import java.util.Scanner; public class Fouroperation{ private static Scanner scanner; public static void main(String[] args) { int x,y,i,a1,q,d1=0; int rigthN=0,wrongN=0; String g = null; String d = null; System.out.println("请选择式子类型:1、整数,2、分数"); scanner=new Scanner(System.in); a1=scanner.nextInt(); if(a1==1){ //整数运算 System.out.println("请输入题目的数量:"); scanner=new Scanner(System.in); x=scanner.nextInt(); int rigthanswer[]=new int [x]; int youranswer[]=new int [x]; System.out.println("请输入数值的最大范围:"); y=scanner.nextInt(); for(i=0;i){ int a=(int)(Math.random()*y);//随机生成一个整数 int b=(int)(Math.random()*y);//随机生成一个整数 int c=(int)(Math.random()*3);//随机生成一个0-3的整数,生成运算符 if(c==0) {//加法 d1=a+b; System.out.print(a+"+"+b+"="); } if(c==1) {//减法 if(a>=b){ d1=a-b; System.out.print(a+"-"+b+"="); }else {d1=b-a; System.out.print(b+"-"+a+"="); } } if(c==2) {//乘法 d1=a*b; System.out.print(a+"*"+b+"="); } if(c==3) {//除法 d1=a/b; System.out.print(a+"/"+b+"="); } System.out.println("请输入你的答案:"); q=scanner.nextInt(); youranswer[i]=q; rigthanswer[i]=d1; } System.out.print("\n"); System.out.println("显示答案请输:1"); if(scanner.nextInt()==1){ System.out.println("正确答案:\n"); for(i=0;i ){ System.out.print(rigthanswer[i]); System.out.println("\t"); if(youranswer[i]==rigthanswer[i]){ rigthN++; }else{ wrongN++; } } System.out.print("答对"+rigthN+"题"); System.out.print("答错"+wrongN+"题"); } } if(a1==2){ //分数运算 int M,Z; int x1,x2,B,m1,m2; System.out.println("请输入题目的数量: "); scanner=new Scanner(System.in); x=scanner.nextInt(); String rigthanswer[]=new String [x]; //正确答案数组 String youranswer[]=new String [x]; //做答答案数组 System.out.println("请输入分母数值的最大范围: "); B=scanner.nextInt(); for(i=0;i ){ m1=1+(int)(Math.random()*B);//随机生成一个分母 x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子 m2=1+(int)(Math.random()*B);//随机生成一个分母 x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子 int c=(int)(Math.random()*3);//随机生成一个0-3的整数生成运算符 if(c==0){ //加法 Z=x1*m2+x2*m1; M=m1*m2; d=simplification(Z,M); System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"="); } if(c==1){ //减法 Z=x1*m2-x2*m1; M=m1*m2; d=simplification(Z,M); System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"="); } if(c==2){ //乘法 Z=x1*x2; M=m1*m2; d=simplification(Z,M); System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"="); } if(c==3){ //除法 Z=m1*x2; M=m2*x1; d=simplification(Z,M); System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"="); } System.out.println("请输入你的答案:"); g=scanner.next(); youranswer[i]=g;//输进自己的答案装到数组中 rigthanswer[i]=d;//将正确答案装到数组中 } System.out.print("\n"); System.out.println("显示答案请输入:1"); if(scanner.nextInt()==1){ for(i=0;i ){ System.out.print(rigthanswer[i]); System.out.println("\t"); if(youranswer[i]==rigthanswer[i]){ rigthN++;//计算做对的题目 }else{ wrongN++;//计算做错的题目 } } System.out.print("答对"+rigthN+"题"); System.out.print("答错"+wrongN+"题"); } } } public static String simplification(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"; } if(z==m){//分子分母相同情况直接输出整数 return ""+z; } return ""+z+"/"+m;//若分子分母不同,则输出分数形式 } }
四、运行结果
五、总结
这次任务要求是两个人完成,但由于自己基础较差,所以就自己一个人尝试完成。
这次任务有很多功能没有实现,只是实现了一些基本的功能,但这些功能都没有很完善。
在做这个任务的过程中,也是在慢慢捡起学过的java知识,虽然还是没有很大的进步,但还是有一些收获。以后还是会继续努力。