(一)學習總結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歷史截圖