JAVA :: Test099_클래스와 인스턴스(요일을 출력하는 프로그램 구현)

2023. 9. 12. 22:46· 📚 Study/Java

○ 실습

사용자로부터 년, 월, 일을 입력 받아 해당 날짜의 요일을 출력하는 프로그램을 구현한다.

단, 달력 클래스(Calender)는 사용하지 않는다.

또한, 클래스의 개념을 활용하여 작성할 수 있도록 한다.

(→ WeekDay 클래스 설계)

그리고 배열의 개념도 적용시켜 작성할 수 있도록 한다.

접근제어지시자의 개념도 확인하여 작성할 수 있도록 한다.

 

최종적으로...

WeekDay 클래스 설계를 통해 Test099 클래스의 main() 메소드가 정상적으로 프로그램 실행될 수 있도록 한다.

 

실행 예)

년 월 일 입력(공백 구분) : 2023 9 7

>> 2023년 9월 7일 → 목요일

// 계속하려면 아무 키나 누르세요...

 

※ Hint

- 1년 1월 1일은 월요일

- 1년은 365일이 아니다

  * 2월의 마지막 날짜가 29일 → 윤년

  * 2월의 마지막 날짜가 28일 → 평년

- 윤년의 판별 조건 : 년도가 4의 배수이면서 100의 배수가 아니거나, 400의 배수이면 윤년, 그 이외의 년도는 평년

 

import java.util.Scanner;
class WeekDay
{
// 주요 변수 선언 → 속성
private int y, m, d; //-- 사용자가 입력한 연, 월, 일을 담아낼 변수
// 메소드 정의 → 기능 : 연, 월, 일 입력받기
public void input()
{
Scanner sc = new Scanner(System.in);
System.out.print("년 월 일 입력(공백 구분) : "); //-- 2024 3 19
y = sc.nextInt(); //-- 2024
m = sc.nextInt(); //-- 3
d = sc.nextInt(); //-- 19
}
// 메소드 정의 → 기능 : 요일 산출하기
//public void week()
//public int week()
public String week()
{
// 각 월의 마지막 날짜(각 월의 최대값)를 배열 형태로 구성
int[] months = {31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 날 수를 종합할 변수
int nalsu;
// 요일 확인 변수
int w;
// 요일 타이틀을 배열형태로 구성
String[] weekNames = {"일", "월", "화", "수", "목", "금", "토"};
// 윤년에 따른 2월의 날 수 계산
// 입력 년도가 윤년이라면... 2월의 마지막 날짜를 29일로 설정
// 입력 년도가 평년이라면... 2월의 마지막 날자를 28일로 설정
if (y%4==0 && y!=100 || y%400==0) //-- 입력 년도가 윤년이라면...
{
// 2월의 마지막 날짜를 29일로 설정
months[1] = 29;
}
else //-- 입력 년도가 윤년이 아니라면... 즉, 평년이라면...
{
// 2월의 마지막 날짜를 28일로 설정
months[1] = 28;
}
// ex) 2024 3 19 → 1.1.1 ~ 2023.12.31
// ① 1년 1월 1일부터 입력받은 년도의 이전년도 12월 31일 까지의 날 수 계산
// -------------
// y
// ------------------------
// y-1
nalsu = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400;
// ---------
// 1년기본주기 --------
// 4년마다+1 ---------
// 100년마다+1(X)
// ---------
// 400년마다+1
// 확인(테스트)
//System.out.println("날 수 : " + nalsu);
//-->> 년 월 일 입력(공백 구분) : 2024 3 19
// 날 수 : 738885
// ------
// 1년 1월 1일 ~ 2023년 12월 31일 까지의 날 수
// ② 입력받은 월의 이전 월 까지의 날 수 계산 후
// 이 결과를 1번의 결과에 더하는 연산
// ex) 2024 3 19 → 2024.1.1 ~ 20234.2.29
for (int i=0; i<(m-1); i++)
nalsu += months[i];
// 확인(테스트)
//System.out.println("날 수 : " + nalsu);
//--==>> 년 월 일 입력(공백 구분) : 2024 3 19
// 날 수 : 738945
// ------
// 73885 + 31 + 29 = 738945
// 1년 1월 1일 ~ 2024년 2월 29일 까지의 날 수
// ③ 입력받은 일의 날짜만큼 날 수 계산 후
// 이 결과를 2번의 결과에 더하는 연산
// ex) 2024 3 19 → + 19
nalsu += d; //-- nalsu를 d 만큼 증가
// 확인(테스트)
//System.out.println("날 수 : " + nalsu);
// --==>> 년 월 일 입력(공백 구분) : 2024 3 19
// 날 수 : 738964
// ------
// 738945 + 19 = 738964
//--==>> 1. 1. 1 ~ 20234.3.19 총~~~~ 날짜수
//---------------------------------------------------------여기까지 수행하면 날 수 연산 끝~!!!
// 무슨 요일인지 확인하기 위한 연산
w = nalsu % 7; //-- 전체 날 수 % 7 == 0 → 일요일
// 전체 날 수 % 7 == 1 → 월요일
// 전체 날 수 % 7 == 2 → 화요일
// :
// 테스트(확인)
//System.out.println("w : " + w);
//--==>> 년 월 일 입력(공백 구분) : 2024 3 19
// w : 2
// -- → 전체날수 % 7 == 2 → 화요일
//return w;
return weekNames[w];
}
// 메소드 정의 → 기능 : 결과 출력하기
public void print(String day)
{
System.out.printf(">> %d년 %d월 %d일 → %s요일\n",y,m,d,day);
}
}
public class Test099
{
public static void main(String[] args)
{
/*
ob.setWeek();
ob.changeMonth();
ob.changeYear();
ob.calDay();
ob.getWeek(ob.calWeek());*/
// WeekDay 클래스 기반 인스턴스 생성
WeekDay wd = new WeekDay();
// 입력 메소드 호출
wd.input();
// 요일 산출 메소드 호출
String result = wd.week();
// 최종 결과 출력 메소드 호출
wd.print(result);
}
}
저작자표시 (새창열림)
'📚 Study/Java' 카테고리의 다른 글
  • JAVA :: Test101_클래스와 인스턴스(클래스의 개념을 활용하여 점수를 입력 받아 총점, 평균 계산하는 프로그램 구현)
  • JAVA :: Test100_클래스와 인스턴스(static)
  • JAVA :: Test098_클래스와 인스턴스(정보 은닉과 접근제어지시자)
  • JAVA :: Test096,Test097_배열의 복사
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JAVA :: Test099_클래스와 인스턴스(요일을 출력하는 프로그램 구현)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.