日期:2014-05-20  浏览次数:20687 次

请帮我看一个这个日历输出程序,输出有点问题,我不知怎么改
输出时格式有点不对,检查半天,不知问题所在,请帮忙。

import java.text.DateFormatSymbols;
import java.util.*;

public class Test
{
public static void main(String[] args)
{

String[] weekdayNames = new DateFormatSymbols().getWeekdays();
for(int i=1; i<=7; i++)
{
  System.out.print(weekdayNames[i]);
  System.out.print(" ");
  }
  System.out.println();
  
  
  GregorianCalendar calendar = new GregorianCalendar();
  int firstDayOfWeek = calendar.getFirstDayOfWeek();
  calendar.set(Calendar.DAY_OF_MONTH, 1);
  int weekday = calendar.get(Calendar.DAY_OF_WEEK);
   int blank = 0;
   while(weekday != firstDayOfWeek)
   {
    blank++;
    calendar.add(Calendar.DAY_OF_MONTH,-1);
    weekday = calendar.get(Calendar.DAY_OF_MONTH);    
   }
   
   for(int i=0; i<blank; i++)
   {
    System.out.print(" ");
   }
   
   int month = calendar.get(Calendar.MONTH);
   calendar.set(Calendar.DAY_OF_MONTH, 1);
   int day = calendar.get(Calendar.DAY_OF_MONTH);
   System.out.printf("%7d", day);
   calendar.add(Calendar.DAY_OF_MONTH, 1);
   while(calendar.get(Calendar.MONTH) == month)
   {                
    weekday = calendar.get(Calendar.DAY_OF_WEEK);
    if(weekday == firstDayOfWeek)
    {
    System.out.println();
    }
    day = calendar.get(Calendar.DAY_OF_MONTH);    
    System.out.printf("%7d", day);
    calendar.add(Calendar.DAY_OF_MONTH, 1);        
   }    
}
}


我的程序输出时是这样的



但应该在3日时转下一行才对,但是没有转行,不知为什么,当然肯定是weekday == firstDayOfWeek不成立所致,但是我的程序应该在3日时weekday == firstDayOfWeek成立才对,不知为什么不成立,没有转到下一行?

现有是11月份,电脑显示的排列应该是

所以我的程序不知为什么排列不正确?

------解决方案--------------------
引用:
为什么图片没有显示,再发一次,

这个是我自己的输出。


你上面的操作改变了你的calendar的值,获取的月份已经不是11月了,重设下应该就可以。
   
   calendar.setTime(new Date());
   int month = calendar.get(Calendar.MONTH);
   calendar.set(Calendar.DAY_OF_MONTH, 1);