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

     
     
  • 相关阅读:
    To Do List
    Linux 替换文本中对空格为下划线
    Jumpserver开源堡垒机
    用jmeter编写脚本做实时线上监控
    Supervisor使用详解
    Python模块之pysnooper
    Java读取json文件并进行处理
    IOS APP自动化测试 真机测试 遇到的坑
    测试人员入职必须了解的东西包括下面一些内容
    linux 和MacBook下的批替换
  • 原文地址:https://www.cnblogs.com/ddyyhh/p/4487311.html
Copyright © 2020-2023  润新知