import java.text.DateFormatSymbols;
import java.util.*;
public class Demo01 {    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       GregorianCalendar d=new GregorianCalendar();
       int today=d.get(Calendar.DAY_OF_MONTH);
       int month=d.get(Calendar.MONTH);
       d.set(Calendar.DAY_OF_MONTH,1);
       int weekday=d.get(Calendar.DAY_OF_WEEK);
       int firstDayOfWeek=d.getFirstDayOfWeek();
       int indent=0;
    while(weekday!=firstDayOfWeek){
           indent++;
           d.add(Calendar.DAY_OF_MONTH,-1);
           weekday=d.get(Calendar.DAY_OF_WEEK);
       }
     String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
     do{
         System.out.printf("%4s",weekdayNames[weekday]);
         d.add(Calendar.DAY_OF_MONTH, 1);
         weekday=d.get(Calendar.DAY_OF_WEEK);
     }
     while(weekday!=firstDayOfWeek);
     System.out.println();
     for(int i=0;i<=indent;i++)
        System.out.print(" ");
     d.set(Calendar.DAY_OF_MONTH, 1);
     do{
         int day=d.get(Calendar.DAY_OF_MONTH);
         System.out.printf("%3d", day);
         if(day==today)System.out.print("*");
         else System.out.print(" ");
         d.add(Calendar.DAY_OF_MONTH, 1);
         weekday=d.get(Calendar.DAY_OF_WEEK);
         if(weekday==firstDayOfWeek)System.out.println();
     }
     while(d.get(Calendar.MONTH)==month);
     if(weekday!=firstDayOfWeek)System.out.println();
    }}
其中主要就以下代码,哪位大侠解释一下:
1,int firstDayOfWeek=d.getFirstDayOfWeek();
int indent=0;
while(weekday!=firstDayOfWeek){
indent++;
d.add(Calendar.DAY_OF_MONTH,-1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
就是不太明白d.add(Calendar.DAY_OF_MONTH,-1);具体什么意思,为什么-1呢?2,String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
do{
System.out.printf("%4s",weekdayNames[weekday]);
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
while(weekday!=firstDayOfWeek);
System.out.println();
其实还是add()方法问题,看了api后还是有点疑惑,到底是哪里增加或减少,减少的是什么呢?整个循环看到底都是问号,哪位大侠解释解释啊?

解决方案 »

  1.   

    add()方法问题,主要看里面的参数啊,里面的参数为正,就是加啊,参数为负,当然是减
      

  2.   

    1.d.add(Calendar.DAY_OF_MONTH,-1)这是因为本月的第一天不一定是周日,所以程序的第一部分处理是要查看出第一天距离上一个周日需要多久的空格,他-1其实是让GregorianCalendar d回到了上个月的对应的日子了,直到遇见上个月的周日。
    2.第二个add其实是在不断的增加日子来输出而已你应该先明白这个程序是要干嘛的,他不过是想象电脑一样的输出这个月的日历表而已,最好的方法就是自己debug一下,然后再看看API的说明文档,就可以了。我也是新手,也是看着这个努力学习Java呢。呵呵!