Test091 클래스 설계 / 배열 활용 / 년, 월, 일을 입력받아 요일을 출력하는 프로그램
※ 실습문제
아래의 클래스(WeekDay)를 완성한다. 사용자로부터 년, 월, 일을 입력받아 요일을 출력하는 프로그램을 구현한다.
단, 달력 클래스(Calendar)는 사용하지 않는다. 또한, 클래스의 개념을 활용하여 작성한다. 그리고, 배열의 개념도 적용시켜 작성할 수 있도록 한다.
Test091.java
import java.util.Scanner;
class WeekDay
{
// 주요 변수 선언
private int y, m, d; //-- 사용자가 입력한 년, 월, 일을 담을 변수
// 메소드 정의(입력 받기)
void input()
{
Scanner sc = new Scanner(System.in);
System.out.print("년 월 일 입력(공백구분) : ");
y = sc.nextInt();
m = sc.nextInt();
d = sc.nextInt();
}
// 메소드 정의(요일 산출하기)★
String week()
{
// 각 월의 마지막 날짜(각 월의 최대값)을 배열 형태로 구성
int[] months = {31, 0, 31, 30, 31, 30, 31, 31 , 30, 31, 30, 31};
// 요일명에 대한 배열 구성
String[] weekNames = {"일", "월", "화", "수", "목", "금", "토"};
//--날수, 루프, 요일 선언
int nalsu, i, w;
// 윤년에 따른 2월의 날 수 계산
// 윤년이라면... 2월의 마지막 날짜를 29일로 설정
// 평년이라면... 2월의 마지막 날짜를 28일로 설정
if ((y%4==0 && y%100!=0) || y%400==0) // 윤년이라면...
{
// 2월의 마지막 날짜를 29일로 설정
months[1] = 29;
}
else // 평년이라면...
{
months[1] = 28;
}
// ① 1년 1월 1일 부터 입력받은 년도의 이전 년도 12월 31일 까지의 날 수 계산
nalsu = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400;
// 테스트
// System.out.println(nalsu); //--==>> 년 월 일 입력(공백구분) : 2018 2 28 \n 736694
// ② 입력받은 월 이전 월 까지의 날 수 계산 후
// 1번 결과에 더하는 연산
for (i=0; i<(m-1); i++)
{
nalsu += months[i];
}
// 테스트
// System.out.println(nalsu); //--==>>년 월 일 입력(공백구분) : 2018 2 28 \n 736725
nalsu += d;
w = nalsu % 7; // 전체 날수 % 7 = 0 → 일요일
//테스트
//System.out.println(w); //--==>> 3
//System.out.println(weekNames[w]); //--==>> 수
return weekNames[w];
}
// 메소드 정의(결과 출력하기)
void print(String day)
{
System.out.printf("\n%d년 %d월 %d일 → %s요일\n", y, m, d, day);
}
}
public class Test091
{
public static void main(String[] args)
{
WeekDay wd = new WeekDay();
wd.input(); //-- 입력 메소드 호출
//wd.week();
String result = wd.week(); //-- 요일 산출 메소드 호출
wd.print(result); //-- 출력 메소드 산출
}
}
cmd
년 월 일 입력(공백구분) : 2018 2 28
2018년 2월 28일 → 수요일
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test093_ Record 클래스, Sungjuk 클래스, Test093클래스를 이용한 성적 계산 프로그램 작성 (2) | 2018.04.30 |
---|---|
JAVA_ Test092_ 클래스와 인스턴스 / 클래스 변수(static 변수) 와 클래스 메소드(static 메소드) (0) | 2018.04.30 |
JAVA_ Test090_ 클래스와 인스턴스 / 정보은닉(Information Hiding)과 접근제어지시자 / this (0) | 2018.04.30 |
JAVA_ Test089_ 배열 / 난수처리 / 임의의 난수 큰 수, 작은 수 선택출력 프로그램 (0) | 2018.04.30 |
JAVA_ Test088_ 배열의 기본적 활용 / 1 2 3 4 5 \n 5 1 2 3 4 ... (0) | 2018.04.30 |
댓글