第一次作业——四则运算

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;//随机产生四则运算符的个数(1-4)
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;//产生n+1 个随机的数
29             }
30             for(int j = 0; j < n; j++) {
31                 //如果n == 1 就不让它产生分数
32                 if(n == 1) {
33                     Str1 = StrArray[random.nextInt(4)];
34                 }else if(Str.endsWith("/") || Str.endsWith("÷")){
35                     //不让它产生除号一起的情况或者除号后面有分数的情况
36                     Str1 = StrArray[random.nextInt(3)];
37                 }else{
38                     Str1 = StrArray[random.nextInt(5)];
39                     //要求是只有真分数 所以每到分数符号做一次判断大小
40                     if(Str1.equals("/")) {
41                           while(num[j] == num[j+1]) { 
42                               num[j+1] = random.nextInt(bound);
43                           }
44                         int temp = Math.max(num[j], num[j+1]);
45                         num[j] = Math.min(num[j], num[j+1]);
46                         num[j+1] = temp;
47                     }
48                 }
49                 Str = Str + String.valueOf(num[j]) + Str1;
50             }
51             Str = Str + num[n];
52             try {
53                 String s1 = Str.replace('÷', '/');
54                 String s2 = s1.replace('×', '*');
55                 Object obj = engine.eval(s2);
56                 while( obj.toString().contains("-")) {
57                     s2 = Str.replaceAll("-", StrArray[random.nextInt(3)]);
58                     Str = s2;
59                     s2 = s2.replace('×', '*');
60                     s2 = s2.replace('÷', '/');
61                     obj = engine.eval(s2);
62                 }
63 
64                 System.out.print(Str + "=");
65 
66                 String obj1 = sc.next();
67                 Object obj2 = engine.eval(obj1);
68                 if(obj.equals(obj2)) {
69                 tf = true;
70                 System.out.println(tf);
71                 }else {
72                     tf = false;
73                     if(Double.valueOf(obj.toString()) % 1 != 0) {
74                         System.out.println(tf + "   正确答案是:"+obj);
75                     }else {
76                         double f1 = Double.valueOf(obj.toString());
77                         int f2 = (int)f1;
78                         System.out.println(tf + "   正确答案是:"+f2);
79                     }
80                 }
81             } catch (ScriptException e) {
82                 e.printStackTrace();
83             }
84         }
85     }
86 }

运行结果

 

性能分析

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

运行结果     

 

                           用时7.513秒 

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

运行结果 

                    用时52.386

 

总结与分析

 

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

 

转载于:https://www.cnblogs.com/wzn-32/p/10567932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值