java - 按车牌号比较汽车对象列表

标签 java arrays sorting object subclass

好吧,我正在做一项相当复杂的作业。基本上我有一类汽车,然后是它的子类(乘用车和非乘用车),然后是它们的子类(小型汽车、小型皮卡车等)。我还有一个 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;
}

}

数据库类:

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;
}
}

驱动程序类别:

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());


}
}

Sorting.java类中的插入排序方法

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

// 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;

  }

}

}

最佳答案

您只需实现 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);
     }

关于java - 按车牌号比较汽车对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022363/

相关文章:

java - 如何在不同步代码的情况下共享对 java 资源的访问?

java - 如何避免 GSON JsonObject 中的反斜杠?

javascript - 如何根据不同的数组将数组的值更改为另一个值?

java - 尝试使用 hashmap 来计算数组中单词的频率

string - Scala:使用素数的两个字符串的字谜

java - 如何在Java升序中按内部值对对象排序?

java - 是否可以仅使用用户的证书来查询 Active Directory 中的用户?

javascript - 将数组项复制到另一个数组中

arrays - 最小缓冲区的值是多少,这样一个int数组将按升序排序?

java - 启动带有存储参数的-jar