• 四则运算 测试与封装 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 }

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

    五、总结

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

  • 相关阅读:
    pdf在线转换器
    抖音修复老照片动起来笑起来的程序app的下载地址
    FFmpeg.AutoGen Unable to load DLL 'avutil.56' 解决方法
    Array.prototype.fill 填充值被复用的问题
    Recoil Input 光标位置被重置到末尾的问题
    TypeScript 扩展全局 Window 时报错的解决
    Recoil 中默认值的正确处理
    Recoil 中多级数据联动及数据重置的合理做法
    Recoil 默认值及数据级联的使用
    Recoil 的使用
  • 原文地址:https://www.cnblogs.com/LPJ-/p/4468056.html
Copyright © 2020-2023  润新知