zoukankan      html  css  js  c++  java
  • java第五次实验作业

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

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

    类图如下

    设计思路:就是汽车统一链接到租赁公司的接口,之后抽象类一一去继承重写get存货量的方法。

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

    这个程序是不可以通过的明显着有着错误

    interface 的定义形式为

    interface{
    全局常量;
    抽象方法;
    {
    

    而且其中的抽象方法一定是public的形式是不可以更改的。
    程序可以修改成这个样子

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

    抽象类的定义就错了,应该是public abstract void 变量名称(类型)的形式。

    4.运行下面的程序#

    运行的结果为

    apple
    banana
    orange
    peach
    

    这里内置默认使用的是Arrays.sore()方法进行的数组之间的排序,之所以将String类的字符串进行排序就是默认将字符串的第一的字母的ASCII码值进行排序,如果想要按照别的方法进行排序,则就可重写Arrays方法。

    String的源码为

    首先String类是final的(final 关键字用于类说明该类是不能被继承的)
    类属性
    
    private final char value[];//这是用于存储String字符的数组
    
     private final int offset;//这是value数组的第一个有效的字符的index
    
     private final int count;//这是String中的字符个数
    
     private int hash; // 存储String的hashcode,默认是0
    
    下面开始介绍String的构造函数
    public String()//默认的构造函数,因为String字符串是不可变的,所以没有必要使用
    {
         offset = 0;
         count = 0;
         value = new char[0];
    }
    public String (String str){//使用已存在的字符串创建一个相同字符序列的字符串
                                        //Unless an explicit copy of original is needed, use of this constructor is  
                                        //unnecessary 
         //代码
         获取str的长度,int size = str.count;
         将str的字符序列拷贝到新的数组 char[] strValue = str.value;
         char[] v;
         if(strValue数组长度 > size){
              int off = str.offset;
              v = Arrays.copyOfRange(originalValue, off, off+size);
          }
          else{
               v = strValue ;
           }
          this.offset = 0;
          this.count = size;
          this.value = v;
    }
     下面给出  copyOfRange 函数的代码:
     public static char[] copyOfRange(char[] original, int from, int to) {
            int newLength = to - from;
            if (newLength < 0)
                throw new IllegalArgumentException(from + " > " + to);
            char[] copy = new char[newLength];
            System.arraycopy(original, from, copy, 0,
                             Math.min(original.length - from, newLength));
            return copy;
        }
    
    下面是使用char字符数组来初始化String的构造函数
     public String(char value[]) {
            this.offset = 0;
            this.count = value.length;
            this.value = StringValue.from(value);
        }
    在上面的代码中,有一个StringValue类:
    class StringValue {
        private StringValue() { }
    
        /**
         * Returns a char array that is a copy of the given char array.
         */
        static char[] from(char[] value) {
            return Arrays.copyOf(value, value.length);
        }   
    }
    通过这个类可以清楚地看到value是怎么从参数传过来的
    

    逆序排列1为:

    import java.util.Arrays;
    public class Test{
        public static void main(String[] args){
            String[] fruits = {"peach","banana","orange","apple"};
            String temp;
            Arrays.sort(fruits);
            for(int i = 0;i < fruits.length;i++)
            {
                System.out.println("升序排列为:"+fruits[i]);
            }
            for(int j=0;j<fruits.length-1;j++){
            	for(int k=0;k<fruits.length-j-1;k++){
            		if(fruits[k].compareTo(fruits[k+1])<0){
            			temp=fruits[k];
            			fruits[k]=fruits[k+1];
            			fruits[k+1]=temp;
            		}
            	}
            }
            for(int i=0;i<fruits.length;i++){
            	System.out.println("降序排列为:"+fruits[i]);
            }
        }
    }
    

    或者逆序排列2为

    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的实例。2.修改第三次作业的第一题,使用java.util.Date类表示职工的生日和参加工作时间,并将职工信息按照生日大小排序后输出。(分别用comparable和comparator实现)3.在案例宠物商店的基础上,实现以下功能:(1)展示所有宠物(2)购买宠物(3)显示购买清单


    程序设计思路:第二题利用简单的比较器进行比较。实际上comparable和comparetor感觉上是大同小异,里面的内容交换的机制实际是大同小异的。

    问题1:如何将字符串的日期进行比较大小

    原因:不理解带有字符串的日期格式的日期如何进行比较大小

    解决方案:根据老师给的实例还有上课讲的,可以把日期形式的字符串转化成Date类再用try catch进行捕捉,利用其中Date类里面的 gettime()可以进行比较大小。


    程序设计思路:第三题宠物商店的形式和简单的工厂设计的形式上是类似的,分别有一个Cat类,Dog,公共属性的接口,Pet商店类,还有一个测试类

    问题1:不知道该如何判断宠物商店里面是否有这个宠物,一直用if也太繁琐了

    原因:用户需要去选宠物,就要在宠物中去搜索,用到搜索就得有判断条件是否存在

    解决方案:看书上利用了字符串的indexof(String),在一个循环里面,如果有这个字符串,就是满足条件。


    码云截图#

    码云链接:https://git.oschina.net/hebau_cs15/cg.git#

  • 相关阅读:
    关于sublimeText3 设置格式化代码快捷键的问题
    前端网站收集汇总(持续更新)
    vue 插件(Sublime Text 3 常用插件以及安装方法)(转)
    关于实时监测网络每秒上下行流量问题
    Github上的iOS App源码 (中文)
    Mac上安装第三方应用显示包资源破坏解决办法
    vue开发环境搭建Mac版
    iOS跳转支付宝付款码和扫一扫页面
    深入出不来nodejs源码-timer模块(JS篇)
    深入出不来nodejs源码-events模块
  • 原文地址:https://www.cnblogs.com/chengang4747/p/6752015.html
Copyright © 2011-2022 走看看