728x90
320x100
package chap02;
import java.util.Scanner;
public class Practice08 {
int y; // 년
int m; // 월(1~12)
int d; // 일(1~31)
//--- 각 월의 일수 ---//
static int[][] mdays = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, // 평년
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, // 윤년
};
//--- year 년은 윤년인가?(윤년 : 1/평년 : 0) ---//
static int isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0;
}
//--- 생성자(주어진 날짜로 설정)---//
Practice08(int y, int m, int d) {
this.y = y;
this.m = m;
this.d = d;
}
//--- n일 후의 날짜를 반환 ---//
YMD after(int n) {
YMD temp = new YMD(this.y, this.m, this.d);
if (n < 0)
return before(-n);
temp.d += n;
while (temp.d > mdays[isLeap(temp.y)][temp.m - 1]) {
temp.d -= mdays[isLeap(temp.y)][temp.m - 1];
if (++temp.m > 12) {
temp.y++;
temp.m = 1;
}
}
return temp;
}
//--- n일 전의 날짜를 반환 ---//
YMD before(int n) {
YMD temp = new YMD(this.y, this.m, this.d);
if (n < 0)
return after(-n);
temp.d -= n;
while (temp.d < 1) {
if (--temp.m < 1) {
temp.y--;
temp.m = 12;
}
temp.d += mdays[isLeap(temp.y)][temp.m - 1];
}
return temp;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("날짜를 입력하세요.\n");
System.out.print("년 : "); int y = stdIn.nextInt();
System.out.print("월 : "); int m = stdIn.nextInt();
System.out.print("일 : "); int d = stdIn.nextInt();
YMD date = new YMD(y, m, d);
System.out.print("며칠 전/후의 날짜를 구할까요? : ");
int n = stdIn.nextInt();
YMD d1 = date.after(n);
System.out.printf("%d일 후의 날짜는 %d년%d월%d일입니다.\n", n, d1.y, d1.m, d1.d);
YMD d2 = date.before(n);
System.out.printf("%d일 전의 날짜는 %d년%d월%d일입니다.\n", n, d2.y, d2.m, d2.d);
}
}
728x90
320x100
'💻 하나씩 차곡차곡 > 자료구조 & 알고리즘(JAVA)' 카테고리의 다른 글
이진검색 (chap03/practice01) (2) | 2022.10.28 |
---|---|
선형검색 (chap03/SeqSearch) (0) | 2022.10.27 |
클래스 이용하기 (chap02/Practice07) (0) | 2022.10.25 |
향상된 for문 (for-each문) (chap02/ArraySumForIn) (0) | 2022.10.24 |
배열 복사하기 (chap02/CloneArray) (0) | 2022.10.23 |