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

     
     
  • 相关阅读:
    some tips
    ORA00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
    Chapter 01Overview of Oracle 9i Database Perfomrmance Tuning
    Chapter 02Diagnostic and Tuning Tools
    变量与常用符号
    Chapter 18Tuning the Operating System
    标准输入输出
    Trace files
    DBADeveloped Tools
    Chapter 03Database Configuration and IO Issues
  • 原文地址:https://www.cnblogs.com/ddyyhh/p/4487311.html
Copyright © 2011-2022 走看看