四则运算 测试与封装 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+"道题\n\n总分是"+sum+"\n\n总用时为:"+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+"道题\n\n总分是"+sum+"\n\n总用时为:"+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 }
改进前黑盒的东西都是没有处理的,如果一输入非法字符就会终止程序。并且在原程序上我加多了一个登陆界面。
五、总结
这次的作业让我真正懂得了什么是单元测试,在这之前我都只是在书上了解过,并没有什么真正的实操过。还有这次换了一个队友,我懂得了如何去读别人的代码,如何去改进自己的代码。一开始的时候总读不懂,我们两个都想要自己做自己的,都想用自己的代码,后来经过讨论决定使用各自好的部分,结合起来,新的代码产生了!我们都觉得很有成就感,毕竟终于都做出来了。相信接下来的合作会更好。