算法封装5.2
我的小伙伴:欧泽波 201306114428 http://www.cnblogs.com/OuZeBo/
java 异常抛出throw与throws区别:
throws :通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法(即调用该方法或类的所有地方)。
throw :需要用户自己捕获相关的异常,而后再对其进行相关处理(如打印异常的地方,类型等),最后将处理后的异常信息抛出。
他们对异常处理方式也不同。throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最
大范围,而cathch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象。
主要程序:
package 小学生四则运算; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.BoxLayout; import javax.swing.SwingConstants; public class Suanshi extends JFrame implements ActionListener{ JTextField[] kj; JTextField yy; JFrame g; JLabel biaot,timu,kk,k1,jieguo,dd; JButton wq,qd; JPanel p1,p2,p3,p4; int i,tj; String ssss; int []da=new int[5]; private JPanel panel; public Suanshi() { super("小学生四则运算"); panel=new JPanel(); panel.setLayout(new GridLayout(0, 1, 0, 3)); add(panel); p1=new JPanel(); panel.add(p1); FlowLayout fl1 = new FlowLayout(FlowLayout.CENTER,10,10); p1.setLayout(fl1); biaot=new JLabel("小学生四则运算"); biaot.setFont(new Font("楷体", Font.BOLD,20)); p1.add(biaot); p1.setOpaque(false); p2=new JPanel(); panel.add(p2); p2.setLayout(new GridLayout(1,0,10,10)); timu=new JLabel("\u968F\u673A\u9898\u76EE\uFF1A"); k1=new JLabel(" "); k1.setHorizontalAlignment(SwingConstants.CENTER); k1.setFont(new Font("黑体", Font.BOLD, 30)); p2.add(timu); p2.add(k1); p2.setOpaque(false); p3=new JPanel(); panel.add(p3); p3.setLayout(new GridLayout(1,0,10,10)); jieguo=new JLabel("输入答案:"); p3.add(jieguo); kk=new JLabel(" "); kk.setFont(new Font("黑体", Font.BOLD, 28)); kk.setHorizontalAlignment(SwingConstants.CENTER); p3.add(kk); p3.setOpaque(false); p4=new JPanel(); panel.add(p4); p4.setLayout(null); wq=new JButton("获取题目"); wq.setLocation(203, 10); wq.setSize(118, 31); qd=new JButton("提交答案"); qd.setLocation(350, 10); qd.setSize(118, 31); p4.add(wq); p4.add(qd); p4.setOpaque(false); wq.addActionListener(this); qd.addActionListener(this); kj=new JTextField[10]; for (int i= 0;i<5;i++) { kj[i] = new JTextField(); p2.add(kj[i]); } for (int i= 5;i<10;i++) { kj[i] = new JTextField(); p3.add(kj[i]); } yy=new JTextField(3); setBounds(350,250,640,227); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("获取题目")) //判断点击的按钮 { for(i=0;i<5;i++) { int sz=(int)(Math.random()*4); int sz1=(int)(Math.random()*10); int sz2=(int)(Math.random()*10); try{ if(sz==3 && sz2==0) throw new Yccl(); } catch(Yccl e1) { e1.yc1(); } Core a=new Core(); try { da[i]=a.yunxing(sz,sz1,sz2); } catch (Yccl e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } Core b=new Core(); kj[i].setText(b.huoqu()); } } else if(e.getActionCommand().equals("提交答案")) { int a,b=0,c=0; for(a=5;a<10;a++) { int first= Integer.parseInt(kj[a].getText()); //把文本框输入的答案转为整形 if (first==da[b]) //判断答案是否正确 { c++; //记录答对题目的个数 } b++; } g=new JFrame("答案"); GridLayout ggg = new GridLayout(6,0,10,10); g.getContentPane().setLayout(ggg); JLabel sm=new JLabel("答对题目数:"+c); JLabel []ct=new JLabel[5]; for(a=0;a<5;a++) { ct[a]=new JLabel("第"+(a+1)+"题"+"答案为:"+da[a]); g.getContentPane().add(ct[a]); } g.getContentPane().add(sm); g.setBounds(550,270,180,180); g.setVisible(true); } } public static void main(String[] args) { Suanshi frame=new Suanshi(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Core类:
package 小学生四则运算; import javax.swing.JTextField; public class Core { static String ssss; int deshu; public int yunxing(int sz,int sz1,int sz2)throws Yccl { switch(sz) { case 0: //0时为加法式子 ssss=String.valueOf(sz1)+'+'+String.valueOf(sz2); //把式子转为字符 deshu=sz1+sz2; break; case 1: //1时为减法式子 ssss=String.valueOf(sz1)+'-'+String.valueOf(sz2); deshu=sz1-sz2; break; case 2: //2时为乘法式子 ssss=String.valueOf(sz1)+'*'+String.valueOf(sz2); deshu=sz1*sz2; break; case 3: //3时为除法式子 ssss=String.valueOf(sz1)+'/'+String.valueOf(sz2); deshu=sz1/sz2; break; } return deshu; } public String huoqu() { return ssss; } }
测试类:
package 小学生四则运算; import static org.junit.Assert.*; import org.junit.Test; public class CoreText { Core h=new Core(); @Test public void jia() throws Yccl { int a=h.yunxing(0,1,1); //0代表加法 assertEquals(2, a); } @Test public void jian() throws Yccl{ int b=h.yunxing(1,1,1); //1代表减法 assertEquals(0, b); } @Test public void cheng() throws Yccl{ int c=h.yunxing(2,1,1); //2代表乘法 assertEquals(1, c); } @Test public void chu() throws Yccl{ int d=h.yunxing(3,1,1); //3代表除法 assertEquals(1, d); } }
异常处理:
package 小学生四则运算; import javax.swing.JOptionPane; public class Yccl extends Exception { public void yc1() //除零 { JOptionPane.showMessageDialog(null,"出现了除数为零的式子!"); } }
异常处理结果:
对测试类测试结果:
总结:由算法5.1到5.2,我渐渐明白单元测试就是把参数传递过去,然后去判断返回值是不是与我所想的结果是否一致。
当你了解单元测试后,你会发现其实它不是很难,很好理解。我会尝试把以前写的代码写一些简单的单元测试,争
取进一步了解单元测试。
相对于单元测试,我感觉异常处理这块比较难,根本不知道什么时候要异常处理,可能少接触的原因吧。接下来我
会加强对异常处理这方面的学习,加油吧!