博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java第五次作业
阅读量:4480 次
发布时间:2019-06-08

本文共 4236 字,大约阅读时间需要 14 分钟。

《Java技术》第五次作业

(一)学习总结

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

1080246-20170424112642334-283320785.jpg

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

1080246-20170424112658209-1663218840.png

设计思路:

定义三个普通类:客车类,货车类,皮卡类,一个抽象类:汽车类,两个接口:载客量和载货量。抽象类中有基本属性,普通类中分别为他们的特殊属性。皮卡同时实现两个接口。

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:Dog类里没有实现Animal接口中的run()方法。(必须实现接口中定义的所有方法。 )
  • 错误2:接口中的方法实际上是public类型的,在接口中可以省略,但是类中不能省略。
    修改后为:
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();        }    }

运行结果为:

I'm breathingI'm eating

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
, CharSequence {
  • 从源码中可以看到String类实现了Comparable接口,然后用compareTo方法实现的.
    方法提供了比较两个字符串大小的依据,然后Arrays.sort会根据这个依据进行排序
public int compareTo(String anotherString) {    int len1 = count;    int len2 = anotherString.count;    int n = Math.min(len1, len2);    char v1[] = value;    char v2[] = anotherString.value;    int i = offset;    int j = anotherString.offset;    if (i == j) {        int k = i;        int lim = n + i;        while (k < lim) {        char c1 = v1[k];        char c2 = v2[k];        if (c1 != c2) {            return c1 - c2;        }        k++;        }    } else {        while (n-- != 0) {        char c1 = v1[i++];        char c2 = v2[j++];        if (c1 != c2) {            return c1 - c2;        }        }    }    return len1 - len2;    }
  • 重写了Comparator接口中的compare方法,使其可以倒序输出:
import java.util.Arrays;import java.util.Comparator;public class Test {    public static void main(String[] args) {        String[] fruits = { "peach", "banana", "orange", "apple" };        Arrays.sort(fruits, new StringComparator());        for (int i = 0; i < fruits.length; i++) {            System.out.println(fruits[i]);        }    }}class StringComparator implements Comparator
{ public int compare(String o1, String o2) { char a = o1.charAt(0); char b = o2.charAt(0); if(o1.equals(o2)){ return 0; }else if(a>b){ return -1; }else{ return 1; } }}

输出结果为:

peach orangebananaapple

(二)实验总结

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

  • 程序设计思路:定义一个MusicBox接口,具有play()方法,定义两个音乐盒类,分别实现MusicBox接口,定义一个工厂类MusicBoxFactory,实现对PianoBox和Violinbox对象的创建。

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

  • 程序设计思路:删除原有的date类,导入java.util.Date包,首先用SimpleDateFormat定义一个日期的模板:"yyyy-MM-dd",定义两个字符串数组,为其赋值,再把字符串数组利用SimpleDateFormat转成日期类数组,分别赋给每一个员工。

  • 问题:日期显示不正常,总为1970-01-01

    原因:不能用new Date()直接赋给属性。
    解决方案:定义模板后,将字符串数组转换成日期数组后再用循环赋值。

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

(1)展示所有宠物
(2)购买宠物
(3)显示购买清单

  • 程序设计思路:定义Pet接口,一个dog类和一个cat类,分别实现接口,在test类中定义显示所有动物的方法和购买方法。
  • 问题:进行购买时,狗和猫不能同时购买
    原因:狗和猫不是同一个类
    解决方案:把狗和猫放到两个对象数组中,查找时先从狗中查找再从猫中查找,每找到一个就把该对象复制到另一个相应的数组中,最后输出两个副本对象数组

(三)

  • 码云commit历史截图
    1080246-20170424112839115-1086274333.png

转载于:https://www.cnblogs.com/cheng666/p/6755994.html

你可能感兴趣的文章
2014-5-30 总结
查看>>
【H3 BPM工作流程管理产品小故事】第四篇 子表创建
查看>>
洛谷P1148 拱猪计分
查看>>
MySQL服务器的安装和配置,MySQL Workbench 8.0.12安装,MySQL的基本使用
查看>>
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
C#与数据结构--图的遍历
查看>>
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Android呼叫转移跳转到拨号盘 “#”号显示不出来
查看>>
Python中的生成器与yield
查看>>
JQuery 的Bind()事件
查看>>
Maven 常用配置
查看>>
Objects源码解析
查看>>
video
查看>>
栈的c语言顺序实现(动态申请空间)
查看>>