算法封装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);
    }

}
Suanshi

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;
    }
}
Core

测试类:

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);
    }
}
CoreText

异常处理:

package 小学生四则运算;

import javax.swing.JOptionPane;

public class Yccl extends Exception {
    public void yc1() //除零
    {
        JOptionPane.showMessageDialog(null,"出现了除数为零的式子!");
    }

}
Yccl

 

异常处理结果:

 
 
对测试类测试结果:
 
 
总结:由算法5.1到5.2,我渐渐明白单元测试就是把参数传递过去,然后去判断返回值是不是与我所想的结果是否一致。
   当你了解单元测试后,你会发现其实它不是很难,很好理解。我会尝试把以前写的代码写一些简单的单元测试,争
   取进一步了解单元测试。
   相对于单元测试,我感觉异常处理这块比较难,根本不知道什么时候要异常处理,可能少接触的原因吧。接下来我
   会加强对异常处理这方面的学习,加油吧!
  

 
 

posted on 2015-05-08 12:02  26杜殷浩  阅读(263)  评论(1编辑  收藏  举报

导航