미니과제 5번 - 달력 출력 프로그램
콘솔 시행 결과가 위와 같아야함
수행 조건
- Scanner 클래스를 사용하기
- java의 Calender class도 사용 + Date나 LocalDate class 사용하기
- 입력값으로는 년도와 월을 지정
- 화면과 같이 3달을 출력해야함
https://dev-cho.tistory.com/46
https://hianna.tistory.com/613
자바에서 날짜 관련 클래스에 대하여 참고
방법1. 그냥 System.out.print의 기능을 통하여 콘솔에 출력하기
public class Practice5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("달력의 년도를 입력해 주세요.(yyyy): ");
int year = sc.nextInt();
System.out.println("달력의 월을 입력해주세요.(mm): ");
int month = sc.nextInt();
LocalDate localDate = LocalDate.of(year, month, 1); // 연, 월, 일 지정
int lastDay = localDate.plusMonths(1).minusDays(1).getDayOfMonth();
String[] title = {"일", "월", "화", "수", "목", "금", "토"};
int prefixCount = localDate.getDayOfWeek().getValue();
int totalCount = 0;
// 캘린더 출력 부분
for (int i =0; i < title.length; i++){ // 상단의 요일 출력
System.out.print(title[i]+ "\t");
}
System.out.println(); // 줄바꿈 후에 뒤에 이어쓰기
for (int i = 0; i < prefixCount; i++) {
System.out.print(" " + "\t");
totalCount++;
}
for (int i = 1; i <= lastDay; i++) {
System.out.print(i + "\t");
totalCount++;
if (totalCount % 7 == 0) {
System.out.print("\n");
}
}
}
}
방법2. StringBuilder를 사용하여 append()함수를 사용하고 나서 후에 출력하기
StringBuilder의 특징 확인
public class Practice5 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
System.out.print("달력의 년도를 입력해 주세요.(yyyy): ");
int year = sc.nextInt();
System.out.println("달력의 월을 입력해주세요.(mm): ");
int month = sc.nextInt();
LocalDate localDate = LocalDate.of(year, month, 1); // 연, 월, 일 지정
int lastDay = localDate.plusMonths(1).minusDays(1).getDayOfMonth();
String[] title = {"일", "월", "화", "수", "목", "금", "토"};
int prefixCount = localDate.getDayOfWeek().getValue();
int totalCount = 0;
// 캘린더 출력 부분
for (int i =0; i < title.length; i++){
sb.append(title[i] + "\t");
}
sb.append("\n");
for (int i = 0; i < prefixCount; i++) {
sb.append(" " + "\t");
totalCount++;
}
for (int i = 1; i <= lastDay; i++) {
sb.append(i + "\t");
totalCount++;
if (totalCount % 7 == 0) {
sb.append("\n");
}
}
// StringBuilder 같은 경우에는 출력 부분 필요
System.out.println(sb.toString());
}
}
-----------------------
3개월의 캘린더를 출력하고 싶을 경우
public class Practice5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("달력의 년도를 입력해 주세요.(yyyy): ");
int year = sc.nextInt();
System.out.println("달력의 월을 입력해주세요.(mm): ");
int month = sc.nextInt();
// 캘린더 출력 부분
int[] num = {-1, 0, 1};
for (int j = 0; j < 3; j++) {
month += j;
LocalDate localDate = LocalDate.of(year, month, 1); // 연, 월, 일 지정
int lastDay = localDate.plusMonths(1).minusDays(1).getDayOfMonth();
String[] title = {"일", "월", "화", "수", "목", "금", "토"};
int prefixCount = localDate.getDayOfWeek().getValue();
int totalCount = 0;
System.out.println(String.format("[%04d년 %02d월]", year, month));
for (int i =0; i < title.length; i++){
System.out.print(title[i]+ "\t");
}
System.out.println();
for (int i = 0; i < prefixCount; i++) {
System.out.print(" " + "\t");
totalCount++;
}
for (int i = 1; i <= lastDay; i++) {
System.out.print(i + "\t");
totalCount++;
if (totalCount % 7 == 0) {
System.out.print("\n");
}
}
System.out.println();
}
System.out.print("\n");
}
}
-----------------------------
수평으로 3개월치의 달력을 출력하고 싶을 경우
https://velog.io/@zhdiddl/240407
위의 코드 참고하기
한 달 단위로 한다기보다는, 첫번째 줄, 두번째~마지막줄 이런 단위로 쪼개어 작성해야함
'제로베이스 백엔드 스쿨 > 미션' 카테고리의 다른 글
미니과제 7번 - 로또 당첨 프로그램 작성 (0) | 2024.05.26 |
---|---|
미니과제 6번 - 가상 선거 및 당선 시뮬레이션 프로그램 (0) | 2024.05.26 |
미니과제 4번 - 주민등록번호 생성 프로그램 (0) | 2024.05.23 |
미니과제 3번 - 놀이공원 입장료 계산하기 (0) | 2024.05.23 |
미니과제 2번 - 결제 금액 캐시백 계산 프로그램 (0) | 2024.02.20 |