JAVA 프로그래밍

문제

생일과 오늘을 입력하면 태어난지 몇 일째인지 출력하는 알고리즘입니다 이를 해결하는 프로그램의 다음 실행상태에 대해 빈칸을 채우세요 

프로그램의 실행순서 및 실행상태

1  public static void main( String[] args ) {  

2   int thisDay = scan.nextInt();
생년을 입력하세요: 1397
생월을 입력하세요: 5
생일을 입력하세요: 15
올해를 입력하세요: 1450
이번 달을 입력하세요: 3
오늘 날짜를 입력하세요: 30
                                main()
scan  (Scanner) 
     birthYear
    birthMonth
      birthDay
      thisYear
     thisMonth
       thisDay

3   int birthTotalDays = ( birthYear - 1 ) * 365 + ( birthYear - 1 ) / 4 - ( birthYear - 1 ) / 100 + ( birthYear - 1 ) / 400;

4   switch ( birthMonth - 1 ) {

5    case 12:        

7    case 11:       

9    case 10:        

11    case 9:        

13    case 8:        

15    case 7:        

17    case 6:       

19    case 5:        

21    case 4:        

22     birthTotalDays += 30;

24     birthTotalDays += 31;

26     birthTotalDays += 28;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays 509940

27     if ( ( ( birthYear % 400 ) == 0 ) || ( ( ( birthYear % 100 ) != 0 ) && ( ( birthYear % 4 ) == 0 ) ) ) {

30     birthTotalDays += 31;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays

31   birthTotalDays += birthDay;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays

32   int thisTotalDays = ( thisYear - 1 ) * 365 + ( thisYear - 1 ) / 4 - ( thisYear - 1 ) / 100 + ( thisYear - 1 ) / 400;

33   switch ( thisMonth - 1 ) {

34    case 12:        

36    case 11:       

38    case 10:        

40    case 9:        

42    case 8:        

44    case 7:        

46    case 6:       

48    case 5:        

50    case 4:        

52    case 3:         

54    case 2:         

55     thisTotalDays += 28;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays  510014 
 thisTotalDays 529236

56     if ( ( ( thisYear % 400 ) == 0 ) || ( ( ( thisYear % 100 ) != 0 ) && ( ( thisYear % 4 ) == 0 ) ) ) { 

59     thisTotalDays += 31;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays  510014 
 thisTotalDays

60   thisTotalDays += thisDay;
                                main()
scan  (Scanner) 
     birthYear  1397 
    birthMonth  5 
      birthDay  15 
      thisYear  1450 
     thisMonth  3 
       thisDay  30 
birthTotalDays  510014 
 thisTotalDays

61   int duration = thisTotalDays - birthTotalDays + 1; 

62   System.out.print( birthYear + "년 " + birthMonth + "월 " + birthDay + "일부터 " + thisYear + "년 " + thisMonth + "월 " + thisDay + "일까지 " + duration + "일째 잘 견디고 잘 살아내셨어요 당신을 응원합니다" );
1397년 5월 15일부터 1450년 3월 30일까지 19312일째 잘 견디고 잘 살아내셨어요 당신을 응원합니다

63  }


프로그램 코드

	import java.util.Scanner;
	
	public class LivingPeriod
	{
1		public static void main( String[] args ) { 	
			Scanner scan = new Scanner( System.in );																										
			System.out.print( "생년을 입력하세요: " );
			int birthYear = scan.nextInt();
			System.out.print( "생월을 입력하세요: " );
			int birthMonth = scan.nextInt();
			System.out.print( "생일을 입력하세요: " );	
			int birthDay = scan.nextInt();
			System.out.print( "올해를 입력하세요: " );
			int thisYear = scan.nextInt();
			System.out.print( "이번 달을 입력하세요: " );
			int thisMonth = scan.nextInt();
			System.out.print( "오늘 날짜를 입력하세요: " );
2			int thisDay = scan.nextInt();
		
3			int birthTotalDays = ( birthYear - 1 ) * 365 + ( birthYear - 1 ) / 4 - ( birthYear - 1 ) / 100 + ( birthYear - 1 ) / 400;
4			switch ( birthMonth - 1 ) {
5				case 12:								
6					birthTotalDays += 31;
7				case 11:							
8					birthTotalDays += 30;
9				case 10:								
10					birthTotalDays += 31;
11				case 9:								
12					birthTotalDays += 30;
13				case 8:								
14					birthTotalDays += 31;
15				case 7:								
16					birthTotalDays += 31;
17				case 6:							
18					birthTotalDays += 30;
19				case 5:								
20					birthTotalDays += 31;
21				case 4:								
22					birthTotalDays += 30;
23				case 3:									
24					birthTotalDays += 31;
25				case 2:									
26					birthTotalDays += 28;
27					if ( ( ( birthYear % 400 ) == 0 ) || ( ( ( birthYear % 100 ) != 0 ) && ( ( birthYear % 4 ) == 0 ) ) ) {
28						birthTotalDays++;
					}		
29				case 1:									
30					birthTotalDays += 31;
			}
31			birthTotalDays += birthDay;
		
32			int thisTotalDays = ( thisYear - 1 ) * 365 + ( thisYear - 1 ) / 4 - ( thisYear - 1 ) / 100 + ( thisYear - 1 ) / 400;
33			switch ( thisMonth - 1 ) {
34				case 12:								
35					thisTotalDays += 31;
36				case 11:							
37					thisTotalDays += 30;
38				case 10:								
39					thisTotalDays += 31;
40				case 9:								
41					thisTotalDays += 30;
42				case 8:								
43					thisTotalDays += 31;
44				case 7:								
45					thisTotalDays += 31;
46				case 6:							
47					thisTotalDays += 30;
48				case 5:								
49					thisTotalDays += 31;
50				case 4:								
51					thisTotalDays += 30;
52				case 3:									
53					thisTotalDays += 31;
54				case 2:									
55					thisTotalDays += 28;
56					if ( ( ( thisYear % 400 ) == 0 ) || ( ( ( thisYear % 100 ) != 0 ) && ( ( thisYear % 4 ) == 0 ) ) ) {	
57						thisTotalDays++;
					}					
58				case 1:									
59					thisTotalDays += 31;
			}
60			thisTotalDays += thisDay;
		
		
61			int duration = thisTotalDays - birthTotalDays + 1;	
62			System.out.print( birthYear + "년 " + birthMonth + "월 " + birthDay + "일부터 " + thisYear + "년 " + thisMonth + "월 " + thisDay + "일까지 " + duration + "일째 잘 견디고 잘 살아내셨어요 당신을 응원합니다" );
			scan.close();
63		}
	}