GitHub 项目地址
https://github.com/745421831/-/tree/master
PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
20 |
· Estimate |
· 估计这个任务需要多少时间 |
10 |
10 |
Development |
开发 |
360 |
600 |
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
40 |
· Design Spec |
· 生成设计文档 |
30 |
40 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
15 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
5 |
5 |
· Design |
· 具体设计 |
40 |
80 |
· Coding |
· 具体编码 |
300 |
500 |
· Code Review |
· 代码复审 |
60 |
120 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
180 |
120 |
Reporting |
报告 |
120 |
60 |
· Test Report |
· 测试报告+博客 |
120 |
120 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 |
30 |
合计 |
|
1325 |
1770 |
项目要求
- 能自动生成小学四则运算题目
- 除了整数以外,还要支持真分数的四则运算
解题思路
- 了解四则运算的基本法则
- 利用随机函数随机生成数字以及运算符
- 用户输入答案程序需要判断答案是否正确
- 支持真分数运算
设计实现及代码说明
1、Arithmetic.java
主函数
1 package jisuanwork; 2 3 import java.util.Scanner; 4 5 public class Arithmetic { 6 public static void main(String[] args) { 7 Scanner scanner = new Scanner(System.in); 8 System.out.println("请输入产生几以内的数字:"); 9 int num = scanner.nextInt(); 10 System.out.println("请输入产生多少道题目:"); 11 int t = scanner.nextInt(); 12 Subject subject = new Subject(); 13 subject.set(num, t); 14 15 } 16 }
2、Subject.java
随机生成的四则运算表达式
1 package jisuanwork; 2 3 import java.util.Random; 4 import java.util.Scanner; 5 6 public class Subject { 7 void set (int num , int t){ 8 Random random = new Random(); 9 Scanner scanner = new Scanner(System.in); 10 JiSuan j = new JiSuan(); 11 12 String arithmetic[] = new String[t]; 13 for(int i = 0 ; i < t ; i++) { 14 int a = (int)random.nextInt(num);//分子 15 int b = (int)random.nextInt(num);//分母 16 int c = (int)random.nextInt(num);//另一个分子 17 int d = (int)random.nextInt(num);//另一个分母 18 int fuhao = random.nextInt(4);//0代表+,1代表-,2代表乘,3代表除 19 if(b!=0 && d!=0) { 20 if(fuhao==0) { 21 int fenzi = a*d + b*c; 22 int fenmu = b*d; 23 arithmetic[i] = biaodashi(a,b) + '+' + biaodashi(c,d) + '='; 24 System.out.println((i+1)+":"+arithmetic[i]); 25 j.anw(fenzi, fenmu); 26 27 } 28 if(fuhao==1 && a*d - b*c >= 0) { 29 int fenzi = a*d - b*c; 30 int fenmu = b*d; 31 arithmetic[i] = biaodashi(a,b) + '-' + biaodashi(c,d) + '='; 32 System.out.println((i+1)+":"+arithmetic[i]); 33 j.anw(fenzi, fenmu); 34 } 35 if(fuhao==1 && a*d - b*c < 0) { 36 int fenzi = b*c - a*d; 37 int fenmu = b*d; 38 arithmetic[i] = biaodashi(c, d) + '-' + biaodashi(a, b) + '='; 39 System.out.println((i+1)+":"+arithmetic[i]); 40 j.anw(fenzi, fenmu); 41 } 42 if(fuhao==2) { 43 int fenzi = a*c; 44 int fenmu = b*d; 45 arithmetic[i] = biaodashi(a, b) + '×' + biaodashi(c, d) + '='; 46 System.out.println((i+1)+":"+arithmetic[i]); 47 j.anw(fenzi, fenmu); 48 } 49 if(fuhao==3 && c!=0) { 50 int fenzi = a*d; 51 int fenmu = b*c; 52 arithmetic[i] = biaodashi(a, b) + '÷' + biaodashi(c, d) + '='; 53 System.out.println((i+1)+":"+arithmetic[i]); 54 j.anw(fenzi, fenmu); 55 } 56 if(fuhao==3 && c==0) { 57 i--; 58 } 59 } 60 else { 61 b=1; 62 d=1; 63 if(fuhao==0) { 64 int fenzi = a*d + b*c; 65 int fenmu = b*d; 66 arithmetic[i] = a + "+" +c + "="; 67 System.out.println((i+1)+":"+arithmetic[i]); 68 j.anw(fenzi, fenmu); 69 } 70 if(fuhao==1 && a*d - b*c >= 0) { 71 int fenzi = a*d - b*c; 72 int fenmu = b*d; 73 arithmetic[i] = a + "-" +c + "="; 74 System.out.println((i+1)+":"+arithmetic[i]); 75 j.anw(fenzi, fenmu); 76 } 77 if(fuhao==1 && a*d - b*c < 0) { 78 int fenzi = b*c - a*d; 79 int fenmu = b*d; 80 arithmetic[i] = c + "-" +a + "="; 81 System.out.println((i+1)+":"+arithmetic[i]); 82 j.anw(fenzi, fenmu); 83 } 84 if(fuhao==2) { 85 int fenzi = a*c ; 86 int fenmu = b*d; 87 arithmetic[i] = a + "×" +c + "="; 88 System.out.println((i+1)+":"+arithmetic[i]); 89 j.anw(fenzi, fenmu); 90 } 91 if(fuhao==3 && c!=0) { 92 int fenzi = a*d ; 93 int fenmu = b*c; 94 arithmetic[i] = a + "÷" +c + "="; 95 System.out.println((i+1)+":"+arithmetic[i]); 96 j.anw(fenzi, fenmu); 97 } 98 if(fuhao==3 && c==0) { 99 i--; 100 } 101 102 } 103 } 104 } 105 public static String biaodashi(int a,int b) {//判断假分数,并化假分数为带分数 106 if(a>=b) { 107 int c; 108 c = a/b; 109 int d; 110 d = a%b ; 111 if(d==0) 112 return c+""; 113 else 114 return a+"/"+b; 115 } 116 else { 117 return a+"/"+b; 118 } 119 } 120 }
3、JiSuan.java
计算随机生成的表达式的答案,并对用户输入的答案进行判断对错
1 package jisuanwork; 2 3 import java.util.Scanner; 4 5 public class JiSuan { 6 void anw(int fenzi,int fenmu){ 7 Scanner scanner = new Scanner(System.in); 8 9 double sum = (double)fenzi/fenmu; 10 11 String anw = scanner.nextLine(); 12 String string[] =anw.split("/"); 13 double [] result =new double[string.length]; 14 for(int i=0;i<string.length ;i++) { 15 result[i]=Double.parseDouble(string[i]); 16 } 17 double sum1 =0; 18 if(string.length == 1 ) { 19 sum1 = (int) result[0]; 20 } 21 else { 22 sum1 = result[0]/result[1]; 23 } 24 25 if(sum==sum1) 26 System.out.println("true"); 27 else { 28 System.out.println("false"); 29 System.out.println("正确答案为:"+sum); 30 } 31 32 } 33 }
测试运行
总结
这次利用JAVA实现简单的四则运算还不够完美,比如没有随机生成带括号的,没有随机生成带多个运算符的式子,由于时间原因以及个人能力有限,这些只能以后慢慢完善。同时这次的四则运算也充分的显示了自己基础薄弱,大部分学过的知识都有遗忘,所以需要好好的回去复习基础知识。