1

フライトコントローラーアプリケーションを作成しています。私が欲しい機能のビットは、特定の航空会社による次のフライトが何であるかをユーザーに伝えることができるようにすることです。文字列と平面を格納するハッシュマップがあります。私のプレーンクラスでは、Comparableを実装しており、compareToメソッドがあります。誰かがcompareToメソッドを使用して飛行機を降順で配置し、次のフライトを表示するのを手伝ってくれませんか。遅延変数でフライトを手配したい。

これは、私がcompareToを使用しなければならないMainAppの場合です

switch (nextChoice) 
                    {
                    case 1:
                        airlineMap.printAirline("Aer Lingus");
                        break;
                    case 2:
                        airlineMap.printAirline("Brittish Airways");
                        break;
                    case 3:
                        airlineMap.printAirline("Eithad");
                        break;
                    case 4:
                        airlineMap.printAirline("Iberia");
                        break;
                    case 5:
                        airlineMap.printAirline("Quantas");
                        break;

航空会社の印刷物に降順を追加したいと思います:airlineMap.printAirline( "Aer Lingus");

これが私の飛行機のクラスです:

import java.util.LinkedList;

public class Plane implements Comparable
{   
    private String flightNumber;
    public String airlineName;
    private double fuelRemaining;
    private int overdue;
    private int passengerNumber;
    private AIRPLANETYPE planeType;

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

    public Plane(String flightNumber, String airlineName, double fuelRemaining, int overdue, int passengerNumber, AIRPLANETYPE planeType) {
        this.flightNumber = flightNumber;
        this.airlineName = airlineName;
        this.fuelRemaining = fuelRemaining;
        this.passengerNumber = passengerNumber;
        this.overdue = overdue;
        this.planeType = planeType;
    }


    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 int compareTo(Object arg0) {
        if((arg0 != null) && (arg0 instanceof Plane))
        {
            Plane p = (Plane) arg0;
            return (int)Math.ceil(this.overdue - p.getOverdue());
        }
        return 0;
    }
    public String toString() {
        return "Plane: flightNumber=" + flightNumber + "."
                + " airlineName=" + airlineName + "."
                + " fuelRemaining=" + fuelRemaining + " litres."
                + " overdue=" + overdue + " minutes."
                + " passengerNumber="+ passengerNumber + "."
                + " airplaneType=" + planeType + ".\n";
    }
}
4

1 に答える 1

2

は順序付けされていないためHashMap、飛行機を並べ替えるには2つの方法があります。

  • それらをソートされたコンテナに入れる、または
  • それらをArrayList<Plane>または配列Plane[]に入れ、そのリストまたは配列を並べ替えます

最初のアプローチは、次の方法で実現できTreeSet<Plane>ます。飛行機をセットに入れ、「自然な」順序(つまり、compareTo方法と一致する順序)で反復します。

2番目のアプローチでは、プレーンを別のコンテナまたは配列にコピーしてから、sortメソッド(またはArrays.sortアレイの場合は静的メソッド)を使用して、実装で設定された順序に従ってプレーンを順序付けする必要がありますcompareTo

編集:(コメントに基づく)ハッシュマップ内に特定の順序で平面を格納する問題に対処する1つの方法は、次のようなツリーセットのハッシュマップを作成することです。

Map<String,TreeSet<Plane>> airlineMap = new HashMap<String,TreeSet<Plane>>();

各航空会社に飛行機を追加すると、実装に基づいた順序で飛行機が維持されますcompareTo。手元にある場合は、またはを呼び出すTreeSet<Plane>ことで、次または前を簡単に見つけることができます。Planehigherlower

Math.signumメソッドではなく、を使用する必要がMath.ceilありますcompareTo

于 2012-12-13T00:16:33.857 に答える