Java第五次作业 1502 马 帅

《Java技术》第五次作业

(一)学习总结

1.

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

  • 程序设计思路:
    类:
    抽象类 汽车:class Car
    客车:class PassengerCar
    货车:class Truck
    皮卡:class PickUpTruck
    接口:
    载货量:interface Goods
    载客量:interface Passenger

(1)在汽车类中声明私有属性:编号、名称、租金;
(2)客车类、货车类和皮卡类分别为汽车类的子类,客车类实现载客量,货车类实现载货量,皮卡类实现载货和载客量;

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时,eat()方法的可视性应为public;
二、子类Dog中必须同时覆写3个抽象方法,而Dog类中没有run()方法的覆写。
修改后为:

 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 runing");
		}
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
        }
    }

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

若要降序输出应改为:

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

在String类中,重写了compareTo方法,即按字典顺序比较字符串,比较基于字符串中各个字符的 Unicode 值

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

如果按降序输出应修改代码如下:

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

5.对于一个子类需要“继承”两个父类是不可能,但可以使用接口,一个子类是可以实现两个接口的。
一般使用comparable进行排序,comparator需要单独写一个类。

(二)实验总结

1.某工厂生产各种音乐盒,客户无需知道音乐盒的制作过程,只需知道如何播放音乐盒即可。用简单工厂设计模式实现该过程:接口MusicBox具有方法play(),两个音乐盒类PianoBox,ViolinBox,MusicBoxFactory 产生MusicBox的实例。

  • 程序设计思路:
    (1)首先定义MusicBox接口,声明方法play();
    (2)定义PianoBox类和ViolinBox类,分别实现MusicBox接口;
    (3)在上述两个类中分别重写play()方法;
    (4)定义MusicBoxFactory类,在里面定义接口对象,用来接收用户输入的信息,并判断是哪个子类的标记,进行实例化接口并将其返回;
    (5)定义测试类Test,进行输入输出测试。

2.修改第三次作业的第一题,使用java.util.Date类表示职工的生日和参加工作时间,并将职工信息按照生日大小排序后输出。(分别用comparable和comparator实现)

  • 程序设计思路:
    (1)根据作业三第一题,删除重写的Date类,需要修改Employee职工类和Test测试类。
    (2)首先修改Employee类,使用SimpleDateFormat类中的方法定义一个日期的格式sdf:"yyyy-MM-dd",再修改getEbir()//生日 、getEwkt()//工作时间 方法返回值为Date类型,修改setEbir(String bir)、setEwkt(String wkt)方法,使用sdf.parse()方法捕获字符串中的日期并转换为Date类。在重写的toString()方法中使用sdf.format()方法进行格式化输出;
    (3)修改Test类,将实例化对象的数据进行修改,即将工作时间和出生日期作为String类型进行输入。
    (4)若使用comparalbe实现排序,须将Employee类定义接口指定泛型为Employee,并重写compareTo方法,使用getTime()方法进行日期大小的判断,实现排序规则;
    (5)若使用comparator实现排序,须重新定义一个EmployeeComparator类实现接口,使用getTime()方法判断日期的大小并进行比较,从而实现排序规则。

3.在案例宠物商店的基础上,实现以下功能:
(1)展示所有宠物
(2)购买宠物
(3)显示购买清单

  • 程序设计思路:
    (1)定义Pet类构造方法,定义编号、类型、颜色、年龄、价格等属性,使用set和get方法实现输入输出;
    (2)定义Dog类和Cat类分别继承Pet类,并分别定义方法count和price方法来进行计数和计算价格,在Dog类中增加一个smallOrLarge()方法来记录大型犬或小型犬;
    (3)定义Buy类,定义一个Pet类的数组,用来记录购买的宠物;
    (4)在用户界面类进行输入输出:先将各个宠物的信息输入,再记录用户的选择,使用循环实现重复购买,定义一个长度等同于宠物数量的int型数组,初始化全为0,当用户选择宠物时,在相应的下标进行加1操作,用来记录用户的选择。当用户选择完后,利用该数组进行判断,并将相应的宠物写入Buy类中定义的对象数组,再进行输出。

(三)代码托管

  • 码云commit历史截图
posted @ 2017-04-25 14:04  Masart  阅读(288)  评论(1编辑  收藏  举报