2012-12-14 102 views
0

我试图按升序和降序对我的平面进行排序。我有一个飞机散列图,我想比较它们,这样我就可以通过timeLimitBeforeLand对地图进行排序,从而得到下一个飞机到期的和最后一个飞机。我写了一个compareTo方法,它看起来像:如何使用CompareTo按升序和降序排序PlaneMap

//--------------------------------------------------------------------------------------- 
// CompareTo() used with the Comparable implementation. 
//--------------------------------------------------------------------------------------- 
     public int compareTo(Object arg0) 
     { 
      if((arg0 != null) && (arg0 instanceof Plane)) 
      { 
      Plane p = (Plane) arg0; 
      return (int)Math.ceil(this.timeLimitBeforeLand - p.getLimitBeforeLand()); 
      } 
      return 0; 
     } 

的CompareTo需要timeLimitBeforeLand:

// --------------------------------------------------------------------------------------- 
//  Name:  getTimeLimitBeforeLand. 
//  Description: Get the time before every plane is going to land. 
//--------------------------------------------------------------------------------------- 
     public double getTimeLimitBeforeLand() 
     { 
     double fuelConsumption; 
     double timeLimitBeforeLand = 0; 

     for (TreeMap<String, Plane> theEntry : airlineMap.values()) { 
     for (Plane aPlane : theEntry.values()) { 
     if (aPlane.getPlaneType() == aPlane.getPlaneType().AIRBUS) { 
     System.out.println(" "); 
     System.out.println(aPlane); 
     fuelConsumption = 2; 
     timeLimitBeforeLand = (double) (aPlane.getFuelRemaining()/fuelConsumption); 
     System.out.println(timeLimitBeforeLand + " minutes to land."); 
     System.out.println(" "); 
     } else if (aPlane.getPlaneType() == aPlane.getPlaneType().CORPORATE) { 
     System.out.println(" "); 
     System.out.println(aPlane); 
     fuelConsumption = 3; 
     timeLimitBeforeLand = (aPlane.getFuelRemaining()/fuelConsumption); 
     System.out.println(timeLimitBeforeLand + " minutes to land."); 
     System.out.println(" "); 
     } else if (aPlane.getPlaneType() == aPlane.getPlaneType().PRIVATE) { 
     System.out.println(" "); 
     System.out.println(aPlane); 
     fuelConsumption = 4; 
     timeLimitBeforeLand = (double) (aPlane.getFuelRemaining()/fuelConsumption); 
     System.out.println(timeLimitBeforeLand + " minutes to land."); 
     System.out.println(" "); 
     } 
     } 
     } 
     return timeLimitBeforeLand; 
     } 

我尝试至今在mainApp:

TreeMap<String, PlaneStore> map = new TreeMap<String, PlaneStore>(); 

     ArrayList<Plane> copyList = new ArrayList<Plane>(map.); 

     Plane comp = new Plane(); 

     Collections.sort(copyList, plane); 

平面类:

//--------------------------------------------------------------------------------------- 
// Name:   Imports. 
// Description: To allow the use of different Java classes. 
//--------------------------------------------------------------------------------------- 
import java.io.Serializable; 
//--------------------------------------------------------------------------------------- 
//Name:   Class declaration. 
//--------------------------------------------------------------------------------------- 
public class Plane implements Comparable, Serializable 
{ 
//--------------------------------------------------------------------------------------- 
// Variable declarations. 
//--------------------------------------------------------------------------------------- 
    private String flightNumber; 
    public String airlineName; 
    private double fuelRemaining; 
    private int overdue; 
    private int passengerNumber; 
//--------------------------------------------------------------------------------------- 
// Enum declaration. 
//--------------------------------------------------------------------------------------- 
    private AIRPLANETYPE planeType; 
    private boolean isLanded = false; 
    public double timeLimitBeforeLand; 
//--------------------------------------------------------------------------------------- 
// Enum Constuctor. 
//--------------------------------------------------------------------------------------- 
    public enum AIRPLANETYPE 
    { 
     AIRBUS("1"), CORPORATE("2"), PRIVATE("3"); 

     private String planeName; 

     private AIRPLANETYPE(String planeName) 
     { 
      this.planeName = planeName; 
     } 

     public String getPlaneName() 
     { 
      return this.planeName; 
     } 
    } 
//--------------------------------------------------------------------------------------- 
// Constructor. 
//--------------------------------------------------------------------------------------- 
    public Plane(String flightNumber, String airlineName, 
      double fuelRemaining, int overdue, int passengerNumber, 
      AIRPLANETYPE planeType, boolean isLanded) 
    { 
     this.flightNumber = flightNumber; 
     this.airlineName = airlineName; 
     this.fuelRemaining = fuelRemaining; 
     this.passengerNumber = passengerNumber; 
     this.overdue = overdue; 
     this.planeType = planeType; 
     this.isLanded = isLanded; 
    } 
//--------------------------------------------------------------------------------------- 
// Getters and Setters. 
//--------------------------------------------------------------------------------------- 
    public String getAirlineName() 
    { 
     return airlineName; 
    } 
    public void setAirlineName(String airlineName) 
    { 
     this.airlineName = airlineName; 
    } 
    public void setOverdue(int overdue) 
    { 
     this.overdue = overdue; 
    } 
    public int getOverdue() 
    { 
     return overdue; 
    } 
    public String getFlightNumber() 
    { 
     return flightNumber; 
    } 
    public void setFlightNumber(String flightNumber) 
    { 
     this.flightNumber = flightNumber; 
    } 
    public double getFuelRemaining() 
    { 
     return fuelRemaining; 
    } 
    public void setFuelRemaining(double fuelRemaining) 
    { 
     this.fuelRemaining = fuelRemaining; 
    } 
    public int getPassengerNumber() 
    { 
     return passengerNumber; 
    } 
    public void setPassengerNumber(int passengerNumber) 
    { 
     this.passengerNumber = passengerNumber; 
    } 
    public AIRPLANETYPE getPlaneType() 
    { 
     return planeType; 
    } 
    public void setPlaneType(AIRPLANETYPE planeType) 
    { 
     this.planeType = planeType; 
    } 
    public boolean isLanded() 
    { 
     return isLanded; 
    } 
    public void setLanded(boolean isLanded) 
    { 
     this.isLanded = isLanded; 
    } 
    public double getLimitBeforeLand() 
    { 
     return timeLimitBeforeLand; 
    } 

public void setTimeLimitBeforeLand(double timeLimitBeforeLand) 
{ 
this.timeLimitBeforeLand = timeLimitBeforeLand; 
} 

//--------------------------------------------------------------------------------------- 
// CompareTo() used with the Comparable implementation. 
//--------------------------------------------------------------------------------------- 
    public int compareTo(Object arg0) 
    { 
     if((arg0 != null) && (arg0 instanceof Plane)) 
     { 
     Plane p = (Plane) arg0; 
     return (int)Math.ceil(this.timeLimitBeforeLand - p.getLimitBeforeLand()); 
     } 
     return 0; 
    } 
//--------------------------------------------------------------------------------------- 
// toString(). 
//--------------------------------------------------------------------------------------- 
    public String toString() 
    { 
     return "Plane: flightNumber=" + flightNumber + "." 
       + " airlineName=" + airlineName + "." 
       + " fuelRemaining=" + fuelRemaining + " litres." 
       + " overdue=" + overdue + " minutes." 
       + " passengerNumber="+ passengerNumber + "." 
       + " airplaneType=" + planeType + 
       "hasLanded=" + isLanded+ ".\n"; 
    } 
} 
+0

问题在哪里? (另外,'Plane''应该实现'Comparable ',而不是原始类型'Comparable'。) –

+0

问题是如何在主要设置我的商店进行排序? – user1900917

+0

我们还不知道还有什么可说的。什么是“PlaneStore”? –

回答

0

第二个在Collections.sort中的参数是Comparator而不是Plane。因为我看到没有提到一个比较的,你应该能够在Collections.sort

编辑使用自然顺序(由compareTo方法的定义在平面物体),并没有第二个论点:除非你有刚排除代码,没有创建任何平面实例,你在这里使用空集...

TreeMap<String, PlaneStore> map = new TreeMap<String, PlaneStore>(); 
    ArrayList<Plane> copyList = new ArrayList<Plane>(map.); 

,你会被PlaneStores所以你必须获得所有Plane S IN每个PlaneStore并整理在排序前将它们添加到您的copyList

我会考虑多研究一下Collections,并决定最适合您的需求。

相关问题