0
나는 1 년 동안 주어진 달력을 인쇄하려고합니다. 코드는 매월 정확한 날짜에 시작되지만 7 개의 숫자를 계속해서 계산하고 동일한 시작 열로 다음 줄을 반환합니다. 이 문제를 어떻게 해결할 수 있습니까?캘린더 프린터 - 각 새 줄을 반환하는 방법
여기에 내 현재 출력 :
2017
January
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
February
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
그리고 년 동안 계속됩니다. 오류가 printCalendar 메서드에 있다고 생각하지만 무엇을해야할지 모르겠다. 요일이 인쇄 된 데이터를 엉망으로 무엇을 사용하는
import java.util.Scanner;
import java.io.*;
public class CalendarPrinter{
public static void main(String[]args)throws IOException{
Scanner kbd = new Scanner(System.in);
System.out.println("Calendar Printer\n");
System.out.print("Enter the year? ");
int year = kbd.nextInt();
printCalendar(year);
System.out.println("\n" + year + ".txt generated.");
}
public static void printCalendar(int year) throws IOException {
PrintWriter outputFile = new PrintWriter(year + ".txt");
outputFile.println(" " + year);
for(int month = 1; month <=12; month++) {
outputFile.println("\n " + getMonthName(month));
outputFile.println("Sun Mon Tue Wed Thu Fri Sat");
int numDays = getNumberofDays(month, year);
for(int day = 1; day <= numDays; day++){
int dayWeek = getDayofTheWeek(day, month, year);
for(int k = 0; k < dayWeek; k++)
outputFile.print(" ");
outputFile.printf("%3d ", day);
if(day % 7 == 0) {
outputFile.println("");
dayWeek = 0;
}
}
}
outputFile.close();
}
public static String getMonthName(int month){
String name;
switch(month){
case 1: name = "January";
break;
case 2: name = "February";
break;
case 3: name = "March";
break;
case 4: name = "April";
break;
case 5: name = "May";
break;
case 6: name = "June";
break;
case 7: name = "July";
break;
case 8: name = "August";
break;
case 9: name = "September";
break;
case 10: name = "October";
break;
case 11: name = "November";
break;
case 12: name = "December";
break;
default: name = "Unknown";
break;
}
return name;
}//method
public static int getNumberofDays(int month, int year){
int numDays;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
numDays = isLeap(year)? 29:28;
break;
default:
numDays = 0;
break;
}
return numDays;
}//method
public static boolean isLeap(int year){
if(((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
return true;
else
return false;
}
public static int getDayofTheWeek(int day, int month, int year){
int y = year - (14-month)/12;
int x = y+y/4 - y/100 + y/400;
int m = month + 12 * ((14-month)/12) -2;
int d = (day + x + (31*m)/12)%7;
return d;
}//method
}//class