java구요 if ~ for ~ switch ~ do while 을 이용해서 년도와 달을 입력받아 달력 출력시키는 프로그램입니다.
처음 이 문제를 보고 어떻게짜지 도저히 생각이안나 예시답안 코드를 보는데요. 코드를 봐도 이해가 안가는 부분이있어서요..
2부분(글씨찐하고큰부분)인데 이부분이 뭘 정의한 부분인거죠..?
import java.io.*;
public class Test0 {
public static void main(String[] ar) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int year = 0, month = 0;
int start = 0, end = 0;
boolean bool = false; //윤년 여부 ture : 윤년
int base = 2006; // 2006년 1월 1일은 일요일 --> 기준
int pos = 0;
do {
System.out.print(\"1. 연도를 입력하세요(예 : 2004) => \");
year = Integer.parseInt(in.readLine());
}while (year < 0 || year > 9999);
System.out.println();
do {
System.out.print(\"2. 월을 입력하세요(예 : 6) => \");
month = Integer.parseInt(in.readLine());
}while(month < 1 || month > 12);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
bool = true;
switch(month) {
case 1: case 3: case 5: case 7: case 8:
case 10: case 12: end = 31; break;
case 4: case 6: case 9: case 11: end = 30; break;
case 2: if(bool) end = 29; else end = 28;
}
if(year < base) {
start = base - year;
for(int i = year; i < base; ++i)
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
start++;
start = 7 - start % 7;
if(start == 7) start = 0;
}
else {
start = year - base;
for(int i = base; i < year; ++i)
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
start++;
start %= 7;
}
for(int i = 1; i < month; ++i) {
switch(i) {
case 1: case 3: case 5: case 7: case 8:
case 10: case 12: start += 31; break;
case 4: case 6: case 9: case 11: start += 30; break;
case 2: if(bool) start += 29; else start += 28;
}
}
start %= 7;
System.out.println();
System.out.print(\"================= < \");
if(year < 10) System.out.print(\"000\");
else if(year < 100) System.out.print(\"00\");
else if(year < 1000) System.out.print(\"0\");
System.out.print(year + \"년 \");
if(month < 10) System.out.print(\"0\");
System.out.println(month + \"월 > =================\");
System.out.println(\"일\\t월\\t화\\t수\\t목\\t금\\t토\");
for(int i = 0; i < start; ++i, ++pos) System.out.print(\"\\t\");
for(int i = 1; i <= end; ++i) {
if(i < 10) System.out.print(\' \');
System.out.print(i);
++pos;
if(pos % 7 == 0) System.out.println();
else System.out.print(\"\\t\");
}
if(pos % 7 != 0) System.out.println();
System.out.println(\"==================================================\");
}
}
어 그냥 캘린더 클래스 쓰는거 아니였어??; 왜 복잡하게 이런 고생을
java 초짜인데 if ~ for ~ switch ~ do while 이 파트에 이런 과제가있더라구요.. 흑흑..
1일부터 출력하는데 해당 달의 1일이 무슨요일인지 몰라서 구하는 로직임. 윤년인 와 아닌해에 따라 년수가 틀리기때매 그 오차를 구한것이고 기준 월 에서 차이나는 만큼 1월부터 해당월까지 일수를 계산해 7(1주)로 나누어 주는 것임. 그럼 1일이 무슨 요일인지 나오니깐...
밑에거는 1일의 요일만큼 탭을 넣어주면서 포지션을 증가시킨거고 그다음 부터 1일부터 차례대로 입력시키고 포지션이 7(1주)가 되면 뉴라인을 넣어 한칸 밑에 출력하는 것임... 학생이신거 같은데 이런소스 제출하면 교수님한테 혼나여;; 프로그래밍 센스도 변수네이밍도 빵점...
음 전 .. 이런 예제 구하셨다면 더 헷깔리는듯.. 자바의 경우엔 이렇게 까지 복잡한 문제를 요구하지 않는데 클래스파트를 안가셨는가보네요..