zoukankan      html  css  js  c++  java
  • 入学测试

    package com.itheima;
    public class Test1 {
        /**
         1、 写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
         *
         * @param args
         *
         */
        public static void main(String[] args) {
            @SuppressWarnings("unchecked")
            List<String> arrayListProxy = (List<String>) Proxy.newProxyInstance(
            /* 定义代理类的加载器,用于创建类的对象 */
            ArrayList.class.getClassLoader(),
            /* 代理类要实现的接口列表 */
            ArrayList.class.getInterfaces(),
            /* 指派方法调用的处理程序,匿名内部类 */
            new InvocationHandler() {
                // 目标对象
                private ArrayList<String> taret = new ArrayList<String>();

                @Override
                public Object invoke(Object proxy, Method method, Object[] args)
                        throws Throwable {
                    // 开始时间
                    long startTime = System.currentTimeMillis();
                    TimeUnit.MICROSECONDS.sleep(1);
                    // 实际调用的方法,并接受方法的返回值
                    Object obj = method.invoke(taret, args);
                    // 结束时间
                    long endTime = System.currentTimeMillis();
                    System.out.println("[" + method.getName()+ "]需要的时间"
                            + (endTime — startTime) + "毫秒");
                    // 返回实际调用的方法的返回值
                    return obj;
                }
            });
            arrayListProxy.add("abc");
            arrayListProxy.add("abcdf");
            arrayListProxy.add("abcdefg");
            System.out.println("..........................");
            for (String i : arrayListProxy) {
                System.out.println("i=" + i);
            }      
        }
    }

    package com.itheima;
    public class Test2 {
        /**
         2、 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象, 然后遍历并打印出各元素的key和value。
         *
         * @param args
         */
        public static void main(String[] args) {
            
            Map<String,Integer> map = new HashMap<String,Integer>();
            map.put("小赵", 12);
            map.put("小钱", 21);
            map.put("小孙", 25);
            map.put("小李", 9);
            //先获取map集合的所有键的Set集合,keyset();
            Set<String> set = map.keySet();
            //迭代
            Iterator<String> it = set.iterator();
            while(it.hasNext()){
                String key = it.next();
                //有了键通过map集合的get方法获取其对应的值
                Integer value = map.get(key);
                System.out.println("key="+key+"   "+"value="+value);
            }
        }
    }

    package com.itheima;

    public class Test3 {
        /**
          3、 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
        
         * @param args
         */
        public static void main(String[] args)throws IOException{
            // 自定义强制反转的比较器
            Comparator<Student> cmp = Collections.reverseOrder();
            // 以下把比较器作为参数传递
            Set<Student> stus = StudentInfoTool.getStudents(cmp);
                StudentInfoTool.writeToFile(stus);
        }
    }
    //定义学生类
    class Student implements Comparable<Student> {
        private String name;
        private int chinese,english,maths;
        private int sum;

        Student(String name, int chinese, int english, int maths) {
            this.name = name;
            this.chinese = chinese;
            this.english = english;
            this.maths = maths;
            sum = chinese + english + maths;
        }

        public String getName() {
            return name;
        }

        public int getSum() {
            return sum;
        }
        //覆盖hashCode方法
        public int hashCode() {
            return name.hashCode()+sum * 78;
        }

        public boolean equals(Object obj) {
            if (!(obj instanceof Student))
                throw new ClassCastException("类型不匹配");
            Student s = (Student) obj;
            return this.name.equals(s.name) && this.sum == s.sum;
        }
        // 实现接口中的方法,分数相同再比较姓名。如果总分和姓名都相同,就是同一个人。
        public int compareTo(Student s) {
            int num = new Integer(this.sum).compareTo(new Integer(s.sum));
            if (num == 0)
                return this.name.compareTo(s.name);
            return num;
        }

        public String toString() {
            return "student["+"姓名:"+name+",     "+"语文:"+chinese+",     "+"英语:"+english +",     "+"数学:"+maths+"]";
        }
    }
    //定义学生工具类
    class StudentInfoTool {
        // 不带比较器的比较
        public static Set<Student> getStudents() {
            return getStudents(null);
        }
        // 带自定义比较器的比较
        public static Set<Student> getStudents(Comparator<Student> cmp){
            //读取键盘
            BufferedReader bufr = new BufferedReader(new InputStreamReader(
                    System.in));
            String line = null;
            Set<Student> stus = null;
            if(cmp==null)
                stus=new TreeSet<Student>();
            else
                stus = new TreeSet<Student>(cmp);
                try {
                    while ((line = bufr.readLine()) != null) {
                        // 输入over就结束
                        if ("over".equals(line))
                            break;
                        // 以逗号分隔输入的信息
                        String[] info = line.split(",");
                        // 字符串要转换为整形
                        Student stu = new Student(info[0], Integer.parseInt(info[1]),
                                Integer.parseInt(info[2]), Integer.parseInt(info[3]));
                        stus.add(stu);
                    }
                } catch (NumberFormatException e1) {
                    System.out.println("输入格式错误,输入格式为:name,30,30,30");
                } catch (IOException e1) {
                    System.out.println("读取数据失败");
                }
            try {
                bufr.close();
            } catch (IOException e) {
                System.out.println("关闭失败");
            }
            return stus;
        }

        public static void writeToFile(Set<Student> stus) throws IOException{
            BufferedWriter bufw = null;
                bufw = new BufferedWriter(new FileWriter("E:\stuinfo.txt"));
            for (Student stu : stus) {        
                bufw.write(stu.toString() + " ");
                bufw.write(stu.getSum() + "");    
                bufw.newLine();    
                bufw.flush();        
            }    
                bufw.close();
            
        }
    }

    package com.itheima;
    public class Test4 {
        /**
         4、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" , 输出格式为:a(2)b(1)k(2)...
         *
         * @param args
         */
        public static void main(String[] args) {
            String str = "abcdekka27qoq";
            System.out.println(charCount(str));
            
        }
        public static String charCount(String str){
            //将字符串转成字符数组
            char[] chs = str.toCharArray();
            //定义集合(打印有顺序使用TreeMap集合)
            TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
            int count =0;
            //遍历字符数组
            for(int x=0;x<chs.length;x++){
                //判断是不是字母
                if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
                    continue;
                //chs[x]作为键找集合
                Integer value = tm.get(chs[x]);
                
                if(value!=null)
                    count=value;
                count++;
                tm.put(chs[x], count);
                count=0;

            }
            //定义缓冲区
            StringBuilder sb = new StringBuilder();
            Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
            //迭代
            Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
            while(it.hasNext()){
                Map.Entry<Character,Integer> me = it.next();
                Character ch = me.getKey();
                Integer value = me.getValue();
                sb.append(ch+"("+value+")");
            }
            return sb.toString();
        }
    }

    package com.itheima;
    public class Test5 {
        /**
         5、 将字符串中进行反转。abcde ——> edcba
         * @param args
         */
        public static void main(String[] args) {
            String str = "abcde";
            System.out.println(reverseString(str));
        }
        public static String reverseString(String str){
            //将字符串转成字符数组
            char[] chs = str.toCharArray();
            reverse(chs);
            //将字符数组转成字符串
            return new String(chs);
        }
        //反转数组
        private static void reverse(char[] chs) {
            for(int start=0,end=chs.length—1;start<end;start++,end——){
                swap(chs,start,end);
            }
        }
        //换位置
        private static void swap(char[] chs, int start, int end) {
            char temp = chs[start];
            chs[start] = chs[end];
            chs[end] = temp;
        }
    }

    package com.itheima;
    public class Test6 {
        /**
         6、 已知一个类,定义如下:
            package cn.itcast.heima;
            public class DemoClass {
               publicvoid run() {
              System.out.println("welcome to heima!"); } }
            (1)写一个Properties格式的配置文件,配置类的完整名称。
            (2)写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射 的方式运行run方法。
         *
         * @param args
         */
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public static void main(String[] args) throws Exception {
            // 用Properties类加载配置文件
            Properties props = new Properties();
            InputStream fis = Test6.class.getClassLoader().getResourceAsStream(
                    "com/itheima/Test6.Properties");
            props.load(fis);
            fis.close();
            // 取出类的完整名称
            String className = props.getProperty("className");
            System.out.println(className);
            DemoClass dc = new DemoClass();
            //加载类
            Class clazz = Class.forName(className);
            Method method = clazz.getMethod("run");
            method.invoke(dc);
        }
    }

    当前目录建一个Test6.Properties 内存入:className=cn.itcast.heima.DemoClass

    package cn.itcast.heima;
    public class DemoClass {
        public void run() {
            System.out.println("welcome to heima!");
        }
    }

    package com.itheima;
    public class Test7 {
        /**
         7、 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 在客户端有一个类为TestC,有一个方法为c,请在这个方法中捕捉异常的信息。 完成这个例子,请说出java中针对异常的处理机制。
         *
         * @param args
         */
        /*
        1,处理方式有两种:try 或者 throws。
                try { 需要被检测的代码;}
                catch ( 异常类 变量 ) { 处理异常的代码;(处理方式) }
                finally { 一定会执行的语句; }
        2,调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。
        3,多个catch,父类的catch放到最下面。
        4,catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。
    当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
        */
        public static void main(String[] args) {
            TestC.c();
        }
    }

    class ClassA {
        public static void a() throws Exception {
            ClassB.b();
        }
    }

    class ClassB {
        public static void b() throws Exception {
            throw new Exception("方法b异常");
        }
    }

    class TestC {
        public static void c() {
            try {
                ClassA.a();
            } catch (Exception e) {
                System.out.println(e.getMessage()+"..."+e.toString());
            }
        }

    package com.itheima;
    public class Test8 {
        /**
         8、 存在一个JavaBean,它包含以下几种可能的属性:
             1:boolean/Boolean
             2:int/Integer
             3:String
             4:double/Double
         属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
             String类型的默认值为字符串"itheima.com"
             int/Integer类型的默认值为100
             boolean/Boolean类型的默认值为true
             double/Double的默认值为0.01D.
         只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
         *
         * @param args
         */
        public static void main(String[] args) {
            JavaBean jb = new JavaBean();
            jb.setString("itheima.com");
            jb.setInteger(100);
            jb.setBooleam(true);
            jb.setDoublo(0.01D);
            System.out.println("String类型的值="+jb.getString()+" "
                                +"int/Integer类型的值="+jb.getInteger()+" "
                                +"boolean/Boolean类型的值="+jb.isBooleam()+" "
                                +"double/Double的值="+jb.getDoublo());
        }
    }


    package com.itheima;
    public class JavaBean {
        private String string ;
        private Integer integer;
        private Boolean booleam ;
        private Double doublo ;

        public String getString() {
            return string;
        }
        public void setString(String string) {
            this.string = string;
        }
        public Integer getInteger() {
            return integer;
        }
        public void setInteger(Integer integer) {
            this.integer = integer;
        }
        public Boolean isBooleam() {
            return booleam;
        }
        public void setBooleam(Boolean booleam) {
            this.booleam = booleam;
        }
        public Double getDoublo() {
            return doublo;
        }
        public void setDoublo(Double doublo) {
            this.doublo = doublo;
        }
    }

    package com.itheima;
    public class Test9 {
        /**
         9、 使用TCP协议写一个可以上传文件的服务器和客户端。
         *
         * @param args
         */
        public static void main(String[] args) {    
        }
    }
    class  Client{
        public static void main(String[] args) throws Exception{
            Socket s = new Socket("192.168.1.102",10001);
            BufferedReader bufr =
                new BufferedReader(new FileReader("F:\1.mp3"));

            //定义目的,将数据写入到socket输出流。发给服务端。
            PrintWriter out = new PrintWriter(s.getOutputStream(),true);
            String line = null;
            while((line=bufr.readLine())!=null){
                out.println(line);
            }
            s.shutdownOutput();//关闭客户端的输出流。相当于给流中加入一个结束标记—1.  

            //定义一个socket读取流,读取服务端返回的信息。      
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String str = bufIn.readLine();
            System.out.println(str);
            bufr.close();
            s.close();
        }
    }
    class  Server{
        public static void main(String[] args) throws Exception{
            ServerSocket ss = new ServerSocket(10001);
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"....connected");

            //读取socket读取流中的数据。
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
            PrintWriter out  = new PrintWriter(new FileWriter("F:\server.mp3"),true);
            String line = null;
            while((line=bufIn.readLine())!=null){
                out.println(line);
            }
            PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
            pw.println("上传成功");
            out.close();
            s.close();
            ss.close();
        }
    }
     

    package com.itheima;
    public class Test10 {
        /**
         10、 金额转换,阿拉伯数字转换成中国传统形式。
         *
         * 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
         *
         * @param args
         */
        public static void main(String[] args) {
            // 测试
            long L = 101000001010L;
            System.out.println(convert(L));
        }

        public static String convert(long number) {
            // 定义字符数组存储中国数字写法格式
            final char[] chinese = new char[] { '零', '壹', '贰', '叁', '肆', '伍',
                    '陆', '柒', '捌', '玖' };
            // 定义字符数组存储中国数字的单位
            final char[] units = new char[] { '圆', '拾', '佰', '仟', '万', '拾', '佰',
                    '仟', '亿', '拾', '佰', '仟' };
            // 定义一个字符串缓冲区对字符进行存储
            StringBuilder sb = new StringBuilder();
            int index = 0;
            long lastNumber = 0;
            while (number != 0) {
                lastNumber = number % 10;
                sb.insert(0, units[index++]);
                sb.insert(0, chinese[(int) lastNumber]);
                number = number / 10;
            }
            // 去零操作,通过正则表达式
            return sb.toString().replaceAll("零[拾佰仟]", "零").replaceAll("零+亿", "亿")
                    .replaceAll("零{4}万", "零").replaceAll("零+万", "万")
                    .replaceAll("零+圆", "圆").replaceAll("零+", "零")
                    + "整";
        }
    }

  • 相关阅读:
    模板合集
    1201: 众数问题
    112. 路径总和
    Hibernate的配置及CURD
    5. 最长回文子串
    1120: 最值交换
    1119: 一维数组排序
    1118: 数列有序
    1117: 查找数组元素
    1116: 删除元素
  • 原文地址:https://www.cnblogs.com/In-order-to-tomorrow/p/3650576.html
Copyright © 2011-2022 走看看