2013-08-24 72 views
-2

我問過你關於GregorianCalendarCalendar有人說Calendar比較好。所以我做了Calender班。兩個問題

我有一個方法的問題:JavaApplication1#whichIsEarlier(),總是收到錯誤。請檢查它,如果可以的話。如何解決它?我會感謝你的幫助。

public class JavaApplication1 { 


public static void main(String[] args) { 
    Calendar yy =Calendar.getInstance(); 
    Calendar xx= Calendar.getInstance(); 
    xx.set(2001, 10,10); 
    Data dt = new Data(yy); 
    Data xt = new Data(xx); 
    Data dd = new Data(yy, xx); 
    System.out.println(dt.toString()); 
    System.out.println(xt.toString());  
    System.out.println(dd.whichIsEarlier()); 
} 
} 


class Data { 
    private Calendar calendar; 
    Calendar cale; 
    Data(Calendar x){ 

    calendar = x; 
} 

Data(Calendar x, Calendar y){ 
    calendar = x; 
    cale = y; 
} 

public String toString(){ 
    String months[] = {"Jan","Feb", "Mar" , "Apr", "Mai", "June", "July","Aug", 
     "Sep", "Okt", "Nov", "Dec"}; 
    String str = ""; 
    str = "Data: "+ calendar.get(Calendar.DATE) +" "+ months[calendar.get(Calendar.MONTH)]+ 
     " "+ calendar.get(Calendar.YEAR); 
     return str; 

    } 

    public String whichIsEarlier(Calendar cale){ 
     String str = ""; 
     if(calendar.after(cale)) str = calendar.toString() ; 
     else str = cale.toString(); 
     return str +" jest wczesniej"; 
    } 
} 
+5

首先檢查方法'whichIsEarlier'的簽名,然後看看你是否正確調用呢? –

+3

什麼是錯誤信息? – hexafraction

+9

「有人說''日曆'比較好」 - 好吧'GregorianCalendar'只是'Calendar'的一個子類。這不是一個「更好」的問題 - 這是根據上下文選擇使用哪一個的問題。 –

回答

0

這是我會怎麼收拾你的代碼:

class Data { 
    private Calendar calendar; 

    Data(Calendar x) { calendar = x; } 

    public String whichIsEarlier(Data other) { 
    return (calendar.after(other.calendar)? this : other) 
     + " jest wczesniej"; 
    } 

(我省略掉toString,我沒有進入它的問題,此答案)。

注:

  • 除去cale實例變量
  • 除去兩個參數的構造;
  • whichIsEarlier接受另一個Data,而不是另一個Calendar;
  • 它的返回值不會調用calendar.toString,而是您自己的對象的toString
  • 並且它會隱式地執行(字符串連接會這樣做)。

而現在的主要方法應該像

public static void main(String[] args) { 
    Calendar yy =Calendar.getInstance(); 
    Calendar xx= Calendar.getInstance(); 
    xx.set(2001, 10,10); 
    Data dt = new Data(yy); 
    Data xt = new Data(xx); 
    System.out.println(dt.whichIsEarlier(xt)); 
} 
+1

I知道我可以爲此受到懲罰,但非常感謝你,我很長一段時間都在尋找它,我沒有人可以解釋我。:)! – dzoni

+0

沒有懲罰,這裏的人只是想提醒新人接受答案,你已經有:-) –

0
System.out.println(dd.whichIsEarlier()); 

是有問題的,你只能定義一個Data#whichIsEarlier(Calender)

請確保whichIsEarlier呼叫通過日曆對象,或者創建一個新的whichIsEarlier,該新的whichIsEarlier不帶任何參數並且預定義了日曆。

+0

好吧,所以我必須這樣做:System.out.println(dt.whichIsEalier(xx)); ? – dzoni

+0

@dzoni是的,所以你可以調用'Data#whichIsEarlier(Calendar)'。 – hexafraction

+0

好的,謝謝,但出現的下一個問題是calendar.toString()裏面的其中的IsEalier,它不起作用:( – dzoni