0

私はこのプログラムで、公開年を見て、映画のリストを大きいものから小さいものの順にソートすることになっています。ここに方法があり、それを印刷する方法もあります。5,4,3,2,1の順ではなく、abcの順で並んでいます。

System.out.println("Sorted by Year - descending:"); 
        sortYears(myMovies,0,myMovies.length-1);
        printMovies(myMovies);

public static void sortYears(Movie4[] myMovies , int low, int high)
    {
        if( low >= high )
            return;

        int mid = (low + high) / 2;

        sortYears(myMovies, low, mid);
        sortYears(myMovies, mid+1, high);
        mergYears(myMovies, low, mid, high);
    }

    public static void mergYears(Movie4[] myMovie, int low, int mid, int high)
    {
        int tempLow = low;
        int tempMid = mid;
        int indexCnt =0;

        while( tempLow < mid || tempMid < high)
        {
            if( tempLow > mid)
            {
                myMovie[indexCnt].equals(myMovie[tempMid]);
                tempMid++;
            }
            else if( tempMid > high)
            {
                myMovie[indexCnt].equals(myMovie[tempLow]);
                tempLow++;
            }
            else if(myMovie[tempLow].getYear() < myMovie[tempMid].getYear())
            {
                myMovie[indexCnt].equals(myMovie[tempLow]);
                tempLow++;
            }
            else
            {
                myMovie[indexCnt].equals(myMovie[tempMid]);
                tempMid++;
            }
            indexCnt++;
        }

        for(int x = low; x < high; x++)
        {
            myMovie[x].equals(myMovie[x-low]);
        }

    } 

映画 4:

public class Movie4 {

    // instance variables 
    String title ;
    int year;
    String studio;

    /**
     * Constructor for objects of class InventoryItem
     */
    public Movie4(String t,int y,String s)
    {
        // initialise instance variables
        title = t;
        year = y;
        studio = s;
    }
    public String getTitle()
    {
        return title;
    }
    public int getYear()
    {
        return year;
    }
    public String getStudio() 
    {
        return studio;
    }
     @Override
    public String toString()
    {
        return title + ", " + year + ", "+studio;
    }
    public boolean equals (Movie4 other)
    {
        return(title.equals(other.getTitle()));
    }
      public int compareTo(Object other) 
        {
        int result;
        String otherTitle = ((Movie4)(other)).getTitle();
        result = title.compareTo(otherTitle);
        return result;
    }
}
4

1 に答える 1

0

Movie42 つのオブジェクトをどのように比較しますか? 私は2つの方法を提案します:

オプション1:

クラスのメソッドをオーバーライドするMovie4必要があります。equals()そうすれば、並べ替えロジックが正しく機能します。これを参照してください。

オプション #2:

ビルド内の並べ替えを使用するために Arrays.sort() メソッドを使用する場合は、クラスを実装ComparableしてcompareTo()メソッドを持たせる必要があります。これを見る

于 2013-06-01T19:29:44.533 に答える