diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..95fcce2 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -1,41 +1,126 @@ package leets.leets_mate; +import leets.leets_mate.exception.InvalidInputException; + import java.util.*; public class LeetsMateApplication { + private static final String START_MESSAGE = "[Leets 오늘의 짝에게]를 시작합니다.\n"; + private static final String GOODBYE_MESSAGE = "추첨을 완료하였습니다.\n자리를 이동해 서로에게 인사해주세요."; + + + public void run(){ + Scanner sc = new Scanner(System.in); + + System.out.println(START_MESSAGE); + System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + String members = sc.nextLine(); + + checkHasNoEnglish(members); + List memberList = parseMembers(members); + + int maximumGroupSize = getMaximumGroupSize(sc); + + + int memberCount = memberNumber(memberList); + + checkDataValidity(memberCount, maximumGroupSize); - // 동작 함수입니다. - public void run() { + printResultAndMessage(memberList, maximumGroupSize); + while (askForRestart(sc)) { + System.out.println("--------------------------------"); + printResultAndMessage(memberList, maximumGroupSize); + } + sc.close(); } - // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + return Arrays.asList(members.split(",")); + } + private int getMaximumGroupSize(Scanner sc) { + System.out.println("\n최대 짝 수를 입력해 주세요."); + int maximumGroupSize = Integer.parseInt(sc.nextLine()); + if (maximumGroupSize <= 0) { + throw new InvalidInputException("[ERROR] 최대 짝 수는 0보다 커야 합니다"); + } + return maximumGroupSize; } - - // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } - // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) { + public void checkHasNoEnglish(String members){ + if (members.matches(".*[a-zA-Z].*")) { + throw new InvalidInputException("[ERROR] 이름은 한글로 입력해야 합니다"); + } + if (members.isEmpty()) { + throw new InvalidInputException("[ERROR] 멤버의 이름을 입력해 주세요"); + } } - // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 - public void checkDataValidity(int memberCount, int maximumGroupSize) { + public void checkDataValidity(int memberCount, int maximumGroupSize){ + if (maximumGroupSize <= 0) { + throw new InvalidInputException("[ERROR] 최대 짝 수는 0보다 커야 합니다"); + } + if (maximumGroupSize > memberCount) { + throw new InvalidInputException("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + } } - // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + + List> resultList = new ArrayList<>(); + + int column = maximumGroupSize; + int row = (memberList.size() + column - 1) / column; + + + for (int i = 0; i < row; i++) { + resultList.add(new ArrayList<>()); + for (int j = i*column; j < column*(i+1); j++) { + if(j> result) { + StringBuilder sb = new StringBuilder(); + + for(int i=0; i memberList, int maximumGroupSize) { + List> lists = generateRandomGroups(memberList, maximumGroupSize); + System.out.println("\n오늘의 짝 추천 결과입니다."); + printResult(lists); + System.out.println(GOODBYE_MESSAGE); + } + public boolean askForRestart(Scanner sc) { + while (true) { + System.out.print("다시 구성하시겠습니까? (y or n): "); + String retry = sc.nextLine().trim().toLowerCase(); + if (retry.equals("n")) { + System.out.println("자리를 이동해 서로에게 인사해주세요."); + return false; + } else if (retry.equals("y")) { + return true; + } else { + throw new InvalidInputException("[ERROR] 잘못된 입력입니다. 'y' 또는 'n'을 입력해주세요."); + } + } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { LeetsMateApplication app = new LeetsMateApplication(); app.run(); } diff --git a/src/main/java/leets/leets_mate/exception/InvalidInputException.java b/src/main/java/leets/leets_mate/exception/InvalidInputException.java new file mode 100644 index 0000000..8f1ea2c --- /dev/null +++ b/src/main/java/leets/leets_mate/exception/InvalidInputException.java @@ -0,0 +1,8 @@ +package leets.leets_mate.exception; + +public class InvalidInputException extends RuntimeException{ + public InvalidInputException(String message) { + super(message); + } + +}