course/inflearn

[만들어 가면서 배우는 JAVA 플레이그라운드] 캘린더

hjkim0502 2022. 7. 18. 23:08
  • 사용할 클래스를 미리 써놓고 ctrl + shift + m 하면 자동으로 클래스 임포트
  • 자동 정렬: ctrl + shift + f

 

  • 두 수의 합 키보드로 입력받아 화면에 출력하는 프로그램
// 내 풀이
package calendar;

import java.util.Scanner;

public class Sum {
	public static void main(String[] args) {
		System.out.println("두 수를 입력하세요: ");
		Scanner input = new Scanner(System.in);
		String nums = input.nextLine();
		String[] num = nums.split(" ");
		int num1 = Integer.parseInt(num[0]);
		int num2 = Integer.parseInt(num[1]);
		System.out.println("두 수의 합은 " + (num1 + num2) + "입니다.");
	}
}
// 해설
package calendar;

import java.util.Scanner;

public class Sum {
	public static void main(String[] args) {
		int a, b;
		
		Scanner scanner = new Scanner(System.in);
		String s1, s2;
		System.out.println("두 수를 입력하세요: ");
		s1 = scanner.next();
		s2 = scanner.next();
		a = Integer.parseInt(s1);
		b = Integer.parseInt(s2);
		
		
		System.out.printf("두 수의 합은 %d입니다.", a + b);
		scanner.close();
	}
}
  • 미리 변수 선언, 그리고 스캐너 닫기

 

  • 숫자를 키보드로 입력받아 해당 월의 마지막날 출력
// 내 풀이
package calendar;

import java.util.Scanner;

public class Calendar {
	public static void main(String[] args) {
		int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		int month;
		String num;
		Scanner scanner = new Scanner(System.in);
		System.out.println("수를 입력하세요: ");
		num = scanner.nextLine();
		month = Integer.parseInt(num);
		
		
		System.out.printf("해당 월은 %d일로 구성됩니다.", days[month - 1]);
		scanner.close();
	}
}

// 해설
package calendar;

import java.util.Scanner;

public class Calendar {
	public static void main(String[] args) {
		int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		Scanner scanner = new Scanner(System.in);
		System.out.println("수를 입력하세요: ");
		int month = scanner.nextInt();
		
		
		System.out.printf("해당 월은 %d일로 구성됩니다.", days[month - 1]);
		scanner.close();
	}
}
  • println은 자동 줄바꿈, printf는 없음
package calendar;

import java.util.Scanner;

public class Calendar {
	private static final int[] Last_Day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	public int getLastDayOfMonth(int month) {
		return Last_Day[month - 1];
	}
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		Calendar cal = new Calendar();
		System.out.println("수를 입력하세요: ");
		int month = scanner.nextInt();
		
		
		System.out.printf("해당 월은 %d일로 구성됩니다.", cal.getLastDayOfMonth(month));
		scanner.close();
	}
}
  • 메소드와 변수 사용

 

  • 입력받은 n에 대해 1월부터 n월까지 며칠로 구성돼있는지 출력
package calendar;

import java.util.Scanner;

public class Calendar {
	private static final int[] Last_Day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	public int getLastDayOfMonth(int month) {
		return Last_Day[month - 1];
	}
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		Calendar cal = new Calendar();

		System.out.println("반복횟수를 입력하세요: ");
		int repeat = scanner.nextInt();
		
		for (int i = 0; i < repeat; i++) {
			System.out.println("수를 입력하세요: ");
			int month = scanner.nextInt();
			System.out.printf("해당 월은 %d일로 구성됩니다.\n", cal.getLastDayOfMonth(month));			
		}
		System.out.println("Complete");
		scanner.close();
	}
}

 

  • 종료 조건 이용해 반복
package calendar;

import java.util.Scanner;

public class Calendar {
	private static final int[] Last_Day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
	public int getLastDayOfMonth(int month) {
		return Last_Day[month - 1];
	}
	
	public static void main(String[] args) {
		String PROMPT = "cal> ";
		Scanner scanner = new Scanner(System.in);
		Calendar cal = new Calendar();
		
		while (true) {
			System.out.println("수를 입력하세요: ");
			System.out.print(PROMPT);
			int month = scanner.nextInt();
			if (month < 1) {
				break;
			} else if (month > 12) {
				continue;
			}
			
			System.out.printf("해당 월은 %d일로 구성됩니다.\n", cal.getLastDayOfMonth(month));			
		}
		System.out.println("Complete");
		scanner.close();
	}
}

 

  • 가상 달력 출력
  • 캘린더 클래스에는 캘린더 관련 내용만 포함하기 위해 프롬프트 클래스 새로 생성
// Calendar class
package calendar;

public class Calendar {
	private static final int[] Last_Day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	public int getLastDayOfMonth(int month) {
		return Last_Day[month - 1];
	}

	public void printCalendar(int month) {
		System.out.println(" SU MO TU WE TH FR SA\r\n" + "---------------------");

		for (int i = 1; i <= month; i++) {
			System.out.printf("%3d", i);
			if (i % 7 == 0) {
				System.out.println();
			}
		}
		System.out.println();
	}
}

// Prompt class (새로 생성)
package calendar;

import java.util.Scanner;

public class Prompt {
	
	private final static String PROMPT = "cal> ";
	
	public void runPrompt() {
		Scanner scanner = new Scanner(System.in);
		Calendar cal = new Calendar();

		while (true) {
			System.out.println("수를 입력하세요: ");
			System.out.print(PROMPT);
			int month = scanner.nextInt();
			if (month == -1) {
				break;
			} else if (month > 12) {
				continue;
			}
			int lastday = cal.getLastDayOfMonth(month);
			cal.printCalendar(lastday);
		}
		System.out.println("Complete");
		scanner.close();
	}
	
	public static void main(String[] args) {
		Prompt p = new Prompt();
		p.runPrompt();
	}
}
  • %3d : 3칸의 정수형

 

  • 윤년 반영하기
// Calendar class
package calendar;

public class Calendar {
	private static final int[] Last_Day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	private static final int[] Leap_Last_Day = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	public boolean isLeapYear(int year) {
		if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
			return true;
		} else {
			return false;
		}
	}
	
	public int getLastDayOfMonth(int year, int month) {
		if (isLeapYear(year)) {
			return Leap_Last_Day[month - 1];
		} else {
			return Last_Day[month - 1];			
		}
	}

	public void printCalendar(int month) {
		System.out.println(" SU MO TU WE TH FR SA\r\n" + "---------------------");

		for (int i = 1; i <= month; i++) {
			System.out.printf("%3d", i);
			if (i % 7 == 0) {
				System.out.println();
			}
		}
		System.out.println();
	}
}

// Prompt Class
package calendar;

import java.util.Scanner;

public class Prompt {
	
	private final static String PROMPT = "cal> ";
	
	public void runPrompt() {
		Scanner scanner = new Scanner(System.in);
		Calendar cal = new Calendar();

		while (true) {
			System.out.println("연도를 입력하세요: ");
			System.out.print("YEAR> ");
			int year = scanner.nextInt();
			System.out.println("월을 입력하세요: ");
			System.out.print("MONTH> ");
			int month = scanner.nextInt();
			if (month == -1) {
				break;
			} else if (month > 12) {
				continue;
			}
			int lastday = cal.getLastDayOfMonth(year, month);
			cal.printCalendar(lastday);
		}
		System.out.println("Complete");
		scanner.close();
	}
	
	public static void main(String[] args) {
		Prompt p = new Prompt();
		p.runPrompt();
	}
}
  • 조건문 활용해 윤년인지 확인하여 캘린더 출력
  • 함수나 변수에 커서 놓고 f3 누르면 해당 객체 선언하는 코드로 이동
/** 치고 엔터치면 다중 라인 주석 (함수 위에서 하면 함수 관련 주석)

int a = (b == 1) ? true : false;
변수 a는 b가 1이라면 true 그 외에는 false

출처: https://www.inflearn.com/course/java-codesquad/dashboard