个人开发流程

四则运算练习

需求分析:编写四则运算(不能有括号和负数存在 可用符号 +-x/ )

主要代码:

 1   //首先完成最基础的加减乘除运算
 2     public static double add(double... n) {
 3         double sum = 0;
 4         for (int i = 0; i < n.length; i++) {
 5             sum += n[i];
 6         }
 7         return sum;
 8     }
 9 
10     public static double jian(double... n) {
11         double sum = n[0];
12         for (int i = 0; i < n.length - 1; i++) {
13             sum -= n[i + 1];
14         }
15         return sum;
16     }
17 
18     public static double ride(double... n) {
19         double sum = n[0];
20         for (int i = 0; i < n.length - 1; i++) {
21             sum *= n[i + 1];
22         }
23         return sum;
24     }
25 
26     public static double chu(double... n) throws jisuan_error {
27         double sum = n[0];
28         for (int i = 0; i < n.length - 1; i++) {
29             if (n[i + 1] == 0) {
30                 throw new jisuan_error("除数不能为0");
31             }
32             sum /= n[i + 1];
33         }
34         return sum;
35     }
36 自定义异常类
37 public class jisuan_error extends Exception{
38     public jisuan_error (String message) {
39         super(message);
40     }
41 }

然后进行断言测试

 1 import org.junit.Assert;
 2 import org.junit.Test;
 3 
 4 import error.jisuan_error;
 5 import gongneng.Jisuan;
 6 
 7 public class Demo {
 8     @Test
 9     public void test() throws jisuan_error {
10         Assert.assertEquals((Double) 6.0, (Double) Jisuan.add(1, 2, 3));
11         Assert.assertEquals((Double) 3.0, (Double) Jisuan.jian(8, 2, 3));
12         Assert.assertEquals((Double) 12.0, (Double) Jisuan.ride(2, 2, 3));
13         Assert.assertEquals((Double) 2.0, (Double) Jisuan.chu(8,2,2));
14 
15 
16     }
17 }

测试结果

个人开发流程

开始编写四则运算(不能有括号和负数存在 可用符号 +-x/ )

  1 当字符串为 zfc="7x8-20/10+3" 时    
  2 public static Object hunHe(String zfc) {
  3 
  4         // 获取"+-x/()"符号数量
  5         int cheng = shuLiang(zfc, 'x');
  6         int chu = shuLiang(zfc, '/');
  7         int jia = shuLiang(zfc, '+');
  8         int jian = shuLiang(zfc, '-');
  9 
 10         // 获取对应符号对应的索引数组
 11         int[] cheng_arr = indexs(zfc, 'x');
 12         int[] chu_arr = indexs(zfc, '/'); 
 13         int[] jia_arr = indexs(zfc, '+'); 
 14         int[] jian_arr = indexs(zfc, '-');
 15         int zs = cheng + chu + jia + jian;
 16         int[] zs_arr = new int[zs]; // 将几个数组中的结果都存进zs_arr数组
 17         int i = 0;
 18         for (int j = 0; i < cheng_arr.length; i++, j++) {
 19             zs_arr[i] = cheng_arr[j];
 20         }
 21 
 22         for (int j = 0; i < chu_arr.length + cheng_arr.length; i++, j++) {
 23             zs_arr[i] = chu_arr[j];
 24         }
 25 
 26         for (int j = 0; i < chu_arr.length + cheng_arr.length + jia_arr.length; i++, j++) {
 27             zs_arr[i] = jia_arr[j];
 28         }
 29 
 30         for (int j = 0; i < chu_arr.length + cheng_arr.length + jia_arr.length + jian_arr.length; i++, j++) {
 31             zs_arr[i] = jian_arr[j];
 32         }
 33         //冒泡排序zs_arr
 34         //zs_arr [1,3,6,9] 存储的为符号依次出现顺序的索引
 36         for (int j = 0; j < zs_arr.length; j++) {
 37             for (int k = 0; k < zs_arr.length - 1 - j; k++) {
 38                 if (zs_arr[k] > zs_arr[k + 1]) {
 39                     int num = zs_arr[k];
 40                     zs_arr[k] = zs_arr[k + 1];
 41                     zs_arr[k + 1] = num;
 42                 }
 43             }
 44         }
 45         //用来存储所有数值
 46         int[] num = new int[zs + 1];
 47 
 48         //用于给num数组赋值
 49         int s = 0;
 50         for (int j = 0; j < zs + 1; j++) {
 51 
 52             if (j == 0) {
 53                 num[j] = Integer.parseInt(zfc.substring(0, zs_arr[s]));
 54             } else if (j == zs) {
 55                 num[j] = Integer.parseInt(zfc.substring(zs_arr[s - 1] + 1, zfc.length()));
 56             } else {
 57                 num[j] = Integer.parseInt(zfc.substring(zs_arr[s - 1] + 1, zs_arr[s]));
 58             }
 59             s++;
 60         }
 61 
 62         //num [7,8,20,10,3] 存储各位数
 63         //list [7,x,8,-,20,/,10,+,3]
 64         List list = new ArrayList();
 65         int cishu = zs_arr.length + num.length;
 66         int a = 0;
 67         int b = 0;
 68         for (int j = 0; j < cishu; j++) {
 69             if (j % 2 != 0) {
 70                 list.add(String.valueOf(zfc.charAt(zs_arr[a])));
 71                 a++;
 72             } else {
 73                 list.add(num[b]);
 74                 b++;
 75             }
 76         }
 77 
 78         while (list.contains("x") || list.contains("/")) {
 79             for (int w = 0; w < list.size(); w++) {
 80                 if ("x".equals(list.get(w))) {
 81                     int result = (int) list.get(w - 1) * (int) list.get(w + 1);
 82                     list.set(w, result);
 83                     list.remove(w - 1);
 84                     list.remove(w);
 85                     break;
 86                 }
 87                 if ("/".equals(list.get(w))) {
 88                     int result = (int) list.get(w - 1) / (int) list.get(w + 1);
 89                     list.set(w, result);
 90                     list.remove(w - 1);
 91                     list.remove(w);
 92                     break;
 93                 }
 94             }
 95 
 96         }
 97 
 98         while (list.contains("+") || list.contains("-")) {
 99             for (int w = 0; w < list.size(); w++) {
100                 if ("+".equals(list.get(w))) {
101                     int result = (int) list.get(w - 1) + (int) list.get(w + 1);
102                     list.set(w, result);
103                     list.remove(w - 1);
104                     list.remove(w);
105                     break;
106                 }
107                 if ("-".equals(list.get(w))) {
108                     int result = (int) list.get(w - 1) - (int) list.get(w + 1);
109                     list.set(w, result);
110                     list.remove(w - 1);
111                     list.remove(w);
112                     break;
113                 }
114             }
115 
116         }
117         return list.get(0);
118     }
119 
120     /**
121      * 获取指定字符串中某字符数量
122      * 
123      * @param zfc
124      * @param zf
125      * @return
126      */
127     public static int shuLiang(String zfc, char zf) {
128         int num = 0;
129         if (zfc != null) {
130             for (int i = 0; i < zfc.length(); i++) {
131                 if (zf == (zfc.charAt(i))) {
132                     num++;
133                 }
134 
135             }
136         }
137         return num;
138 
139     }
140 
141     public static int[] indexs(String zfc, char zf) {
142         int shuLiang = shuLiang(zfc, zf);
143         int[] sz = new int[shuLiang];
144         // 为了获取四则运算符位置
145         int j = 0;
146         for (int i = 0; i < sz.length; i++) {
147             for (; j < zfc.length(); j++) {
148                 if (zf == zfc.charAt(j)) {
149                     sz[i] = j;
150                     break;
151                 }
152 
153             }
154             j++;
155         }
156         return sz;
157     }
158 
159 }

开始测试该功能

 1 import org.junit.Test;
 2 
 3 import error.jisuan_error;
 4 import gongneng.Jisuan;
 5 
 6 public class Demo {
 7     @Test
 8     public void test() throws jisuan_error {
 9 
10         Object ceshi1 = Jisuan.hunHe("7x8-20/10+3");
11         Object ceshi2 = Jisuan.hunHe("30x41-9x7+80/2");
12         System.out.println(ceshi1);
13         System.out.println(ceshi2);
14 
15     }
16 }

测试结果

个人开发流程

 

psp展示

 

PSP2.1 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
Planning 计划 48 72
· Estimate · 估计这个任务需要多少时间,并规划大致工作步骤 35 40
Development 开发  13 32
· Analysis 需求分析 (包括学习新技术)  3  8
· Design Spec · 生成设计文档  6  8
· Design Review · 设计复审 (和同事审核设计文档)  5  10
· Coding Standard 代码规范 (为目前的开发制定合适的规范)  10  20
· Design 具体设计  20  25
· Coding 具体编码 24 30
· Code Review · 代码复审  2 3
· Test · 测试(自我测试,修改代码,提交修改) 1 1
Reporting 报告  1 2
· Test Report · 测试报告 1  2
· Size Measurement 计算工作量  6  8
· Postmortem & Process Improvement Plan · 事后总结 ,并提出过程改进计划  8  10

总结:在具体编码与代码复审的阶段比较耗时间,有许多方法都忘记了,需要借助帮助文档,在后期可以增加带括号计算的功能,和负数等运算,还可以增加自动生成四则运算试子。

上一篇:5-23对象


下一篇:redis6.0.9配置ssl认证