import javax.swing.JOptionPane;public class PrintCalendar { public static void main(String[] args) { String stringYear = JOptionPane.showInputDialog("Input the year(e.g. 2009):"); int year = Integer.parseInt(stringYear); String stringMonth = JOptionPane.showInputDialog("Input the month:"); int month = Integer.parseInt(stringMonth); printMonth(year,month); } static void printMonth(int year,int month) { printMonthTitle(year,month); printMonthBody(year,month); } static void printMonthTitle(int year,int month) { System.out.println(" "+getMonthName(month)+" "+year); System.out.println("------------------------------"); System.out.println(" Sun Mon Tue Wed Thu Fri Sat "); } static String getMonthName(int month) { String monthName = null; switch(month){ case 1: monthName = "January"; break; case 2: monthName = "February"; break; case 3: monthName = "March"; break; case 4: monthName = "April"; break; case 5: monthName = "May"; break; case 6: monthName = "June"; break; case 7: monthName = "July"; break; case 8: monthName = "August"; break; case 9: monthName = "September"; break; case 10: monthName = "October"; break; case 11: monthName = "November"; break; case 12: monthName = "December"; break; } return monthName; } static void printMonthBody(int year,int month){ int startDay = getStartDay(year,month); for(int i=1;i<=startDay;i++) System.out.print(" "); int monthDays = getMonthDays(year,month); for(int i=1; i<=monthDays; i++){ if(i<10) System.out.print(" "+i); else System.out.print(" "+i); if((i+startDay)%7 == 0) System.out.println(); } System.out.println(); } static int getStartDay(int year,int month) { int startDay1800 = 3; int total = getTotalDays(year,month); return (total+startDay1800) % 7; } static int getTotalDays(int year,int month){ int totalDays = 0; for(int i=1800;i<year;i++){ if(isLeap(year)) totalDays += 366; else totalDays += 365; } for(int i=1;i<month;i++) totalDays += getMonthDays(year,month); return totalDays; } static boolean isLeap(int year) { return year % 400 ==0||(year % 4 ==0 && year % 100 != 0); } static int getMonthDays(int year,int month) { if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31; if(month==4||month==6||month==9||month==11) return 30; if(month==2) return isLeap(year)? 29:28; return 0; }} 输出有点问题啊,为什么啊?? 不明白

评论