Array, while, for, if, class, method
? 윤년을 통과하는 if 조건문 만들기가 어려웠음....
입력받은 월이 3월 이상이고 윤년(4년에 한번 100년에 한번은 skip 400년에 한번은 add!) 조건에 부합하면 하루를 더해줌(++)
[3월 이상] 이고(&&) [4년에 한번 이면서 100년에 한번이 아닌 윤년] 이거나(둘중 하나라도 xor)(||) [400년에 한번인 윤년]
(month>3 && (year%4==0 && year%100!=0 || year%400==0)
? kbd.close(); 를 반복문 안에 넣으면 오류가 남!
A. flush처럼 키보드 값을 날린다고 생각했으나 오류가 나서 🤨 close()는 스케너 사용을 종료하는 메소드!
따라서 졸료된 스케너에서 입력을 받을 수 없으므로 오류!
package LK;
import java.util.*;
public class LKDate2DOW {
public static void main(String[] args) {
LKDate2DOW run = new LKDate2DOW();
while (true) {
run.Run();
}
}
void Run() {
//요일을 구하고자 하는 년, 월, 일을 사용자로부터 입력받는다.
Scanner kbd = new Scanner(System.in);
System.out.print("알고 싶은 날짜(YYYY MM DD) 요일은?");
int year = kbd.nextInt();
int month = kbd.nextInt();
int day = kbd.nextInt();
//kbd.close(); 오류 스케너 사용을 종료하는 메소드!
/* 1step
* 전년도까지의 날수를 계산
* 윤년 계산
* 3년에 한 번씩은 윤년이 아님
* 100년에 한 번씩은 4년으로 나누어져도 윤년이 아님
* 400년에 한 번씩은 윤년
*/
int preYear = year-1;
int leepYear = year/4 - year/100 + year/400;
System.out.printf("%d년의 윤년이 있었습니다.\n ", leepYear);
int numOfDays = preYear*365 + leepYear ;
/* 2step
* 입력받은 년도의 입력 받은 월 전월까지의 날수를 기존에 계산된 날수에 추가
*/
int[] monthArray = {31,28,30,31,31,30,31,31,30,31,30,31};
for (int i=0; i<(month-1); i++) {
numOfDays += monthArray[i];
}
/* 3step
* 입력받은 년도가 윤년이면서, 입력받은 월이 3월 이상인 경우는 기존 계산에 1추가
* 2월을 28일로 계산 했으므로 윤년인 경우 보정
*/
if (month>3 && (year%4==0 && year%100!=0 || year%400==0)) {
numOfDays++;
}
/* final step
* 입력받은 일까지의 날짜수 추가
*/
numOfDays += day;
// 실수 계산값을 7로 나눈 나머지 구하기. 요일 배열의 [방번호]
int dayOfWeek = numOfDays % 7;
// 나머지 값에 따라서 적당한 요일 출력
String[] dayArray = {"일","월","화","수","목","금","토"};
System.out.printf("%d월 %d일는(은) 1월 1일로 부터: %,d일 이고 %n",
month, day, numOfDays);
System.out.printf("\n %s요일 입니다!", dayArray[dayOfWeek]);
}
} // end C
'주말⇞코딩' 카테고리의 다른 글
장바구니 만들기中 (0) | 2022.01.31 |
---|---|
mode2 C.R.U.D. sql을 연동한 로그인 기능 (0) | 2022.01.09 |
자바) 메모장 (0) | 2022.01.02 |
자바 정리_ver.0.3 (0) | 2022.01.01 |
자바) 제비뽑기 / 배열이름 검색 (0) | 2021.12.26 |