• 201571030301 四则运算


    1.需求分析

    • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
    • 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
    • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息,文件目录与程序目录一致。
    • 当程序接收的参数为4时,以下为输出文件示例

                                                                       

    2.设计实现

       运用随机数,输出结果。

    3.功能设计

    输入一个数字n,自动生成学号和n道四则运算题。

    4.核心代码

     

      1 import java.util.HashMap;  
      2 import java.util.Stack;    
      3 public class ArithmeticResult {  
      4     public Double Result(String formula) {  
      5         Stack<Double> s1 = new Stack<Double>();
      6         Stack<String> s2 = new Stack<String>();
      7         HashMap<String, Integer> hashMap = new HashMap<String, Integer>();  
      8         hashMap.put("(", 0);  
      9         hashMap.put("+", 1);  
     10         hashMap.put("-", 1);  
     11         hashMap.put("*", 2);  
     12         hashMap.put("/", 2);  
     13         for (int i = 0; i < formula.length();) {  
     14             StringBuffer digit = new StringBuffer();  
     15             char c = formula.charAt(i);  
     16             while (Character.isDigit(c) || c == '.') {  
     17                 digit.append(c);  
     18                 i++;  
     19                 c = formula.charAt(i);  
     20             }  
     21             if (digit.length() == 0) {  
     22                 switch (c) {  
     23                 case '(': {  
     24                     s2.push(String.valueOf(c));  
     25                     break;  
     26                 }  
     27                 case ')': {  
     28                     String stmp = s2.pop();  
     29                     while (!s2.isEmpty() && !stmp.equals("(")) {  
     30                         double a = s1.pop();  
     31                         double b = s1.pop();  
     32                         double sresulat = calcDouble(b, a, stmp);  
     33                         s1.push(sresulat);  
     34                         stmp = s2.pop();  
     35                     }  
     36                     break;  
     37                 }  
     38                 case '=': {  
     39                     String stmp;  
     40                     while (!s2.isEmpty()) {  
     41                         stmp = s2.pop();  
     42                         double a = s1.pop();  
     43                         double b = s1.pop();  
     44                         double sresulat = calcDouble(b, a, stmp);  
     45                         s1.push(sresulat);  
     46                     }  
     47                     break;  
     48                 }  
     49                 default: {  
     50                     String stmp;  
     51                     while (!s2.isEmpty()) {  
     52                         stmp = s2.pop();  
     53                         if (hashMap.get(stmp) >= hashMap.get(String.valueOf(c))) {  
     54                             double a = s1.pop();  
     55                             double b = s1.pop();  
     56                             double sresulat = calcDouble(b, a, stmp);  
     57                             s1.push(sresulat);  
     58   
     59                         } else {  
     60                             s2.push(stmp);  
     61                             break;  
     62                         }  
     63   
     64                     }  
     65                     s2.push(String.valueOf(c));  
     66                     break;  
     67                 }  
     68                 }  
     69             } else {  
     70                 s1.push(Double.valueOf(digit.toString()));  
     71                 continue;  
     72             }  
     73             i++;  
     74         }  
     75         return s1.peek();  
     76     }  
     77   
     78     public double calcDouble(double a, double b, String stmp) {  
     79         double res = 0f;  
     80         char s = stmp.charAt(0);  
     81         switch (s) {  
     82           case '+': {  
     83             res = a + b;  
     84             break;  
     85           }  
     86           case '-': {  
     87             res = a - b;  
     88   
     89             break;  
     90           }  
     91           case '*': {  
     92             res = a * b;  
     93             break;  
     94           }  
     95           case '/': {  
     96             res = a / b;  
     97             break;  
     98           }  
     99         }  
    100         return res;
    101     }    
    102 }  

     

     

    5.测试运行

     

     

    6.测试结果

     

     

     

    7.展示PSP

    PSP2.1

    任务内容

    计划完成需要的时间(min)

    实际完成需要的时间(min)

    Planning

    计划

    20

    3

    ·       Estimate

    ·  估计这个任务需要多少时间,并规划大致工作步骤

    20

    3

    Development

    开发

    90

    170

    ··       Analysis

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

    10

    20

    ·       Design Spec

    ·  生成设计文档

    5

    5

    ·       Design Review

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

    5

    5

    ·       Coding Standard

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

    5

    10

    ·       Design

      具体设计

    15

    20

    ·       Coding

      具体编码

    20

    100

    ·       Code Review

    ·  代码复审

    10

    6

    ·       Test

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

    20

    4

    Reporting

    报告

    10

    10

    ··       Test Report

    ·  测试报告

    6

    4

    ·       Size Measurement

      计算工作量

    2

    3

    ·       Postmortem & Process Improvement Plan

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

    2

    3

    8.总结

     本次实验是软件工程作业中的第一个实验类作业,虽然自己对Java不太掌握,但经过同学的帮助,我顺利完成了这次实验任务。发现无论开发大小程序代码,第一步必须要对开发的内容有所分析,也就是需求分析,最后通过PSP还可以发现自己在开发时的不足。

  • 相关阅读:
    数据中台实战(六):交易分析
    数据中台实战(五):自助分析平台(产品设计篇)
    数据中台实战(四):商品分析(产品设计篇)
    数据中台实战(三):用户分析(产品设计篇)
    数据中台实战(二):基于阿里OneData的数据指标管理体系
    数据中台实战(一):以B2B电商亿订为例,谈谈产品经理视角下的数据埋点
    LeetCode82. 删除排序链表中的重复元素 II
    LeetCode203. 移除链表元素
    LeetCode445. 两数相加 II
    LeetCode2. 两数相加
  • 原文地址:https://www.cnblogs.com/ahmatjan/p/8615269.html
Copyright © 2020-2023  润新知