1

LinkedList myQueue 内の日付のコレクションを空にして ArrayList myArrayList に入れ、Comparator を介して並べ替え、リンク リストを反復処理して各 Date を myQueue に戻そうとしています。

作成した日付を Comparator の Dates にキャストする何らかの理由で Date オブジェクトを My Comparator に送信するまで、すべて正常に動作します。

日付の形式は次のとおりです。

    Thu Jul 30 00:00:00 JST 1908

エラーは次のとおりです。

    Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to Date
at DateComparator.compare(DateComparator.java:14)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at QueueTest.main(QueueTest.java:76)

これは、myQueue 内のすべてのオブジェクトを myArrayList に配置する場所です。

    if (!myQueue.isEmpty()) {

            //Collections.sort(myQueue, new DateComparator());

            Object nextDate;

            ArrayList myArrayList = new ArrayList();

            while(!myQueue.isEmpty()){

                nextDate =  myQueue.removeFirst();

                myArrayList.add(nextDate);

            }

            Collections.sort(myArrayList, new DateComparator());

            Iterator it=myArrayList.iterator();

            while(it.hasNext()){

                myQueue.addLast(it.next());

            }

そして、これは問題が My Comparator にある場所です:

    Date d1 = (Date) a;
    Date d2 = (Date) b;

沖縄でコンピューターサイエンスの学校に通い始めたばかりで、犬以外にこのことについて本当に話す人がいなかったので、助けていただければ幸いです.

//編集:

これは、私の教授が Date オブジェクトを作成するために使用する必要がある Date() SuperClass です。

public class Date {

    private static int numberDates=0;    

    public static final int VALID_START_YEAR=1584; 

    private int year;  
    private int month;
    private int day;

    public Date() {
    month = 1;
    day = 1;
    year = 1970;
    numberDates++;   
    }

    public Date(int newMonth, int newDay, int newYear) {
    month = newMonth;
    day = newDay;
    year = newYear;
    numberDates++;   
    }


    public Date( Date other) {
    month = other.month;
    day = other.day;
    year = other.year;
    numberDates++;  
    }


    public Date( String date) {
    java.util.StringTokenizer st = new java.util.StringTokenizer(date,"/");

    month = Integer.parseInt(st.nextToken()); //extract next token
    day =   Integer.parseInt(st.nextToken());
    year =  Integer.parseInt(st.nextToken());
    numberDates++;  
    }


    public int getYear() {
    return year;
    }

    public int getMonth() {
    return month;
    }

    public int getDay() {
    return day;
    }


    public String toString() {
    return(month + "/" + day + "/" + year);
    }


    public static int getNumberDates() {
    return numberDates;
    }


    public void increment() {
    day++;   //stub for the actual method to be written later...
    }

    public static void clearNumberDates() {
    numberDates = 0;
    }



    public static boolean isValidDay(int month, int day, int year) {

    return true; 
    }


    public boolean equals( Object other ) { 

    if ((other instanceof Date) && 
        ((((Date)other).year==year) &&
         (((Date)other).month==month) &&
         (((Date)other).day==day)))
        return true;
    else
        return false;   
    }


    public int hashCode() {

    return (year + month + day) % 101;  
    }



    public int compareTo( Date other ) {
    if (equals(other))   
        return 0;

    else if (year < other.year)
        return -1;
    else if (year > other.year)
        return 1;

    else if (month < other.month)
        return -1;
    else if (month > other.month)
        return 1;

    else if (day < other.day)
        return -1;
    else if (day > other.day)
        return 1;
    else      
        return 0;    
    }
4

3 に答える 3

3

あなたの教授は、Dateとはまったく関係のない というカスタム クラスを提供していますjava.util.Date。したがって、単にキャストすることはできません。これら 2 つの異なるDate型の間で変換する必要がある場合は、コンバーターを作成する必要があります。

のインポートをjava.util.Dateコードから削除しDate、この割り当てに提供されている型のみを使用することをお勧めします。

これらの日付の並べ替えは、開始した方法で可能です。Dateの代わりにカスタム クラスを使用するには、DateComparator を再実装する必要がありますjava.util.Date

于 2012-07-14T08:11:52.617 に答える
2

場合によっては、次のコードを使用して、オブジェクトをキャストする前にオブジェクト タイプを確認する必要があります。

if (d1 instanceof Date) Date d1 = (Date) a;

于 2012-07-14T07:44:27.877 に答える
1

はい、日付をオブジェクトにキャストできます。

おそらくどこかに java.sql.Date をインポートしていると思いますが、実際には java.util.Date と java.sql.Date の間に競合があります。

私見では...

于 2012-07-14T07:41:04.480 に答える