《Java技术》第五次作业

《Java技术》第五次作业

(一)学习总结

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

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

  • 设计思路
    (1)将客车的有载客量,货车的有载货量,分别设计为一个接口。
    (2)出租汽车设计成抽象类,包括编号、名称、租金属性。
    (3)客车、货车、皮卡分别继承出租汽车类,再分别实现应有的接口。

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

代码不能通过

  • 原因
    (1)在接口中声明的方法必须是public abstract,也是系统默认的,而本题中省略了,但在类中实现接口所定义的方法时,方法的声明必须和接口中定义的完全一致,类中必须显示使用public修饰符。
    (2)非抽象类必须实现接口中的所有方法。

  • 改正

      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 类的源码,说明是如何实现的?如果现在希望对输出的结果进行降序排序,该如何处理?修改上述代码,实现按照字母顺序逆序排序。

源代码

    public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence{
	private final char value[];
	private int hash;
	private static final ObjectStreamField[] serialPersistentFields =new ObjectStreamField[0];
	public String() {
		this.offset = 0;
		this.count = 0;
		this.value = new char[0];
	}
	public String(String original) {
		int size = original.count;
		char[] originalValue = original.value;
		char[] v;
		if (originalValue.length > size) {
			int off = original.offset;
			v = Arrays.copyOfRange(originalValue, off, off+size);
		} else {
			v = originalValue;
		}
		this.offset = 0;
		this.count = size;
		this.value = v;
	}

修改

	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,MusicBoxFactory 产生MusicBox的实例。

  • 程序设计思路
    (1)将MusicBox设计为接口,在接口中定义音乐盒播放的方法。
    (2)分别新建PianoBox类、ViolinBox类,在类中实现接口中定义的play方法。
    (3)建MusicBoxFactory类,将MusicBox实例化。
    (4)测试类,用户输入即将播放的音乐盒,实现了MusicBox的实例化,调用play()方法并输出。

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

  • 程序设计思路
    (1)建员工类,具有编号,姓名,性别的属性,员工和部门设置联系,添加Dept类的对象,并且定义两个属性Date类型的,出生日期和参加工作时间,写一个对日期输出格式的格式化方法和一个使用Comparable接口比较生日大小的方法。
    (2)建部门类,具有部门编号,部门姓名属性,设置与员工类的联系,定义员工类的对象和对象数组。
    (3)写Comparator接口,实现员工生出生日期的排序,在接口中写比较方法和equals方法。
    (4)测试类,实例化员工的信息并输出,还要输出两种比较员工出生年月的结果。

  • 问题
    不知道Date类的两个属性在哪里定义,起初在测试类直接建Date类的对象,并转化成String类型并输出。

  • 原因
    没有建立联系,出生年月和参加工作时间都是属于员工的。

  • 解决方案
    应该在员工类里定义两个属性,然后在输出时以格式化方式输出日期。

    public String toString(){
    return "员工编号: "+this.eno+" 姓名: "+this.ename+" 性别: "+this.sex+" 生日:"+new SimpleDateFormat("yyyy-MM-dd").format(birth) +"参加工作时间:"+new SimpleDateFormat("yyyy-MM-dd").format(date);
    }

3.在案例宠物商店的基础上,实现以下功能:

(1)展示所有宠物

(2)购买宠物

(3)显示购买清单

  • 程序设计思路
    (1)在宠物商店类中定义输出宠物的方法print()。
    (2)在主方法中,建宠物商店类型的对象,写一个返回宠物价钱的方法,当调用查找宠物的方法和用户输入的宠物名字相比较,一致时,返回宠物价钱,再用数组存储,并计算宠物的总价钱。
  • 问题
    这次题目有点复杂,没有达到题目要求,我的这个程序是对它的理解,接下来多看书了解方法内容,再重构。

(三)代码托管

  • 码云commit历史截图

posted @ 2017-04-25 12:43  lymm  阅读(271)  评论(0)    收藏  举报