입력 부분 예외처리 및 코드 다듬기
날짜 양식으로 지난 날 입력받지 않게 하기.
Calendar
로 입력한 년도에 해당하는 달, 주, 일, 요일 가져오기
- 전화번호 입력 예외처리
while (true) { System.out.print("\n전화번호를 입력해주세요. : "); phoneNum = sc.nextLine().trim(); String pattern = "^\\d{2,3}-\\d{3,4}-\\d{4}$"; if (!(Pattern.matches(pattern, phoneNum))) { System.out.println("올바른 휴대전화 형식이 아닙니다. "); } else { break; } }
번호 양식을 정규식으로 지정해 이에 맞는지 확인한다.
- 지불할 금액에 대한 예외처리
while (true) { try { System.out.print("\n소지금을 입력해주세요. : "); long money = sc.nextLong(); if (money < selectedRoom.getRoomPrice()) { System.out.println("소지금이 부족하여 이용이 불가능합니다."); Main.base(); break; } else { break; } } catch (InputMismatchException i) { System.out.println("잘못된 입력입니다."); System.out.println("다시 입력해주세요."); sc.nextLine(); } }
숫자 외의 입력을 거부한다. 입력을 String 타입으로 받아 해결할 수도 있다.
- 지나간 날짜 입력하지 못하게 하는 예외처리
Calendar cal = Calendar.getInstance(); LocalDate nowYear = LocalDate.now(); DateTimeFormatter formatterYear = DateTimeFormatter.ofPattern("yyyy"); int thisYear = Integer.parseInt(nowYear.format(formatterYear)); LocalDate nowMonth = LocalDate.now(); DateTimeFormatter formatterMonth = DateTimeFormatter.ofPattern("MM"); int thisMonth = Integer.parseInt(nowMonth.format(formatterMonth)); LocalDate nowDay = LocalDate.now(); DateTimeFormatter formatterDay = DateTimeFormatter.ofPattern("dd"); int thisDay = Integer.parseInt(nowDay.format(formatterDay));
입력 받은 날짜가 이미 지나있을 경우 다시 입력 받게 하였다.
LocalDate
로 년, 월, 일 객체를 할당해 format
지정, if문으로 비교하는 방식이었는데 Calendar
클래스에 대한 이해도가 낮아서 중복 코드도 많고, 보기 지저분하다.
다만 기능적으로는 문제 없이 돌아가고 입력한 년, 월에 따라 요일과 일이 보이게 작성한 부분이 마음에 든다.
int end = cal.getActualMaximum(Calendar.DATE); //해당 월 마지막 날짜 int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); //해당 날짜의 요일(1:일요일 … 7:토요일) // if (!(thisDay <= day && day <= end)) { System.out.println("잘못된 입력입니다."); // 현재 날짜와 마지막 날짜 사이에 위치하는지 비교
cal.getActualMaximum(Calendar.DATE)
로 달의 마지막 날짜를 가져와 그 이상 입력할 수 없게 구현했다.