북극곰의 개발일기

년 월 일을 입력받아 1년 1월 1일부터의 날짜를 구하고 윤년 여부와 요일을 구하는 프로그램





posted by purplebeen on Wed Jan 10 2018 00:51:27 GMT+0900 (KST) in JAVA


일단 먼저 소스를 보자면

package java_study;

import java.time.Year;
import java.util.Scanner;
public class Aaa {
   public static int sum = 0;
   public static String dayOfWeek;
   // 년도만큼 더하는 메소드
   public int yearDay(int year) {
      sum = sum + 365;
      return year;
      
   }
   
   //어떤 년도가 윤년인지 아닌지 확인하는 메소드
   public boolean testLeapyear(int year) {
      if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
         return true;
      }
      else {
         return false;
      }
   }
   
   //결과값을 출력하는 메소드
   public void print(String string) {
      System.out.print("입력하신 날짜는 1년 1월 1일로부터 " + sum + " 번째 날이며 " + dayOfWeek + "이고 ");
      System.out.print(string);
   }
   
   public static void setDayOfweek(int day, int args) {
    day = day % 7;
    if(args == 1) 
     day++;
      switch(day) {
      case 0:
         dayOfWeek = "화요일";
         break;
      case 1:
         dayOfWeek = "수요일";
         break;
      case 2:
         dayOfWeek = "목요일";
         break;
      case 3:
         dayOfWeek = "금요일";
         break;
      case 4:
         dayOfWeek = "토요일";
         break;
      case 5:
         dayOfWeek = "일요일";
         break;
      case 6:
         dayOfWeek = "월요일";
      }
   }
   
   public static void main(String[] args) {
      //자체 메소드 접근을 위한 객체 생성 
      Aaa a = new Aaa();
      int i;   //반복문을 위한 변수
      Scanner input = new Scanner(System.in);      //입력을 받기 위한 Scanner 레퍼런스 생성
      
      //사용자에게서 날짜 임력받기
      System.out.println("년도를 입력하세요.");
      int year = input.nextInt();
      System.out.println("월을 입력하세요.");
      int month = input.nextInt();
      System.out.println("일을 입력하세요.");
      int day = input.nextInt();
      //년도 만큼 날짜 더하기 + 윤년 확인
      for(i = 1; i < year; i++) {
         if(a.testLeapyear(i) == true) {
            sum = sum + 1;
            a.yearDay(i);
         }
         else {
            a.yearDay(i);
         }
      }
      //month를 배열에 처넣음
      int[] monthDay = new int[12];
      for(i = 0; i < 12; i++)
         if(i +1 == 1 || i+1 == 3 || i+1 == 5 || i+1 == 7 || i+1 == 8 || i+1 == 10 || i+1 == 12){
            monthDay[i] = 31;
         }
         else if(i+1 == 4 || i+1 == 6 || i+1 == 9 || i+1 == 11) {
            monthDay[i] = 30;
         }
         else {
            monthDay[i] = 28;
         }
      
      //월만큼 더하기
      for(i = 0; i < month-1; i++) {
         if(month != 1) {
         sum += monthDay[i];
         }
      }
      
   
      sum = sum + day;   //날짜만큼 더하기   
      //결과 출력 + 마지막 연도가 윤년인지 확인
      if(a.testLeapyear(year) == true) {
         sum += 1;
         Aaa.setDayOfweek(day, 1); //요일 구하기
         a.print("윤년입니다.");
      } else{
       Aaa.setDayOfweek(day,0); //요일 구하기
         a.print("윤년이 아닙니다.");

      }
   }
}

다음과 같다.

일단 입력을 받은지 1년부터 입력받은 년도의 전 해까지 1씩 증가시켜 윤년인지를 비교하고 윤년이면 366일, 윤년이 아니면 365일만큼씩 더한다.

또한 모든 달들의 날 수가 들어간 배열을 선언한 뒤 입력 값을 받기 전날까지의 날짜 만큼을 계속 더한다.

그뒤로 입력받은 날의 값( day)를 sum에 추가시킨다.

윤년의 여부와 요일을 알아 내기 위하여 isLeapyear() 메소드와 setDayofweek()메소드를 호출한다.