第一次作业——四则运算改进 第一次作业——四则运算

第一次作业——四则运算

GitHub 链接 https://github.com/wangzn32/-


PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

20

10

· Estimate

· 估计这个任务需要多少时间

20

10

Development

开发

120

300

· Analysis

· 需求分析 (包括学习新技术)

60

30

· Design Spec

· 生成设计文档

30

40

· Design Review

· 设计复审 (和同事审核设计文档)

20

20

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

20

· Design

· 具体设计

30

90

· Coding

· 具体编码

120

300

· Code Review

· 代码复审

30

40

· Test

· 测试(自我测试,修改代码,提交修改)

120

150

Reporting

报告

120

180

· Test Report

· 测试报告+博客

180

240

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

60

60

合计

970

1490

 

 

 

 

 

 

 

 

 

 

 

项目要求

1.能自动生成小学四则运算。

2.题目或者结果必须都是正数。

3.除了正数之外还要支持真分数。

解题思路

1.先能随机产生一些四则运算的题目。

2.要能支持真分数和整数。

3.算式的结果要是正数。

4.要能支持用户输入结果并且判断结果的对错。

拿到这个题目我先在网上找例子,百度等等平台上,然后学习他们的解决方法、思路,尝试理解他们写的东西

代码实现

 1 package four;
 2 
 3 import java.util.Random;
 4 import java.util.Scanner;
 5 
 6 import javax.script.ScriptEngine;
 7 import javax.script.ScriptEngineManager;
 8 import javax.script.ScriptException;
 9 
10 public class tex{
11     public static void main(String[] args) {
12         IntFourArithmeticOperations1(10, 10);
13     }
14     @SuppressWarnings("resource")
15     public static void IntFourArithmeticOperations1(int number, int bound) {
16         Random random = new Random();
17         boolean tf = false;
18         Scanner sc = new Scanner(System.in);
19         String [] StrArray = {"+", "×", "-", "÷", "/"};
20         String Str1 = new String();
21         ScriptEngineManager manager = new ScriptEngineManager();
22         ScriptEngine engine = manager.getEngineByName("js");
23         for(int i = 0; i < number; i++) {
24             int n = random.nextInt(4)+1;
25             int [] num = new int[n+1];
26             String Str = new String();
27             for(int k = 0; k <= n; k++) {
28                 num[k] = random.nextInt(bound)+1;
29             }
30             for(int j = 0; j < n; j++) {
31                 if(n == 1) {
32                     Str1 = StrArray[random.nextInt(4)];
33                 }else if(Str.endsWith("/") || Str.endsWith("÷")){
34                     Str1 = StrArray[random.nextInt(3)];
35                 }else{
36                     Str1 = StrArray[random.nextInt(5)];
37                     if(Str1.equals("/")) {
38                           while(num[j] == num[j+1]) { 
39                               num[j+1] = random.nextInt(bound);
40                           }
41                         int temp = Math.max(num[j], num[j+1]);
42                         num[j] = Math.min(num[j], num[j+1]);
43                         num[j+1] = temp;
44                     }
45                 }
46                 Str = Str + String.valueOf(num[j]) + Str1;
47             }
48             Str = Str + num[n];
49             try {
50                 String s1 = Str.replace('÷', '/');
51                 String s2 = s1.replace('×', '*');
52                 Object obj = engine.eval(s2);
53                 while( obj.toString().contains("-")) {
54                     s2 = Str.replaceAll("-", StrArray[random.nextInt(3)]);
55                     Str = s2;
56                     s2 = s2.replace('×', '*');
57                     s2 = s2.replace('÷', '/');
58                     obj = engine.eval(s2);
59                 }
60 
61                 System.out.print(Str + "=");
62 
63                 String obj1 = sc.next();
64                 Object obj2 = engine.eval(obj1);
65                 if(obj.equals(obj2)) {
66                 tf = true;
67                 System.out.println(tf);
68                 }else {
69                     tf = false;
70                     if(Double.valueOf(obj.toString()) % 1 != 0) {
71                         System.out.println(tf + "   正确答案是:"+obj);
72                     }else {
73                         double f1 = Double.valueOf(obj.toString());
74                         int f2 = (int)f1;
75                         System.out.println(tf + "   正确答案是:"+f2);
76                     }
77                 }
78             } catch (ScriptException e) {
79                 e.printStackTrace();
80             }
81         }
82     }
83 }

运行结果

 

性能分析

1.随机生成100万个四则运算式子(数字范围是1-10

运行结果     

 

                           用时7.513秒 

 2.生成10万个算式自动生成答案并且判断True/False

运行结果 

                    用时52.386

 

总结与分析

 

这是我第一次写这样的作业,这次的作业对我来说有些困难,因为以前我并没有这样的经验,也没有对一门语言有很深的认识,所以这次的任务对我来说找资料的时间占了很多。我在找资料的时候学到了很多东西。在自己动手的时候,尽管遇到很多困难,很多错误,还是很耐心得去找解决的方案。综上,我觉得自己在这次作业中收获良多。

GitHub 链接 https://github.com/wangzn32/-


PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

20

10

· Estimate

· 估计这个任务需要多少时间

20

10

Development

开发

120

300

· Analysis

· 需求分析 (包括学习新技术)

60

30

· Design Spec

· 生成设计文档

30

40

· Design Review

· 设计复审 (和同事审核设计文档)

20

20

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

20

· Design

· 具体设计

30

90

· Coding

· 具体编码

120

300

· Code Review

· 代码复审

30

40

· Test

· 测试(自我测试,修改代码,提交修改)

120

150

Reporting

报告

120

180

· Test Report

· 测试报告+博客

180

240

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

60

60

合计

970

1490

 

 

 

 

 

 

 

 

 

 

 

项目要求

1.能自动生成小学四则运算。

2.题目或者结果必须都是正数。

3.除了正数之外还要支持真分数。

解题思路

1.先能随机产生一些四则运算的题目。

2.要能支持真分数和整数。

3.算式的结果要是正数。

4.要能支持用户输入结果并且判断结果的对错。

拿到这个题目我先在网上找例子,百度等等平台上,然后学习他们的解决方法、思路,尝试理解他们写的东西

代码实现

 1 package four;
 2 
 3 import java.util.Random;
 4 import java.util.Scanner;
 5 
 6 import javax.script.ScriptEngine;
 7 import javax.script.ScriptEngineManager;
 8 import javax.script.ScriptException;
 9 
10 public class tex{
11     public static void main(String[] args) {
12         IntFourArithmeticOperations1(10, 10);
13     }
14     @SuppressWarnings("resource")
15     public static void IntFourArithmeticOperations1(int number, int bound) {
16         Random random = new Random();
17         boolean tf = false;
18         Scanner sc = new Scanner(System.in);
19         String [] StrArray = {"+", "×", "-", "÷", "/"};
20         String Str1 = new String();
21         ScriptEngineManager manager = new ScriptEngineManager();
22         ScriptEngine engine = manager.getEngineByName("js");
23         for(int i = 0; i < number; i++) {
24             int n = random.nextInt(4)+1;
25             int [] num = new int[n+1];
26             String Str = new String();
27             for(int k = 0; k <= n; k++) {
28                 num[k] = random.nextInt(bound)+1;
29             }
30             for(int j = 0; j < n; j++) {
31                 if(n == 1) {
32                     Str1 = StrArray[random.nextInt(4)];
33                 }else if(Str.endsWith("/") || Str.endsWith("÷")){
34                     Str1 = StrArray[random.nextInt(3)];
35                 }else{
36                     Str1 = StrArray[random.nextInt(5)];
37                     if(Str1.equals("/")) {
38                           while(num[j] == num[j+1]) { 
39                               num[j+1] = random.nextInt(bound);
40                           }
41                         int temp = Math.max(num[j], num[j+1]);
42                         num[j] = Math.min(num[j], num[j+1]);
43                         num[j+1] = temp;
44                     }
45                 }
46                 Str = Str + String.valueOf(num[j]) + Str1;
47             }
48             Str = Str + num[n];
49             try {
50                 String s1 = Str.replace('÷', '/');
51                 String s2 = s1.replace('×', '*');
52                 Object obj = engine.eval(s2);
53                 while( obj.toString().contains("-")) {
54                     s2 = Str.replaceAll("-", StrArray[random.nextInt(3)]);
55                     Str = s2;
56                     s2 = s2.replace('×', '*');
57                     s2 = s2.replace('÷', '/');
58                     obj = engine.eval(s2);
59                 }
60 
61                 System.out.print(Str + "=");
62 
63                 String obj1 = sc.next();
64                 Object obj2 = engine.eval(obj1);
65                 if(obj.equals(obj2)) {
66                 tf = true;
67                 System.out.println(tf);
68                 }else {
69                     tf = false;
70                     if(Double.valueOf(obj.toString()) % 1 != 0) {
71                         System.out.println(tf + "   正确答案是:"+obj);
72                     }else {
73                         double f1 = Double.valueOf(obj.toString());
74                         int f2 = (int)f1;
75                         System.out.println(tf + "   正确答案是:"+f2);
76                     }
77                 }
78             } catch (ScriptException e) {
79                 e.printStackTrace();
80             }
81         }
82     }
83 }

运行结果

 

性能分析

1.随机生成100万个四则运算式子(数字范围是1-10

运行结果     

 

                           用时7.513秒 

 2.生成10万个算式自动生成答案并且判断True/False

运行结果 

                    用时52.386

 

总结与分析

 

这是我第一次写这样的作业,这次的作业对我来说有些困难,因为以前我并没有这样的经验,也没有对一门语言有很深的认识,所以这次的任务对我来说找资料的时间占了很多。我在找资料的时候学到了很多东西。在自己动手的时候,尽管遇到很多困难,很多错误,还是很耐心得去找解决的方案。综上,我觉得自己在这次作业中收获良多。

猜你喜欢

转载自www.cnblogs.com/wzn-32/p/10635918.html