《Java技術》第五次做業

(一)學習總結java

1.在上週完成的思惟導圖基礎上,補充本週的學習內容,對Java面向對象編程的知識點作一個全面的總結。
git

2.汽車租賃公司,出租汽車種類有客車、貨車和皮卡三種,每輛汽車除了具備編號、名稱、租金三個基本屬性以外,客車有載客量,貨車有載貨量,皮卡則同時具備載客量和載貨量。用面向對象編程思想分析上述問題,將其表示成合適的類、抽象類或接口,說明設計思路並畫出類圖。編程

設計思路:設計一個出租汽車類 interface接口定義編號、名稱、租金三個的get方法,再分別設計一個客車、貨車、皮卡三個類,客車除了三個公共屬性外還有載客量屬性,貨車還有載貨量屬性,皮卡還有載客量和載貨量屬性,再設計一個汽車租賃公司。數組

類圖:
app

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的ui

正確結果爲:this

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

正確程序爲:.net

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歷史截圖

相關文章
相關標籤/搜索