2013-08-24 30 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