본문 바로가기

JAVA

JAVA(8) - 달력/UP&DOWN/컴파일/디버깅

1. 달력 만들기

1.) 입력 및 선언

  • 년과 월을 입력받아서 달력 출력할 예정.
  • 따라서 연도와 월을 입력 받고 필요한 변수들 미리 선언해줌.
		Scanner scan = new Scanner(System.in);
		
		int year = 0, month = 0;
		int totalDay = 0;
		int dayOfMonth = 0;
		int startDay = 0;
		
		System.out.println("연도와 월을 입력하세요.");
		System.out.print("연도 : ");
		year = scan.nextInt();
		System.out.print("월 : ");
		month = scan.nextInt();

 

2.) 입력한 연도까지의 총일수 구하기 (if문으로 윤년 조건까지 만족시켜서 구하기)

for(int i = 1; i < year; i++) {
	totalDay += 365;
	
	if(((i % 4) == 0) && ((i % 100) != 0) || ((i % 400) == 0)) {
		totalDay++;
	}
}

3.) 입력한 달 이전까지의 총일수 구하기 (if문으로 윤달 조건까지 만족시켜서 구하기)

for(int j = 1; j < month; j++) {
	if(j == 4 || j == 6 || j == 9 || j == 11) {
		totalDay += 30;
	}
	else if(j == 2) { 
		if(((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0)) {				
			totalDay += 29;
		}
		else {
			totalDay += 28;
		}
	}
	else {
		totalDay += 31;
	}
}

startDay = totalDay % 7;

4.) 입력한(출력할) 달의 한달 일수 정하기

		if(month == 4 || month == 6 || month == 9 || month == 11) {
			dayOfMonth = 30;
		}
		else if(month == 2) {
			if(((year % 4) == 0) && ((year % 100) != 0)
					|| ((year % 400) == 0)) {				
				dayOfMonth = 29;
			}
			else {
				dayOfMonth = 28;
			}
		}
		else {
			dayOfMonth = 31;
		}

5.) 달력 양식 출력

		System.out.println();
        System.out.println(year + "년\t\t\t\t\t\t" + month + "월");
        System.out.println("===================================================");
        System.out.println("일\t월\t화\t수\t목\t금\t토");
        System.out.println("===================================================");

6.) 첫날 시작 요일을 정하기 위해서 startDay와 비교

  • startDay == 6 일 때, break문으로 탭(\t) 출력 멈추고 다음 명령문으로 넘어감
  • 날짜간 간격 유지를 위해 \t 출력
        int cnt = 0;
        
        for(int k = 0; k <= startDay; k++) {
        	if(startDay == 6)
        		break;
        	System.out.print("\t");
        	cnt++;
        }

7.) 1일부터 차례대로 날짜 출력해줌

  • cnt로 7일까지 비교해서 줄바꿈
  • 이외에 일수 출력 될때는 탭
        for(int l = 1; l <= dayOfMonth; l++) {
        	System.out.printf("%2d", l);
        	cnt++;
        	if(cnt % 7 ==
        			0) {
        		System.out.println();
        	}
        	else {
        		System.out.print("\t");
        	}

 

2. UP AND DOWN

	public static void main(String[] args) {
		//입력 인스턴스 생성
		Scanner scan = new Scanner(System.in);
		//난수 인스턴스 생성
		Random rand = new Random();
		
		//성공/실패 저장 변수
		boolean success = false;
		
		//맞출 번호 생성(1~100 사이의 값 생성)
		int num = rand.nextInt(100) + 1; //int num = rand.nextInt(100); 이렇게 100으로 설정할 경우 0~99 사이의 수만 생성됨. 따라서 뒤에 +1을 해주어야 1~100으로 됨.
//		int num = (rand.nextInt(100) + 1) * 10; //10~1000 사이의 십단위 숫자만 출력 
		
		//사용자 입력값 저장 변수
		int inNum = 0;
				
		//사용자 입력 값과 생성값 비교 후 판단 출력
		for(int i = 1; i <= 10; i++) {
			//입력 안내
			System.out.println("입력 > ");
			inNum = scan.nextInt();
			
			//비교 판정
			if(num == inNum) {
				//결과 출력
				System.out.println("시도 횟수 " + i + "번 성공!");
				//반복 종료 처리
				i = 10;		//break;로 대체 가능
				//성공/실패 여부 저장
				success = true;
				
				
			}
			else if(num > inNum) {
				System.out.println("UP!");
			}
			else if(num < inNum) {
				System.out.println("DOWN!");
			}
			
		}
		if(success == false) {
			//10번 시도 실패 후 게임 종료
			//정답 알려주기
			System.out.println("실패! 정답 " + num);
		}
		
	}//메인 끝

 

 

3. 디버깅

컴퓨터 프로그램에 이상을 주는 현상을 제거하는 행동

프로그램이 잘 돌고 있는지 또는 연산이 잘 이루어지고 있는지 확인하기 위함 

 

4. 프로그램의 구성요소

1. 입력 : 사용자로부터 값을 입력받는다.

2. 연산 : 값을 처리한다.

3. 출력 : 값을 출력한다.

 

5. 프로그램 코딩의 구조

  1. 일괄처리 (순서대로 처리)
  2. 반복처리 (특정 조건에 따라 반복한다.)

-> 모든 프로그램은 사용자의 종료 명령이 없다면 정해진 순서의 명령문장을 순서대로 반복한다.

 

6. break point

"break point"

컴파일 하다가 "break point"를 만나면 멈춤

 

F11 누르면 디버깅 하면서 변수변화 상태 확인할 수 있음

디버깅 창

break point를 찍고 디버깅한 후 break point이후에 라인부터 F6찍으면서 다음줄부터 순서대로 확인해보기.

 

 

7. 알고리즘

코딩 전에 알고리즘 작성해본 예시