import javax.swing.*; public class EternalCalendar { public static void main(String []args) { int[] daysOfMonth={31, 28, 31, 30, 31,30, 31, 31, 30, 31, 30, 31};//각 달의 날짜수 String[] nameOfday={"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};//각 요일의 이름 int dYear=Integer.parseInt(JOptionPane.showInputDialog(null, "알고 싶은 연도 입력:", "만년달력", JOptionPane.QUESTION_MESSAGE)); int dMonth=Integer.parseInt(JOptionPane.showInputDialog(null, "알고 싶은 월 입력:", "만년달력", JOptionPane.QUESTION_MESSAGE)); //알고 싶은 년/월을 입력받음 int totalDays=0;//그 해까지의 총 날짜수 for(int i=1;i<dYear;i++) { if((i%4==0 && i%100!=0) || i%400==0) totalDays+=366; else totalDays+=365; }//그 전해까지의 총 날짜수 if((dYear%4==0 && dYear%100!=0) || dYear%400==0) daysOfMonth[1]=29;//입력받은 해의 2월에 윤달이 있는지 계산 for(int i=1;i<dMonth;i++)//해당하는 해의 그 전달까지의 날짜수 totalDays+=daysOfMonth[i-1]; System.out.println(dYear+"년 "+dMonth+"월의 달력"); for(int i=0;i<7;i++)//달력의 상단에 요일 출력 System.out.print(nameOfday[i]+"\t"); System.out.print("\n"); for(int i=0;i<(totalDays+1)%7;i++) System.out.print("\t");//해당 달의 첫날의 요일 설정. +1인 이유는 1년 1월 1일은 일요일 for(int i=1;i<daysOfMonth[dMonth-1]+1;i++) {//1일부터 마지막 날짜까지 찍음 System.out.print(i+"\t"); if((i+totalDays+1)%7==0)//한 줄에 7개만 들어가도록 줄바꿈(최초의 빈칸도 계산) System.out.print("\n"); } System.out.print("\n"); } }