2014-02-25 33 views
0

好吧,我正在做一個相當複雜的任務。基本上我有一類汽車,然後是它的子類(乘用車和非乘客),然後是它們的子類(超小型汽車,小型皮卡車等)。我也有一個sort.java類和各種排序方法。我應該創造一系列汽車,並且他們按照車牌號對它們進行分類。按車牌號比較汽車物件列表

Automobile class: 

public class Automobile{ 
public String Name; 
public String Colour; 
public String plateNum; 

public Automobile (String eName, String eColour, String eplateNum) 
{ 
    Name = eName; 
    Colour = eColour; 
    plateNum = eplateNum; 
} 
public String toString() 
{ 
String result = "Name: " + Name +"\n"; 
result += "Colour: "+Colour+"\n"; 
result+= "Plate Number: "+ plateNum; 

return result; 
} 


}//end Automobile 

轎車類:

abstract public class passengerCar extends Automobile{ 
public abstract double fee(); 
public passengerCar (String eName, String eColour, String eplateNum) 
{ 
    super (eName, eColour, eplateNum); 

} 

public String toString() 
{ 
    String result = super.toString(); 

    result += "\n Fee: "+fee(); 

    return result; 
} 


} 

微型類:(子類的實例)

public class subCompact extends passengerCar{ 
public double litres; 
public subCompact (String eName, String eColour, String eplateNum, double eLitres) 
{ 
    super (eName, eColour, eplateNum); 
    litres = eLitres; 

} 
public double fee(){ 
double cost = (litres/10); 
return cost; 
} 

}

Database類:

public class CarDataBase{ 

private Automobile[] database; 
private int count; 

//creates initially empty database 
public CarDataBase() 
{ 
database = new Automobile[100]; 
count =0; 
} 


public void addminiCompact(String eName, String eColour, String eplateNum, double eLitres) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new miniCompact (eName, eColour, eplateNum, eLitres); 
    count++; 
} 
public void addsubCompact(String eName, String eColour, String eplateNum, double eLitres) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new subCompact (eName, eColour, eplateNum, eLitres); 
    count++; 
} 
public void addCompact(String eName, String eColour, String eplateNum, double eLitres) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new Compact (eName, eColour, eplateNum, eLitres); 
    count++; 
} 
public void addMidsize(String eName, String eColour, String eplateNum, double eLitres) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new Midsize (eName, eColour, eplateNum, eLitres); 
    count++; 
} 
public void addLarge(String eName, String eColour, String eplateNum, double eLitres) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new Large (eName, eColour, eplateNum, eLitres); 
    count++; 
} 
public void addSmallPickup(String eName, String eColour, String eplateNum, double eGvwr) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new SmallPickup (eName, eColour, eplateNum, eGvwr); 
    count++; 
} 
public void addStandardPickup(String eName, String eColour, String eplateNum, double eGvwr) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new StandardPickup (eName, eColour, eplateNum, eGvwr); 
    count++; 
} 
public void addVan(String eName, String eColour, String eplateNum) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new Van (eName, eColour, eplateNum); 
    count++; 
} 
public void addTwoSeater(String eName, String eColour, String eplateNum) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new TwoSeater (eName, eColour, eplateNum); 
    count++; 
} 
public void addSpecialPurpose(String eName, String eColour, String eplateNum, double eGvwr) 
{ 
    if(count == database.length) 
    increasesize(); 
    database[count] = new SpecialPurpose (eName, eColour, eplateNum, eGvwr); 
    count++; 
} 
public String toString() 
{ 
String report = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; 
report +="Number of Vechicles: "+count+"\n\n"; 
report+= "Vehicle list:\n\n"; 
for (int i = 0; i< count; i++) 
    { 
    report+= database[i]+"\n\n"; 
    } 
return report; 
} 



private void increasesize() 
{ 
Automobile[] temp = new Automobile[database.length *2]; 
for (int car = 0; car<database.length; car++) 
    temp[car] = database[car]; 
    database = temp; 
} 
} 

驅動程序類:類Sorting.java

public class Driver implements Comparable{ 
public static void main(String[] args){ 

CarDataBase db = new CarDataBase(); 

db.addsubCompact("Ford","blue","ABC123",2500); 
db.addSmallPickup("Chevrolet","green","CBA321", 4000); 
Sorting.insertionSort(db); 
System.out.print(db.toString()); 


} 
} 

插入排序方法

//----------------------------------------------------------------- 

// Sorts the specified array of objects using the insertion 

// sort algorithm. 

//----------------------------------------------------------------- 

public static void insertionSort (Comparable[] list) 

{ 

    for (int index = 1; index < list.length; index++) 

    { 

    Comparable key = list[index]; 

    int position = index; 

// Shift larger values to the right 

    while (position > 0 && key.compareTo(list[position-1]) > 0) 

    { 

     list[position] = list[position-1]; 

     position--; 

    } 

    list[position] = key; 

    } 

} 

} 
+4

是什麼您的具體問題/問題/問題?你已經發布了代碼,但是你還沒有描述任何問題...... – maerics

+0

創建汽車數組或列表,並使用比較器對板號進行排序。爲什麼要寫一個插入排序算法的痛苦? –

+0

我的問題是插入排序方法無法正常工作,即使我試圖將數據轉換爲Comparable。並且assinment指出我們必須按照原樣使用insertionSort方法。 – user3267872

回答

2

你一定要實現汽車Comparable<Automobile>並添加compareTo(Automobile)方法:

public int compareTo(Automobile o) { 
     if (o == null) 
      return -1; 
     if (this.plateNum == null) 
      return 1; 
     return this.plateNum.compareTo(o.plateNum); 
    } 
+0

@ user3267872作爲一般規則:如果您試圖比較兩件事情,那麼它們需要具有可比性。翻譯爲Java:如果您嘗試比較某個類的對象,則該類必須實現「Comparable」。在你的情況下,你需要比較'汽車'來對它們進行排序,因此'Automobile'必須實現'Comparable'。 –

+0

我將Jeao的代碼添加到我的Automobile類中,並添加了 Sorting.insertionSort(db); 爲了我的司機,但我得到以下錯誤 Driver.java:10:錯誤:方法插入排序類排序不能應用於牛逼 o給定類型; Sorting.insertionSort(db); ^ 要求:可比[] 發現:汽車數據庫 原因:實際參數汽車數據庫不能滿足通過HOD 調用轉換 – user3267872

+0

轉化爲可比[] @ user3267872它實際上'實現可比'。現在你遇到了一些非常基本的Java問題。您需要閱讀[Interfaces]上的官方教程(http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html)。它簡潔明瞭,將回答你在這裏遇到的所有問題。此外,你正在分揀汽車,而不是數據庫 - 它的「汽車」需要具有可比性,而不是「CarDataBase」......請閱讀該教程! :) –