zoukankan      html  css  js  c++  java
  • 《Java技术》第五次作业

    (一)学习总结

    1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结。

    2.汽车租赁公司,出租汽车种类有客车、货车和皮卡三种,每辆汽车除了具有编号、名称、租金三个基本属性之外,客车有载客量,货车有载货量,皮卡则同时具有载客量和载货量。用面向对象编程思想分析上述问题,将其表示成合适的类、抽象类或接口,说明设计思路并画出类图。

    设计思路:设计一个出租汽车类 interface接口定义编号、名称、租金三个的get方法,再分别设计一个客车、货车、皮卡三个类,客车除了三个公共属性外还有载客量属性,货车还有载货量属性,皮卡还有载客量和载货量属性,再设计一个汽车租赁公司。

    类图:

    3.阅读下面程序,分析代码是否能编译通过,如果不能,说明原因,并进行改正。如果能,列出运行结果

    interface Animal{    
        void breathe();
        void run();
        void eat();
    }
    class Dog implements Animal{
        public void breathe(){
            System.out.println("I'm breathing");
        }
        void eat(){
            System.out.println("I'm eating");
        }
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
        }
    }
    

    不能。Dog继承Animal,所以要继承Animal类中的所有方法,Dog类的方法应为public的

    正确结果为:

    I'm breathing
    I'm eating
    I'm running
    

    正确程序为:

    interface Animal{    
        void breathe();
        void run();
        void eat();
    }
    class Dog implements Animal{
        public void breathe(){
            System.out.println("I'm breathing");
        }
        public void eat(){
            System.out.println("I'm eating");
        }
        public void run(){
        	System.out.println("I'm running");
        }
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
            dog.run();
        }
    }
    

    4.运行下面的程序

    import java.util.Arrays;
    public class Test{
        public static void main(String[] args){
            String[] fruits = {"peach","banana","orange","apple"};
            Arrays.sort(fruits);
            for(int i = 0;i < fruits.length;i++)
            {
                System.out.println(fruits[i]);
            }
        }
    }
    

    程序输出的结果是升序排序的。查看String 类的源码,说明是如何实现的?如果现在希望对输出的结果进行降序排序,该如何处理?修改上述代码,实现按照字母顺序逆序排序。

    String类源码:

    public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                         = new CaseInsensitiveComparator();
    private static class CaseInsensitiveComparator
                         implements Comparator<String>, java.io.Serializable {
        // use serialVersionUID from JDK 1.2.2 for interoperability
        private static final long serialVersionUID = 8575799808933029326L;
    
        public int compare(String s1, String s2) {
            int n1 = s1.length();
            int n2 = s2.length();
            int min = Math.min(n1, n2);
            for (int i = 0; i < min; i++) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);
                if (c1 != c2) {
                    c1 = Character.toUpperCase(c1);
                    c2 = Character.toUpperCase(c2);
                    if (c1 != c2) {
                        c1 = Character.toLowerCase(c1);
                        c2 = Character.toLowerCase(c2);
                        if (c1 != c2) {
                            // No overflow because of numeric promotion
                            return c1 - c2;
                        }
                    }
                }
            }
            return n1 - n2;
        }
    }
    

    降序输出的程序为:

    import java.util.Arrays;
    public class Test{
        public static void main(String[] args){
            String[] fruits = {"peach","banana","orange","apple"};
            Arrays.sort(fruits);
            for(int i = fruits.length- 1 ;i >= 0;i--)
            {
                System.out.println(fruits[i]);
            }
        }
    }
    

    (二)实验总结

    实验内容:

    1.程序设计思路:设计一个接口MusicBox具有方法play(),再设计两个音乐盒类分别为PianoBox,ViolinBox,对方法play()进行加工,在设计一个MusicBoxFactory定义接口对象通过工厂取得实例,对方法进行调用,最后设计一个Test类,由用户输入来选择播放哪个音乐盒。

    问题1:

    public static MusicBox getInstance(String className){
    	MusicBox m=null;
    	if("PianoBox".equals(className)){
    		m=new PianoBox();
    	}
    	if("ViolinBox".equals(className)){
    		m=new ViolinBox();
    	}
    	return m;
    }
    

    原因:在写className的时候卡了一段时间

    解决方案:在写 MusicBox getInstance的时候忽略了MusicBox,后来多次看书及根据提示找了出来进行改正

    2.程序设计思路:在原有的程序上进行改动,将Date类去掉,用

    import java.text.SimpleDateFormat;
    import java.util.Date;
    

    来代替Date类,实现ComparaTo比较在Employee类中添加CompareTo方法用getTime()来比较日期的大小,实现Comparator比较建立一个EmployeeComparator类,定义两个对象用getTime()来进行比较.对Test类也进行改动,在实例化时日期为new SimpleDateFormat("yyyy-mm-dd").parse("1995-01-12"),对实例化完的对象数组调用排序的两个方法分别输出。

    问题1:

    public int compareTo(Employee o){
    	if(this.birth.getTime()>o.birth.getTime()){
    		return 1;
    	}else if(this.birth.getTime()<o.birth.getTime()){
    		return -1;
    	}
    	else{
    		return 0;
    	}
    }
    

    原因:忘记在接口写<>

    解决方案:运行总是有错就仔细看书及课件,后来发现少写了,然后加上,就对了

    问题2:

    class EmployeeComparator implements Comparator<Employee>{
    public int compare(Employee o1,Employee o2){
    	if(o1.getBirth().getTime()>o2.getBirth().getTime()){
    		return 1;
    	}
    	else if(o1.getBirth().getTime()<o2.getBirth().getTime()){
    		return -1;
    	}
    	else{
    		return 0;
    	}
    }
    
    }
    

    原因:在写Comparator接口的时候不知道应该怎么写

    解决方案:问同学、看课件、看书后来知道应该先建一个类然后定义两个对象来比较

    3.程序设计思路:先设计一个Pet接口用interface Pet来写,在里面定义每个属性的get方法,再设计一个Cat类,分别定义属性编号、品种、颜色、年龄、价格和每个属性的set、get方法,再设计一个Dog类,与Cat类基本相同,再定义一个PetShop类,来定义增加、查询、输出方法,最后再建一个Test类,对对象实例化,来实现展示所有宠物,用户购买宠物,显示列表清单操作。

    问题1:

    public Pet search(String no){
    	Pet p=null;
    	for(int i=0;i<this.pets.length;i++){
    		if(this.pets[i].getNo().indexOf(no)!=-1){
    			p=this.pets[i];	
    		}
    		
    	}
    	return p;
    }
    

    原因:返回总是为空

    解决方案:刚开始写的是判断用户输入的编号是否存在与对象数组当中,然后在判断又返回值在循环结束完之后还是需要一个返回值,与判断的返回有冲突,判断的返回值并没有起作用,返回的都为空,后来试着定义一个变量,将查找出的结果赋给该变量,然后返回变量,使返回不为空。

    问题2:

    System.out.println("请用户输入要购买几只:");
    		x[i]=in.nextInt();
    

    原因:输出的个数都为最后一个的数量

    解决方案:起初设置的x为一个变量而非数组,然后在发现问题后将变量改为数组,运行正确。

    (三)代码托管

    码云commit历史截图

  • 相关阅读:
    LaTeX —— 特殊符号与数学字体
    LaTeX —— 特殊符号与数学字体
    实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
    家书与家训
    家书与家训
    Handler总结
    (step5.1.3)hdu 1213( How Many Tables——1213)
    JavaScript+XML+VBA导出报表初步构想
    XML学习总结
    JSP 9 大内置对象详解
  • 原文地址:https://www.cnblogs.com/yang-yonghui/p/6760840.html
Copyright © 2011-2022 走看看