四则运算 测试与封装 5.1

一、我们这次的代码是在Eclipse的环境下写的

二、功能

1.把计算的功能封装成类。

2.设计测试用例:用白盒与黑盒测试设计技术,为计算核心设计测试用例。

3.在实验环境中运行测试用例,分析测试结果,找出程序问题,给出改进前后的代码对照。

三、我的结伴队友是48詹泽娟 博客地址http://www.cnblogs.com/ZeJuan/

四、在这个结对任务中,我的小伙伴负责写白盒,我负责写黑盒。我负责封装测试,小伙伴负责弄测试的环境

计算功能封装如下:

 1 package text;
 2 
 3 import java.math.BigDecimal;
 4 public class YunsuanText
 5 {
 6     int i,a,b,c,num,s=1;
 7     float d,d1;
 8 public int addjia(int num,int a,int b){
 9          if (num == 0) {
10              if (a < 0 && b < 0) {
11                 System.out.println("(" + a + ")" + "+(" + b + ")=");
12              } else if (a < 0 && b > 0) {
13                  System.out.println("(" + a + ")" + "+" + b + "=");
14              } else if (a > 0 && b < 0) {
15                  System.out.println(a + "+(" + b + ")=");
16              } else {
17                  System.out.println(a + "+" + b + "=");
18              }
19              c = a + b;
20          }
21          return c;
22     }
23 public int addjian(int num,int a,int b){
24     if (num == 1) {
25              if (a < 0 && b < 0) {
26                  System.out.println("(" + a + ")" + "-(" + b + ")=");
27 
28              } else if (a < 0 && b > 0) {
29                  System.out.println("(" + a + ")" + "-" + b + "=");
30              } else if (a > 0 && b < 0) {
31                  System.out.println(a + "-(" + b + ")=");
32              } else {
33                  System.out.println(a + "-" + b + "=");
34              }
35              c = a - b;
36     }
37     return c;
38     }
39 public int addcheng(int num,int a,int b){
40     if (num == 2) {
41              if (a < 0 && b < 0) {
42                  System.out.println("(" + a + ")" + "*(" + b + ")=");
43 
44              } else if (a < 0 && b > 0) {
45                  System.out.println("(" + a + ")" + "*" + b + "=");
46 
47              } else if (a > 0 && b < 0) {
48                  System.out.println(a + "*(" + b + ")=");
49 
50              } else {
51                  System.out.println(a + "*" + b + "=");
52 
53              }
54              c = a * b;
55          }
56     return c;
57 }
58 public float addchu(int num,int a,int b){
59         if (num == 3&&b!=0) {
60              if (a < 0 && b < 0) {
61                  System.out.println("(" + a + ")" + "/(" + b + ")=");
62 
63              } else if (a < 0 && b > 0) {
64                  System.out.println("(" + a + ")" + "/" + b + "=");
65              } else if (a > 0 && b < 0) {
66                  System.out.println(a + "/(" + b + ")=");
67              } else {
68                  System.out.println(a + "/" + b + "=");
69              }
70              d= (float)a/(float)b;
71              BigDecimal bg = new BigDecimal(d);
72              d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
73          }
74         return d1;
75 }
76 public int addjiecheng(int num,int a)
77 {
78     if(num==4)
79     {
80     System.out.println(a+"!=");
81     int i;
82     if(a==0||a==1)
83     {
84         s=1;
85     }
86     else
87     {
88     
89     for(i=1;i<=a;i++)//计算阶乘
90     {
91         s=s*i;
92     }
93     }
94     }
95     return s;
96 }
97 }

测试如下:

 1 package text;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import org.junit.Before;
 6 import org.junit.Test;
 7 
 8 public class YunsuanTextTest {
 9 
10     @Before
11     public void setUp() throws Exception {
12     }
13 
14     @Test
15     public void testAddjia() {
16         int z=new YunsuanText().addjia(0, 2, 5);
17         assertEquals(7,z);
18     }
19 
20     @Test
21     public void testAddjian() {
22         int z=new YunsuanText().addjian(1,5,2);
23         assertEquals(3,z);
24     }
25 
26     @Test
27     public void testAddcheng() {
28         int z=new YunsuanText().addcheng(2, 2, 5);
29         assertEquals(10,z);
30     }
31 
32     @Test
33     public void testAddchu() {
34         float z=new YunsuanText().addchu(3, 2, 5);
35         String str=String.valueOf(z);
36         String str1=String.valueOf(0.4);
37         assertEquals(str1,str);
38     }
39 
40     @Test
41     public void testAddjiecheng() {
42         int z=new YunsuanText().addjiecheng(4,5);
43         assertEquals(120,z);
44     }
45 
46 }

测试运行的结果如下:

白盒如下:

 

黑盒如下:

输入用户名或密码不正确时提示错误

输入个数时输入非法字符会提示错误

输入答案时输入非法字符会提示错误

题目不能超过五个,也不能输入负数

改进前的代码如下(输入非法字符会出错,正确代码在下面一条哦):

  1 import java.awt.*;
  2   2 import java.awt.event.*;
  3   3 import javax.swing.*;
  4   4 public class Size {
  5   5     public static void main(String[] args) {
  6   6         new Frame();
  7   7         
  8   8 }
  9   9 }
 10  10 import javax.swing.*;
 11  11 
 12  12 import java.awt.event.*;
 13  13 import java.math.BigDecimal;
 14  14 import java.text.DecimalFormat;
 15  15 import java.text.NumberFormat;
 16  16 
 17  17 class Frame extends JFrame implements ActionListener
 18  18 {
 19  19     int a, b, c, count, num;//a,b分别是第一个操作数,第二个操作数,c是存放用户输入的答案,count是题目总数,num是用于存放代表运算符的数
 20  20     int t=0,f=0,sum=0,s=1;//s表示阶乘结果
 21  21     float d,d1;//d是用于存放除法结果,d1是用于处理除法结果中保留小数点后两位
 22  22     int counter=0;//统计答题个数
 23  23     Timer time;
 24  24     int t1 = 0;
 25  25     JTextField T;//定义一个文本
 26  26     JLabel L1 = new JLabel("请输入题目个数(1-5):");  
 27  27     JTextField T1 = new JTextField(5);   //放题目个数
 28  28     JButton B3 = new JButton("开始");
 29  29     JTextField T2 = new JTextField(10);  //设置运算式
 30  30     JTextField T3 = new JTextField(10);  //获取输入答案
 31  31     JTextField T4 = new JTextField(10);//存放答案提示
 32  32     JButton B1 = new JButton("确定");
 33  33     JButton B2 = new JButton("下一题");
 34  34 
 35  35     Frame() {
 36  36         T=new JTextField(10);//计时
 37  37         T.setEditable(false);
 38  38         time = new Timer(1000, this);
 39  39         time.start();
 40  40         T.setText(setTime(t1));
 41  41         this.setTitle("四则运算");
 42  42         this.setSize(280, 200);
 43  43         this.setVisible(true);
 44  44         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 45  45         JPanel p2 = new JPanel();
 46  46         JPanel p1 = new JPanel();
 47  47         p2.add(L1);
 48  48         p2.add(T1);
 49  49         p2.add(B3);
 50  50         p2.add(T2);
 51  51         p2.add(T3);
 52  52         p2.add(T4);
 53  53         p2.add(T);
 54  54         p1.add(B1);
 55  55         p1.add(B2);
 56  56         add(p2, "Center");
 57  57         add(p1, "South");
 58  58         
 59  59         B3.addActionListener(new ActionListener() {           //按钮B3表示开始
 60  60             public void actionPerformed(ActionEvent e) {
 61  61                 boolean flag=false;
 62  62                 Object bj = e.getSource(); // 获得事件源
 63  63                 if (bj == B3) {
 64  64                     try{  //如果输入字符,抛出异常,提示错误
 65  65                     count = Integer.parseInt(T1.getText());  //将文本中获取的字符串转换为整型
 66  66                     }
 67  67                     catch(Exception f)
 68  68                     {
 69  69                         flag=true;
 70  70                     }
 71  71                     if(flag)
 72  72                     {
 73  73                         JOptionPane.showMessageDialog(null,"输入有误,请输入数字!");
 74  74                     }
 75  75                     if(count>5)
 76  76                     {
 77  77                         JOptionPane.showMessageDialog(null, "题目个数不能超过五个!请重新输入。");
 78  78                     }
 79  79                     if(count<=5)
 80  80                     {
 81  81                     num = (int) (Math.random() * 5);
 82  82                     a = (int) (Math.random() * 200) - 100;
 83  83                     b = (int) (Math.random() * 200) - 100;
 84  84                     if (num == 0)//num为0时,是加法运算
 85  85                     {
 86  86                         if (a < 0 && b < 0)       //判断a,b的正负并给负数加括号
 87  87                         {
 88  88                             T2.setText("(" + a + ")" + "+(" + b + ")=");
 89  89                         } 
 90  90                         else if (a < 0 && b > 0)
 91  91                         {
 92  92                             T2.setText("(" + a + ")" + "+" + b + "=");
 93  93                         } 
 94  94                         else if (a > 0 && b < 0)
 95  95                         {
 96  96                             T2.setText(a + "+(" + b + ")=");
 97  97                         } 
 98  98                         else
 99  99                         {
100 100                             T2.setText(a + "+" + b + "=");
101 101                         }
102 102                         c = a + b;
103 103                                               //处理按钮监听事件
104 104                         
105 105                     } else if (num == 1)  //num为1表示减法运算
106 106                     {
107 107                         if (a < 0 && b < 0)
108 108                         {
109 109                             T2.setText("(" + a + ")" + "-(" + b + ")=");
110 110                         } 
111 111                         else if (a < 0 && b > 0)
112 112                         {
113 113                             T2.setText("(" + a + ")" + "-" + b + "=");
114 114                         } 
115 115                         else if (a > 0 && b < 0) 
116 116                         {
117 117                             T2.setText(a + "-(" + b + ")=");
118 118                         }
119 119                         else 
120 120                         {
121 121                             T2.setText(a + "-" + b + "=");
122 122                         }
123 123                         c = a - b;
124 124                         
125 125                     } else if (num == 2) {   //num为2表示乘法运算
126 126                         if (a < 0 && b < 0) {
127 127                             T2.setText("(" + a + ")" + "*(" + b + ")=");
128 128 
129 129                         } else if (a < 0 && b > 0) {
130 130                             T2.setText("(" + a + ")" + "*" + b + "=");
131 131 
132 132                         } else if (a > 0 && b < 0) {
133 133                             T2.setText(a + "*(" + b + ")=");
134 134 
135 135                         } else {
136 136                             T2.setText(a + "*" + b + "=");
137 137 
138 138                         }
139 139                         c = a * b;
140 140                     }
141 141                      else if (num == 3&&b!=0) {   //num为3表示除法运算,并且要考虑除数不能为0的情况,因此b!=0
142 142                             if (a < 0 && b< 0) {
143 143                                 T2.setText("(" + a + ")" + "/(" + b + ")=");
144 144 
145 145                             } else if (a < 0 && b > 0) {
146 146                                 T2.setText("(" + a + ")" + "/" + b + "=");
147 147 
148 148                             } else if (a > 0 && b< 0) {
149 149                                 T2.setText(a + "/(" + b + ")=");
150 150 
151 151                             } else {
152 152                                 T2.setText(a + "/" + b + "=");
153 153 
154 154                             }
155 155                             d= (float)a/(float)b;  //将整型a,b强制转换为浮点型,保证结果正确
156 156                             BigDecimal bg = new BigDecimal(d);   //将除法结果保留小数点后两位
157 157                             d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
158 158                         }
159 159                      else
160 160                      {
161 161                          a=(int)(Math.random()*10);
162 162                          T2.setText(a+"!=");
163 163                          int i;
164 164                          if(a==0||a==1)
165 165                          {
166 166                              s=1;
167 167                          }
168 168                          else
169 169                          {
170 170                          
171 171                          for(i=1;i<=a;i++)//计算阶乘
172 172                          {
173 173                              s=s*i;
174 174                          }
175 175                          }
176 176                      }
177 177 
178 178                 }
179 179             }
180 180             }
181 181         });    
182 182         B2.addActionListener(new ActionListener() {           //B2表示下一题
183 183             public void actionPerformed(ActionEvent e) {
184 184                 Object bj = e.getSource(); // 获得事件源
185 185                 if (bj == B2) {
186 186                     int a, b, num, i = 1;
187 187                     if (i < count) {   
188 188                         T3.setText(null);//当按钮按下一题时就将T3与T4的内容更新
189 189                         T4.setText(null);
190 190                         num = (int) (Math.random() * 5);
191 191                         a = (int) (Math.random() * 200) - 100;
192 192                         b = (int) (Math.random() * 200) - 100;
193 193                         i++;
194 194                         if (num == 0) {
195 195                             if (a < 0 && b < 0) {
196 196                                 T2.setText("(" + a + ")" + "+(" + b + ")=");
197 197                             } else if (a < 0 && b > 0) {
198 198                                 T2.setText("(" + a + ")" + "+" + b + "=");
199 199                             } else if (a > 0 && b < 0) {
200 200                                 T2.setText(a + "+(" + b + ")=");
201 201                             } else {
202 202                                 T2.setText(a + "+" + b + "=");
203 203                             }
204 204                             c = a + b;
205 205                         } else if (num == 1) {
206 206                             if (a < 0 && b < 0) {
207 207                                 T2.setText("(" + a + ")" + "-(" + b + ")=");
208 208 
209 209                             } else if (a < 0 && b > 0) {
210 210                                 T2.setText("(" + a + ")" + "-" + b + "=");
211 211                             } else if (a > 0 && b < 0) {
212 212                                 T2.setText(a + "-(" + b + ")=");
213 213                             } else {
214 214                                 T2.setText(a + "-" + b + "=");
215 215                             }
216 216                             c = a - b;
217 217 
218 218                         } else if (num == 2) {
219 219                             if (a < 0 && b < 0) {
220 220                                 T2.setText("(" + a + ")" + "*(" + b + ")=");
221 221 
222 222                             } else if (a < 0 && b > 0) {
223 223                                 T2.setText("(" + a + ")" + "*" + b + "=");
224 224 
225 225                             } else if (a > 0 && b < 0) {
226 226                                 T2.setText(a + "*(" + b + ")=");
227 227 
228 228                             } else {
229 229                                 T2.setText(a + "*" + b + "=");
230 230 
231 231                             }
232 232                             c = a * b;
233 233 
234 234 
235 235                         }
236 236                         else if (num == 3&&b!=0) {
237 237                             if (a < 0 && b < 0) {
238 238                                 T2.setText("(" + a + ")" + "/(" + b + ")=");
239 239 
240 240                             } else if (a < 0 && b > 0) {
241 241                                 T2.setText("(" + a + ")" + "/" + b + "=");
242 242                             } else if (a > 0 && b < 0) {
243 243                                 T2.setText(a + "/(" + b + ")=");
244 244                             } else {
245 245                                 T2.setText(a + "/" + b + "=");
246 246                             }
247 247                             d= (float)a/(float)b;
248 248                             BigDecimal bg = new BigDecimal(d);
249 249                             d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
250 250                             
251 251 
252 252                         }
253 253                         else
254 254                          {
255 255                              a=(int)(Math.random()*10);
256 256                              T2.setText(a+"!=");
257 257                              if(a==0||a==1)
258 258                              {
259 259                                  s=1;
260 260                              }
261 261                              else
262 262                              {
263 263                              
264 264                              for(i=1;i<=a;i++)//计算阶乘
265 265                              {
266 266                                  s=s*i;
267 267                              }
268 268                              }
269 269                          }
270 270                         
271 271                         counter++;
272 272                         if(counter>=count)//判断题目是否答完,答完了就弹出一个提示题目答完并给出答题时间的对话框
273 273                         {
274 274                             JOptionPane.showMessageDialog(null, "题目已答完,答对了"+t+"道题,答错了"+f+"道题

总分是"+sum+"

总用时为:"+t1+"秒");
275 275                         }
276 276                     }
277 277                 }
278 278             }
279 279         });
280 280         B1.addActionListener(new ActionListener() {        //按钮B1表示确定
281 281             public void actionPerformed(ActionEvent e) {
282 282                 Object bj = e.getSource();     // 获得事件源
283 283                 if (bj == B1) {
284 284                     if (d1== Float.parseFloat(T3.getText()) || c == Float.parseFloat(T3.getText()) || s ==Float.parseFloat(T3.getText())) {
285 285                         T4.setText("恭喜你,答对了");
286 286                         t=t+1;
287 287                         sum=sum+20;//每答对一题加20分
288 288                     } else {
289 289                         T4.setText("抱歉,你答错了");
290 290                         f=f+1;
291 291                     }
292 292                 }
293 293             }
294 294         });
295 295 
296 296     }
297 297     public void actionPerformed(ActionEvent e) {  
298 298         t1= t1 + 1;            //累加时间
299 299         T.setText(setTime(t1));
300 300         
301 301     }
302 302     public String setTime(int t1) {//累加时间
303 303         int hour, minute, second, a;
304 304         String mytimer, strsec, strmin, strhour;
305 305         t1=t1 % (60 * 60 * 24);
306 306         second = t1 % 60;
307 307         a = t1/ 60;
308 308         minute = a % 60;
309 309 
310 310         hour = a / 60;
311 311         if (second <= 9) {
312 312             strsec = "0" + String.valueOf(second);
313 313         } else {
314 314             strsec = String.valueOf(second);
315 315         }
316 316         if (minute <= 9) {
317 317             strmin = "0" + String.valueOf(minute);
318 318         } else {
319 319             strmin = String.valueOf(minute);
320 320         }
321 321         if (hour <= 9) {
322 322             strhour = "0" + String.valueOf(hour);
323 323         } else {
324 324             strhour = String.valueOf(hour);
325 325         }
326 326         mytimer = "计时: " + strhour + ":" + strmin + ":" + strsec;
327 327         return mytimer;
328 328     }
329 329 
330 330 
331 331 }

改进后的代码如下:

  1 //Size类
  2 import java.awt.*;
  3 import java.awt.event.*;
  4 import javax.swing.*;
  5 public class Size {
  6     public static void main(String[] args) {
  7         new Login();
  8         
  9 }
 10 }
 11 
 12 //Login类
 13 import java.awt.*;
 14 import java.awt.event.*;
 15 import javax.swing.*;
 16 import javax.swing.border.*;
 17 public class Login extends JFrame implements ActionListener{
 18     JTextField f1;
 19     JTextField f2;
 20     JButton b1;
 21     JButton b2;
 22     JPanel p5;
 23     Image img = Toolkit.getDefaultToolkit().getImage("1.jpg");
 24     Login(){
 25         this.setTitle("四则运算的系统登录");
 26         this.setSize(360,250);
 27         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 28         Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();//截取屏幕大小
 29         this.setLocation(screensize.width/2-400/2, screensize.height/2-400/2);//居中计算
 30         Container cp=getContentPane();
 31         Label l1=new Label("用户:");
 32         Label l2=new Label("密码:");
 33         JPanel p1=new JPanel();
 34         JPanel p2=new JPanel();
 35         JPanel p3=new JPanel();
 36         JPanel p4=new JPanel();
 37         p5=new JPanel(){//将图片添加到面板5
 38             protected  void paintChildren(Graphics g) {
 39                 int imgwidth=img.getWidth(this);//获得图片的宽高
 40                 int imgheight=img.getHeight(this);
 41                 int fwidth=getWidth();//获得窗口的大小
 42                 int fheight=getHeight();
 43                 int x=(fwidth-imgwidth)/2;
 44                 int y=(fheight-imgheight)/2;
 45                 g.drawImage(img,x,y,this);
 46                 super.paintChildren(g);
 47             }
 48         };
 49         f1=new JTextField(15);
 50         f2=new JPasswordField(15);
 51         b1=new JButton("登录");
 52         b2=new JButton("重置");
 53         p1.setBackground(Color.orange);
 54         p2.add(l1);
 55         p2.add(f1);
 56         p2.setBorder(new MatteBorder(0,0,0,0,Color.black));//创建具有指定 insets和颜色的衬边边框
 57         p2.setBackground(Color.ORANGE);
 58         p3.add(l2);
 59         p3.add(f2);
 60         p3.setBackground(Color.ORANGE);
 61         p3.setBorder(new MatteBorder(0,0,0,0,Color.black));
 62         p4.add(b1);
 63         p4.add(b2);
 64         p4.setBorder(new MatteBorder(0,0,0,0,Color.black));
 65         p4.setBackground(Color.ORANGE);
 66         p5.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));
 67         p5.add(p2);
 68         p5.add(p3);
 69         p5.add(p4);
 70         cp.add(p5,BorderLayout.CENTER);
 71         b1.addActionListener(this);
 72         b2.addActionListener(this);
 73         this.setResizable(false);//设置不可以改变大小
 74         this.setVisible(true);//设置窗口可见
 75         }
 76     public void actionPerformed(ActionEvent e)
 77     {
 78         if(e.getSource()==b1)//当获取的资源是按钮1时
 79         {//当输入的用户名为”詹泽娟“并且密码为”123456“,则切换到四则运算的界面
 80             if((f1.getText()).equals("詹泽娟")&&(f2.getText()).equals("123456"))
 81             {
 82                 new Frame();
 83                 this.setVisible(false);
 84             }
 85             else 
 86                 JOptionPane.showMessageDialog(null, "用户名或者密码不正确!");
 87         }
 88         if(e.getSource()==b2)
 89         {
 90             f1.setText("");
 91             f2.setText("");
 92         }
 93     }
 94 }
 95 
 96 
 97 //Frame类
 98 import javax.swing.*;
 99 
100 import java.awt.event.*;
101 import java.math.BigDecimal;
102 import java.text.DecimalFormat;
103 import java.text.NumberFormat;
104 
105 class Frame extends JFrame implements ActionListener
106 {
107     int a, b, c, count, num;//a,b分别是第一个操作数,第二个操作数,c是存放用户输入的答案,count是题目总数,num是用于存放代表运算符的数
108     int t=0,f=0,sum=0,s=1;//s表示阶乘结果
109     float d,d1;//d是用于存放除法结果,d1是用于处理除法结果中保留小数点后两位
110     int counter=0;//统计答题个数
111     Timer time;
112     int t1 = 0;
113     JTextField T;//定义一个文本
114     JLabel L1 = new JLabel("请输入题目个数(1-5):");  
115     JTextField T1 = new JTextField(5);   //放题目个数
116     JButton B3 = new JButton("开始");
117     JTextField T2 = new JTextField(10);  //设置运算式
118     JTextField T3 = new JTextField(10);  //获取输入答案
119     JTextField T4 = new JTextField(10);//存放答案提示
120     JButton B1 = new JButton("确定");
121     JButton B2 = new JButton("下一题");
122 
123     Frame() {
124         T=new JTextField(10);//计时
125         T.setEditable(false);
126         time = new Timer(1000, this);
127         time.start();
128         T.setText(setTime(t1));
129         this.setTitle("四则运算");
130         this.setSize(280, 200);
131         this.setVisible(true);
132         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
133         JPanel p2 = new JPanel();
134         JPanel p1 = new JPanel();
135         p2.add(L1);
136         p2.add(T1);
137         p2.add(B3);
138         p2.add(T2);
139         p2.add(T3);
140         p2.add(T4);
141         p2.add(T);
142         p1.add(B1);
143         p1.add(B2);
144         add(p2, "Center");
145         add(p1, "South");
146         
147         B3.addActionListener(new ActionListener() {           //按钮B3表示开始
148             public void actionPerformed(ActionEvent e) {
149                 boolean flag=false;
150                 Object bj = e.getSource(); // 获得事件源
151                 if (bj == B3) {
152                     try{  //如果输入字符,抛出异常,提示错误
153                     count = Integer.parseInt(T1.getText());  //将文本中获取的字符串转换为整型
154                     }
155                     catch(Exception f)
156                     {
157                         flag=true;
158                     }
159                     if(flag)
160                     {
161                         JOptionPane.showMessageDialog(null,"输入有误,请输入数字!");
162                     }
163                     else
164                     {
165                     if(count>5 || count<0)
166                     {
167                         JOptionPane.showMessageDialog(null, "题目个数不能超过五个!请重新输入。");
168                     }
169                     if(count<=5)
170                     {
171                     num = (int) (Math.random() * 5);
172                     a = (int) (Math.random() * 200) - 100;
173                     b = (int) (Math.random() * 200) - 100;
174                     if (num == 0)//num为0时,是加法运算
175                     {
176                         if (a < 0 && b < 0)       //判断a,b的正负并给负数加括号
177                         {
178                             T2.setText("(" + a + ")" + "+(" + b + ")=");
179                         } 
180                         else if (a < 0 && b > 0)
181                         {
182                             T2.setText("(" + a + ")" + "+" + b + "=");
183                         } 
184                         else if (a > 0 && b < 0)
185                         {
186                             T2.setText(a + "+(" + b + ")=");
187                         } 
188                         else
189                         {
190                             T2.setText(a + "+" + b + "=");
191                         }
192                         c = a + b;
193                                               //处理按钮监听事件
194                         
195                     } else if (num == 1)  //num为1表示减法运算
196                     {
197                         if (a < 0 && b < 0)
198                         {
199                             T2.setText("(" + a + ")" + "-(" + b + ")=");
200                         } 
201                         else if (a < 0 && b > 0)
202                         {
203                             T2.setText("(" + a + ")" + "-" + b + "=");
204                         } 
205                         else if (a > 0 && b < 0) 
206                         {
207                             T2.setText(a + "-(" + b + ")=");
208                         }
209                         else 
210                         {
211                             T2.setText(a + "-" + b + "=");
212                         }
213                         c = a - b;
214                         
215                     } else if (num == 2) {   //num为2表示乘法运算
216                         if (a < 0 && b < 0) {
217                             T2.setText("(" + a + ")" + "*(" + b + ")=");
218 
219                         } else if (a < 0 && b > 0) {
220                             T2.setText("(" + a + ")" + "*" + b + "=");
221 
222                         } else if (a > 0 && b < 0) {
223                             T2.setText(a + "*(" + b + ")=");
224 
225                         } else {
226                             T2.setText(a + "*" + b + "=");
227 
228                         }
229                         c = a * b;
230                     }
231                      else if (num == 3&&b!=0) {   //num为3表示除法运算,并且要考虑除数不能为0的情况,因此b!=0
232                             if (a < 0 && b< 0) {
233                                 T2.setText("(" + a + ")" + "/(" + b + ")=");
234 
235                             } else if (a < 0 && b > 0) {
236                                 T2.setText("(" + a + ")" + "/" + b + "=");
237 
238                             } else if (a > 0 && b< 0) {
239                                 T2.setText(a + "/(" + b + ")=");
240 
241                             } else {
242                                 T2.setText(a + "/" + b + "=");
243 
244                             }
245                             d= (float)a/(float)b;  //将整型a,b强制转换为浮点型,保证结果正确
246                             BigDecimal bg = new BigDecimal(d);   //将除法结果保留小数点后两位
247                             d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
248                         }
249                      else
250                      {
251                          a=(int)(Math.random()*10);
252                          T2.setText(a+"!=");
253                          int i;
254                          if(a==0||a==1)
255                          {
256                              s=1;
257                          }
258                          else
259                          {
260                          
261                          for(i=1;i<=a;i++)//计算阶乘
262                          {
263                              s=s*i;
264                          }
265                          }
266                      }
267 
268                 }
269             }
270                 }
271             }
272         });    
273         B2.addActionListener(new ActionListener() {           //B2表示下一题
274             public void actionPerformed(ActionEvent e) {
275                 Object bj = e.getSource(); // 获得事件源
276                 if (bj == B2) {
277                     int a, b, num, i = 1;
278                     if (i < count) {   
279                         T3.setText(null);//当按钮按下一题时就将T3与T4的内容更新
280                         T4.setText(null);
281                         num = (int) (Math.random() * 5);
282                         a = (int) (Math.random() * 200) - 100;
283                         b = (int) (Math.random() * 200) - 100;
284                         i++;
285                         if (num == 0) {
286                             if (a < 0 && b < 0) {
287                                 T2.setText("(" + a + ")" + "+(" + b + ")=");
288                             } else if (a < 0 && b > 0) {
289                                 T2.setText("(" + a + ")" + "+" + b + "=");
290                             } else if (a > 0 && b < 0) {
291                                 T2.setText(a + "+(" + b + ")=");
292                             } else {
293                                 T2.setText(a + "+" + b + "=");
294                             }
295                             c = a + b;
296                         } else if (num == 1) {
297                             if (a < 0 && b < 0) {
298                                 T2.setText("(" + a + ")" + "-(" + b + ")=");
299 
300                             } else if (a < 0 && b > 0) {
301                                 T2.setText("(" + a + ")" + "-" + b + "=");
302                             } else if (a > 0 && b < 0) {
303                                 T2.setText(a + "-(" + b + ")=");
304                             } else {
305                                 T2.setText(a + "-" + b + "=");
306                             }
307                             c = a - b;
308 
309                         } else if (num == 2) {
310                             if (a < 0 && b < 0) {
311                                 T2.setText("(" + a + ")" + "*(" + b + ")=");
312 
313                             } else if (a < 0 && b > 0) {
314                                 T2.setText("(" + a + ")" + "*" + b + "=");
315 
316                             } else if (a > 0 && b < 0) {
317                                 T2.setText(a + "*(" + b + ")=");
318 
319                             } else {
320                                 T2.setText(a + "*" + b + "=");
321 
322                             }
323                             c = a * b;
324 
325 
326                         }
327                         else if (num == 3&&b!=0) {
328                             if (a < 0 && b < 0) {
329                                 T2.setText("(" + a + ")" + "/(" + b + ")=");
330 
331                             } else if (a < 0 && b > 0) {
332                                 T2.setText("(" + a + ")" + "/" + b + "=");
333                             } else if (a > 0 && b < 0) {
334                                 T2.setText(a + "/(" + b + ")=");
335                             } else {
336                                 T2.setText(a + "/" + b + "=");
337                             }
338                             d= (float)a/(float)b;
339                             BigDecimal bg = new BigDecimal(d);
340                             d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
341                             
342 
343                         }
344                         else
345                          {
346                              a=(int)(Math.random()*10);
347                              T2.setText(a+"!=");
348                              if(a==0||a==1)
349                              {
350                                  s=1;
351                              }
352                              else
353                              {
354                              
355                              for(i=1;i<=a;i++)//计算阶乘
356                              {
357                                  s=s*i;
358                              }
359                              }
360                          }
361                         
362                         counter++;
363                         if(counter>=count)//判断题目是否答完,答完了就弹出一个提示题目答完并给出答题时间的对话框
364                         {
365                             JOptionPane.showMessageDialog(null, "题目已答完,答对了"+t+"道题,答错了"+f+"道题

总分是"+sum+"

总用时为:"+t1+"秒");
366                         }
367                     }
368                 }
369             }
370         });
371         B1.addActionListener(new ActionListener() {        //按钮B1表示确定
372             public void actionPerformed(ActionEvent e) {
373                 Object bj = e.getSource(); 
374                 boolean flag=false;// 获得事件源
375                 if (bj == B1) {
376                     try{
377                     if (d1== Float.parseFloat(T3.getText()) || c == Float.parseFloat(T3.getText()) || s ==Float.parseFloat(T3.getText())) {
378                         T4.setText("恭喜你,答对了");
379                         t=t+1;
380                         sum=sum+20;//每答对一题加20分
381                     } else {
382                         T4.setText("抱歉,你答错了");
383                         f=f+1;
384                     }
385                     }
386                     catch(Exception f)
387                     {
388                         flag=true;
389                     }
390                     if(flag)
391                     {
392                         JOptionPane.showMessageDialog(null,"输入有误,请输入数字!");
393                     }
394                 }
395             }
396         });
397 
398     }
399     public void actionPerformed(ActionEvent e) {  
400         t1= t1 + 1;            //累加时间
401         T.setText(setTime(t1));
402         
403     }
404     public String setTime(int t1) {//累加时间
405         int hour, minute, second, a;
406         String mytimer, strsec, strmin, strhour;
407         t1=t1 % (60 * 60 * 24);
408         second = t1 % 60;
409         a = t1/ 60;
410         minute = a % 60;
411 
412         hour = a / 60;
413         if (second <= 9) {
414             strsec = "0" + String.valueOf(second);
415         } else {
416             strsec = String.valueOf(second);
417         }
418         if (minute <= 9) {
419             strmin = "0" + String.valueOf(minute);
420         } else {
421             strmin = String.valueOf(minute);
422         }
423         if (hour <= 9) {
424             strhour = "0" + String.valueOf(hour);
425         } else {
426             strhour = String.valueOf(hour);
427         }
428         mytimer = "计时: " + strhour + ":" + strmin + ":" + strsec;
429         return mytimer;
430     }
431 
432 
433 }

改进前黑盒的东西都是没有处理的,如果一输入非法字符就会终止程序。并且在原程序上我加多了一个登陆界面。

五、总结

这次的作业让我真正懂得了什么是单元测试,在这之前我都只是在书上了解过,并没有什么真正的实操过。还有这次换了一个队友,我懂得了如何去读别人的代码,如何去改进自己的代码。一开始的时候总读不懂,我们两个都想要自己做自己的,都想用自己的代码,后来经过讨论决定使用各自好的部分,结合起来,新的代码产生了!我们都觉得很有成就感,毕竟终于都做出来了。相信接下来的合作会更好。

原文地址:https://www.cnblogs.com/LPJ-/p/4468056.html