ver1.
1년 1월달 달력을 보고 원리를 이해한다
2019.7 까지의 날수를 구하려면 - 1년으로부터 며칠째인지를 알면 구할 수 있음
2018x365
+ 윤년인 날수를 계산해서 +1씩
+ 2019년 1월~6월 날수
+ (+1) : 내가 구하고자 하는 달의 첫날
7월1일까지의 합계를 7로 나눈 나머지가 0이면 일요일 1이면 월요일...
package com.day5;
import java.util.Calendar;
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
Calendar now = Calendar.getInstance();
// 월별 날수를 배열에 저장
int months[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,nalsu,i,week;
do {
System.out.print("년도?"); //2019
y=sc.nextInt();
}while(y<1); //~안돼요
do {
System.out.print("월?"); //7월
m=sc.nextInt();
}while(m<1&&m>12);
//윤년에 따른 2월의 날수, 윤년이면 28을 29로 바꿈
//올해가 윤년인지 확인
if (y%4 == 0 && y%100 != 0 || y%400 ==0)
months[1]=29;
//1년 1월1일부터 ~ 현재년의 전년도 12월 31일까지의 날수
// + 2018년까지의 윤년 수
nalsu=(y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400; //공식임 and(-) or(+)
//int yun = (y-1)/4 - (y-1)/100 + (y-1)/400;
// 2019 1월~6월까지의 날수 + 2019년 6월 30일까지의 날수 + 1 = 2019/7/1까지의 날수 구할 차례
// 그 수를 %7 해서 나온 수에 의해 요일이 정해짐
//2019. 1~6월까지의 날수 더하기
for(i=0;i<m-1;i++) {
nalsu+=months[i];
}
nalsu += 1; // 2019.7.1 까지의 날수
//주의 수 (0 1 2 3 4 5 6)
week= nalsu%7; //1일때는 월요일 ,2일때는 화요일
System.out.println("\n 일 월 화 수 목 금 토"); //2byte+2byte
System.out.println("------------------------------");
//공백처리
//week가 있는곳의 전까지만 공백을 찍음
for (i=0; i<week; i++) {
System.out.print(" "); // 공백 4칸 (2byte+2byte)
}
for (i=1; i<months[m-1]; i++) {
System.out.printf("%4d",i); // i를 출력할건데 4byte공간으로 만들어라
week++; //week를 계속 증가시켜서 7로 나눠 딱 떨어지면 다음으로 줄바꿈
if(week%7==0)
System.out.println();
}
if(week%7!=0) {
System.out.println();
}
System.out.println("------------------------------");
}
}
ver2.
'Java' 카테고리의 다른 글
Java 설치하기 - JDK 설치, Eclipse 설치 (이대로만 따라하세요!) (0) | 2020.04.27 |
---|---|
NullPointException 이 나는 경우 (0) | 2020.02.22 |
추상클래스와 인터페이스 (0) | 2020.01.07 |
년,월,일을 입력받아 요일을 출력해주는 프로그램 (0) | 2019.11.13 |
별찍기 예제 (0) | 2019.11.13 |