728x90
자바로 학교 시간표를 생성하고 출력해 보자
[요구 사항]
요일은 주중만 추가 할 수 있다.
1부터 9교시까지
과목 글자수는 15자로 제한
[뭐가 필요할까 ?]
HashMap에 key와 value 형태로 저장한다.
일단 리턴 타입은 모두 String으로
더보기
예시.
월 1 : 영어 회화
금 3 : 통계학
[기능]
-- default
요일을 추가
요일, 시간 별 과목 조회
전체 시간표 출력
-- validator
한글만 입력
주중인가?(월-금)
숫자만 입력
1부터 9까지의 숫자인가?
[완성된 코드]
public class TimeTable {
Map<String, String> schedule;
public TimeTable() {
this.schedule = new Hashtable<>();
}
/**
* 요일과 수업시간 추가
*
* @param day
* @param time
* @param className
*/
public void addClass(String day, String time, String className) {
String keyByDayTime = day + time;
schedule.put(keyByDayTime, className);
}
/**
* 특정 요일의 수업, 시간 조회
*
* @param day
* @param time
* @return
*/
public String findClass(String day, String time) {
String keyByDayTime = day + time;
String getClass = schedule.get(keyByDayTime);
return getClass;
}
/**
* 시간표를 출력한다.
*/
public void printAllClasses() {
for (Map.Entry<String, String> entry : schedule.entrySet()) {
String key = entry.getKey();
String className = entry.getValue();
System.out.println(key + " : " + className);
}
}
/**
* 입력된 글자가 한글인지 검증한다.
*
* @param input
*/
public static void validateKoreanInput(String input) {
if (!input.matches(".*[ㄱ-ㅎㅏ-ㅣ가-힣]+.*")) {
throw new IllegalArgumentException("한글만 입력하세요.");
}
}
/**
* 입력된 요일이 주중인지 검증한다.
*
* @param input
*/
public static void validateWeekdaysInput(String input) {
String[] validWeekdays = { "월", "화", "수", "목", "금" };
boolean isValid = false;
for (String weekday : validWeekdays) {
if (input.equals(weekday)) {
isValid = true;
break;
}
}
if (!isValid) {
throw new IllegalArgumentException("(월 / 화 / 수 / 목 / 금) 중에 입력하세요.");
}
}
/**
* 1교시부터 9교시까지만 입력 가능하도록 제한한다.
*
* @param input
*/
public static void validateNumberInput(String input) {
if (!input.matches("[1-9]")) {
throw new IllegalArgumentException("1부터 9까지 유효합니다.");
}
}
/**
* 과목 명 길이를 체크한다.
*
* @param input
*/
public static void checkTheNumberOfLetters(String input) {
int count = input.length();
if (count > 15) {
throw new IllegalArgumentException("과목명은 15자 미만입니다.");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String day;
String time;
String className;
System.out.println(" ======= 시간표 입력을 시작합니다. =======");
TimeTable timeTable = new TimeTable();
while (true) {
System.out.println("요일을 입력하세요.");
day = scanner.nextLine();
validateKoreanInput(day);
validateWeekdaysInput(day);
System.out.println("시간을 입력하세요");
time = scanner.nextLine();
validateNumberInput(time);
System.out.println("과목을 입력하세요");
className = scanner.nextLine();
validateKoreanInput(className);
checkTheNumberOfLetters(className);
timeTable.addClass(day, time, className);
System.out.println("더 입력하시겠습니까? (Y/N)");
String moreInput = scanner.nextLine();
if (!moreInput.equalsIgnoreCase("Y")) {
break;
}
}
scanner.close();
System.out.println("======= 생성된 시간표를 출력합니다. =======");
timeTable.printAllClasses();
}
}
[TO DO]
입력 오류 후 다시 입력값 받기
출력 시 요일 + 시간 순으로
필드 타입 변환하기
validator 구체화
728x90
'오늘 이거 알았네요 > Java' 카테고리의 다른 글
[Java] 구현 연습기 02 - 라이브 챗 (2) | 2024.01.16 |
---|---|
[Java] WebSecurityConfigurerAdapter 없이 config 구현 (0) | 2023.12.28 |
[Java] 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산 (1) | 2023.10.17 |
[Java] Mutex(뮤텍스) vs Semaphore(세마포어) (1) | 2023.10.16 |
[Java] Reflection; 리플렉션이 뭔데 (0) | 2023.09.01 |