From 9a79b41d6a455d98f00fc1907fd9fb5a22585f9a Mon Sep 17 00:00:00 2001 From: hyxklee Date: Fri, 5 Apr 2024 10:41:53 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EC=B2=AB=20=EB=B2=88=EC=A7=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../leets_mate/LeetsMateApplication.java | 79 ++++++++++++++++++- .../leets_mate/LeetsMateApplicationTests.java | 7 +- 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 4fe6044..cff5020 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ dependencies { testImplementation platform('org.assertj:assertj-bom:3.25.1') testImplementation('org.junit.jupiter:junit-jupiter') testImplementation('org.assertj:assertj-core') + implementation("com.google.guava:guava:31.1-jre") } tasks.named('test') { diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..28459e4 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -1,38 +1,111 @@ package leets.leets_mate; +import com.google.common.collect.Lists; + import java.util.*; public class LeetsMateApplication { // 동작 함수입니다. public void run() { + //입력부 + Scanner scan = new Scanner(System.in); + System.out.println("[Leets 오늘의 짝에게]를 시작합니다."); + System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + String members = scan.nextLine(); + + //영어 입력시 예외처리 + try { + checkHasNoEnglish(members); + }catch (InputMismatchException e){ + System.out.println("[ERROR] 이름은 한글로 입력해야 합니다"); + System.out.println("멤버의 이름을 다시 입력해 주세요. (, 로 구분)"); + members = scan.nextLine(); + } + + //최대 짝 수 입력, 잘못된 입력 시 예외처리 + System.out.println(); + System.out.println("최대 짝 수를 입력해주세요."); + int maxGroup; + while(true) { + try { + maxGroup = scan.nextInt(); + break; + }catch (RuntimeException e){ + System.out.println("숫자를 입력하세요"); + scan.next(); + } + } + + //문자열에서 List로 변환 + List memberList = parseMembers(members); + + //최대 짝 수가 입력된 이름 수보다 크면 예외처리 + try { + checkDataValidity(memberNumber(memberList), maxGroup); + }catch (RuntimeException e){ + System.out.println("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다."); + System.out.println("최대 짝 수를 다시 입력해주세요"); + maxGroup = scan.nextInt(); + } + + //버퍼 속 개행문자 소비 + scan.nextLine(); + + //다시추첨기능 + String index = "y"; + while (index.equals("y")){ + List> result = generateRandomGroups(memberList, maxGroup); + printResult(result); + System.out.println("다시 추첨하시겠습니까?"); + index = scan.nextLine(); + } } + // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + String[] arr = members.split(","); + return new ArrayList<>(Arrays.asList(arr)); } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) { + for (Character c : members.toCharArray()) { + if(!(c >= '가' && c <= '힣')){ + throw new InputMismatchException("[ERROR] 이름은 한글로 입력해야 합니다."); + } + } + } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 public void checkDataValidity(int memberCount, int maximumGroupSize) { + if(memberCount> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + return Lists.partition(memberList, maximumGroupSize); } // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { + System.out.println("오늘의 짝 추첨 결과"); + for (List strings : result) { + System.out.println(strings); + } + System.out.println(); + System.out.println("추첨을 완료하였습니다."); + System.out.println(); } public static void main(String[] args) { diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index 706e295..e5b907b 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; +import java.util.InputMismatchException; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -33,15 +34,17 @@ void setUp() { @Test void 멤버수와_최대_멤버수를_잘못_입력한_경우_예외를_반환한다() { - assertThrows(Exception.class, () -> { + Exception e = assertThrows(Exception.class, () -> { app.checkDataValidity(3, 4); }); + assertThat("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다.").isEqualTo(e.getMessage()); } @Test void 멤버_문자열에_영어를_입력한_경우_예외를_반환한다() { - assertThrows(Exception.class, () -> { + InputMismatchException e = assertThrows(InputMismatchException.class, () -> { app.checkHasNoEnglish("welcome,to,leets"); }); + assertThat("[ERROR] 이름은 한글로 입력해야 합니다.").isEqualTo(e.getMessage()); } } \ No newline at end of file From 24064cb09c7729096f4c088857f31a4a340bf0dd Mon Sep 17 00:00:00 2001 From: hyxklee Date: Sat, 6 Apr 2024 14:02:52 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/leets/leets_mate/LeetsMateApplicationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index e5b907b..f3d0f30 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -34,7 +34,7 @@ void setUp() { @Test void 멤버수와_최대_멤버수를_잘못_입력한_경우_예외를_반환한다() { - Exception e = assertThrows(Exception.class, () -> { + RuntimeException e = assertThrows(RuntimeException.class, () -> { app.checkDataValidity(3, 4); }); assertThat("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다.").isEqualTo(e.getMessage()); From 3f848757be1896ab09860b8a9161b8f50fe9050b Mon Sep 17 00:00:00 2001 From: hyxklee Date: Sun, 7 Apr 2024 22:42:23 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD,=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 67 ++++++++++++------- .../leets_mate/LeetsMateApplicationTests.java | 8 +++ 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 28459e4..6f98503 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -11,16 +11,18 @@ public void run() { //입력부 Scanner scan = new Scanner(System.in); System.out.println("[Leets 오늘의 짝에게]를 시작합니다."); - System.out.println("멤버의 이름을 입력해 주세요. (, 로 구분)"); + System.out.println("멤버의 이름을 입력해 주세요. ',' 로 구분"); String members = scan.nextLine(); //영어 입력시 예외처리 - try { - checkHasNoEnglish(members); - }catch (InputMismatchException e){ - System.out.println("[ERROR] 이름은 한글로 입력해야 합니다"); - System.out.println("멤버의 이름을 다시 입력해 주세요. (, 로 구분)"); - members = scan.nextLine(); + while(true) { + try { + checkHasNoEnglish(members); + break; + } catch (InputMismatchException e) { + System.out.println("멤버의 이름을 한글로 다시 입력해 주세요. ',' 로 구분"); + members = scan.nextLine(); + } } //최대 짝 수 입력, 잘못된 입력 시 예외처리 @@ -31,8 +33,8 @@ public void run() { try { maxGroup = scan.nextInt(); break; - }catch (RuntimeException e){ - System.out.println("숫자를 입력하세요"); + }catch (InputMismatchException e){ + System.out.println("최대 짝 수를 다시 입력해주세요"); scan.next(); } } @@ -41,24 +43,37 @@ public void run() { List memberList = parseMembers(members); //최대 짝 수가 입력된 이름 수보다 크면 예외처리 - try { - checkDataValidity(memberNumber(memberList), maxGroup); - }catch (RuntimeException e){ - System.out.println("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다."); - System.out.println("최대 짝 수를 다시 입력해주세요"); - maxGroup = scan.nextInt(); + while(true) { + try { + checkDataValidity(memberNumber(memberList), maxGroup); + break; + } catch (RuntimeException e) { + System.out.println("최대 짝 수를 다시 입력해주세요"); + maxGroup = scan.nextInt(); + } } //버퍼 속 개행문자 소비 scan.nextLine(); - //다시추첨기능 - String index = "y"; - while (index.equals("y")){ - List> result = generateRandomGroups(memberList, maxGroup); - printResult(result); - System.out.println("다시 추첨하시겠습니까?"); + String index; + //다시추첨기능, y나n을 입력하지 않으면 예외처리 + while(true){ + printResult(generateRandomGroups(memberList, maxGroup)); + System.out.println("다시 추첨하겠습니까?"); index = scan.nextLine(); + while(true){ + try{ + checkYesOrNo(index); + break; + }catch (InputMismatchException e){ + System.out.println("y나 n을 입력해주세요"); + index = scan.nextLine(); + } + } + if(index.equals("n")){ + break; + } } } @@ -77,11 +92,10 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) { for (Character c : members.toCharArray()) { - if(!(c >= '가' && c <= '힣')){ + if((c >= 'A' && c <= 'z')){ throw new InputMismatchException("[ERROR] 이름은 한글로 입력해야 합니다."); } } - } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 @@ -91,6 +105,13 @@ public void checkDataValidity(int memberCount, int maximumGroupSize) { } } + //다시 추첨 기능에서 y,n을 입력하는지 검사하는 함수입니다. 유효하지 않다면 예외 출력 + public void checkYesOrNo(String index){ + if(!((index.equals("y"))|(index.equals("n")))){ + throw new InputMismatchException("[ERROR] 입력에는 'y','n'만 가능합니다."); + } + } + // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { Collections.shuffle(memberList); diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index f3d0f30..327a59f 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -47,4 +47,12 @@ void setUp() { }); assertThat("[ERROR] 이름은 한글로 입력해야 합니다.").isEqualTo(e.getMessage()); } + + @Test + void 다시추첨에서_잘못_입력한_경우_예외를_반환한다(){ + InputMismatchException e = assertThrows(InputMismatchException.class, () -> { + app.checkYesOrNo("a"); + }); + assertThat("[ERROR] 입력에는 'y','n'만 가능합니다.").isEqualTo(e.getMessage()); + } } \ No newline at end of file From 2ceefcff71e5a52c058d40b9bce0b9ea71e9309f Mon Sep 17 00:00:00 2001 From: hyxklee Date: Tue, 9 Apr 2024 09:46:36 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 80 ++++++++++++------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 6f98503..74ff693 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -15,49 +15,30 @@ public void run() { String members = scan.nextLine(); //영어 입력시 예외처리 - while(true) { - try { - checkHasNoEnglish(members); - break; - } catch (InputMismatchException e) { - System.out.println("멤버의 이름을 한글로 다시 입력해 주세요. ',' 로 구분"); - members = scan.nextLine(); - } - } + members = inputMembers(members, scan); //최대 짝 수 입력, 잘못된 입력 시 예외처리 System.out.println(); System.out.println("최대 짝 수를 입력해주세요."); int maxGroup; - while(true) { - try { - maxGroup = scan.nextInt(); - break; - }catch (InputMismatchException e){ - System.out.println("최대 짝 수를 다시 입력해주세요"); - scan.next(); - } - } + maxGroup = getMaxGroup(scan); //문자열에서 List로 변환 List memberList = parseMembers(members); //최대 짝 수가 입력된 이름 수보다 크면 예외처리 - while(true) { - try { - checkDataValidity(memberNumber(memberList), maxGroup); - break; - } catch (RuntimeException e) { - System.out.println("최대 짝 수를 다시 입력해주세요"); - maxGroup = scan.nextInt(); - } - } + maxGroup = getMaxGroup(memberList, maxGroup, scan); //버퍼 속 개행문자 소비 scan.nextLine(); - String index; //다시추첨기능, y나n을 입력하지 않으면 예외처리 + reDraw(memberList, maxGroup, scan); + } + + //다시 추첨 기능 + 예외처리 + private void reDraw(List memberList, int maxGroup, Scanner scan) { + String index; while(true){ printResult(generateRandomGroups(memberList, maxGroup)); System.out.println("다시 추첨하겠습니까?"); @@ -77,6 +58,49 @@ public void run() { } } + //최대 짝 수 크기 예외 처리 + private int getMaxGroup(List memberList, int maxGroup, Scanner scan) { + while(true) { + try { + checkDataValidity(memberNumber(memberList), maxGroup); + break; + } catch (RuntimeException e) { + System.out.println("최대 짝 수를 다시 입력해주세요"); + maxGroup = scan.nextInt(); + } + } + return maxGroup; + } + + //최대 짝 수 입력 예외 처리 + private static int getMaxGroup(Scanner scan) { + int maxGroup; + while(true) { + try { + maxGroup = scan.nextInt(); + break; + }catch (InputMismatchException e){ + System.out.println("최대 짝 수를 다시 입력해주세요"); + scan.next(); + } + } + return maxGroup; + } + + //멤버 입력 예외처리 + private String inputMembers(String members, Scanner scan) { + while(true) { + try { + checkHasNoEnglish(members); + break; + } catch (InputMismatchException e) { + System.out.println("멤버의 이름을 한글로 다시 입력해 주세요. ',' 로 구분"); + members = scan.nextLine(); + } + } + return members; + } + // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { From e2b1ff798d835cd109ebc6b79435bb3181c1c90a Mon Sep 17 00:00:00 2001 From: hyxklee Date: Tue, 9 Apr 2024 15:07:43 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leets/leets_mate/LeetsMateApplication.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 74ff693..7b99190 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -8,6 +8,7 @@ public class LeetsMateApplication { // 동작 함수입니다. public void run() { + //입력부 Scanner scan = new Scanner(System.in); System.out.println("[Leets 오늘의 짝에게]를 시작합니다."); @@ -17,17 +18,17 @@ public void run() { //영어 입력시 예외처리 members = inputMembers(members, scan); + //문자열에서 List로 변환 + List memberList = parseMembers(members); + //최대 짝 수 입력, 잘못된 입력 시 예외처리 System.out.println(); System.out.println("최대 짝 수를 입력해주세요."); int maxGroup; maxGroup = getMaxGroup(scan); - //문자열에서 List로 변환 - List memberList = parseMembers(members); - //최대 짝 수가 입력된 이름 수보다 크면 예외처리 - maxGroup = getMaxGroup(memberList, maxGroup, scan); + maxGroup = checkMaxGroup(memberList, maxGroup, scan); //버퍼 속 개행문자 소비 scan.nextLine(); @@ -59,7 +60,7 @@ private void reDraw(List memberList, int maxGroup, Scanner scan) { } //최대 짝 수 크기 예외 처리 - private int getMaxGroup(List memberList, int maxGroup, Scanner scan) { + private int checkMaxGroup(List memberList, int maxGroup, Scanner scan) { while(true) { try { checkDataValidity(memberNumber(memberList), maxGroup); From eb8fabe4247bd5343c753f9d558707c90ca02c41 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Thu, 11 Apr 2024 17:22:35 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EC=88=98?= =?UTF-8?q?=EC=A0=95/=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95/=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 102 +++++++++--------- .../leets_mate/LeetsMateApplicationTests.java | 6 +- 2 files changed, 52 insertions(+), 56 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 7b99190..42d9900 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -6,95 +6,93 @@ public class LeetsMateApplication { + //반복된 입력작업을 위해 전역변수로 선언 + Scanner scan = new Scanner(System.in); + String members; + // 동작 함수입니다. public void run() { - //입력부 - Scanner scan = new Scanner(System.in); System.out.println("[Leets 오늘의 짝에게]를 시작합니다."); System.out.println("멤버의 이름을 입력해 주세요. ',' 로 구분"); - String members = scan.nextLine(); //영어 입력시 예외처리 - members = inputMembers(members, scan); + members = inputMembers(members); //문자열에서 List로 변환 List memberList = parseMembers(members); - //최대 짝 수 입력, 잘못된 입력 시 예외처리 - System.out.println(); - System.out.println("최대 짝 수를 입력해주세요."); - int maxGroup; - maxGroup = getMaxGroup(scan); - - //최대 짝 수가 입력된 이름 수보다 크면 예외처리 - maxGroup = checkMaxGroup(memberList, maxGroup, scan); + //최대 짝 수 입력. 예외처리 + int maxGroup = checkMaxGroup(memberList); //버퍼 속 개행문자 소비 scan.nextLine(); + //초기 결과 출력 + printResult(generateRandomGroups(memberList,maxGroup)); + //다시추첨기능, y나n을 입력하지 않으면 예외처리 - reDraw(memberList, maxGroup, scan); + reDraw(memberList, maxGroup); } - //다시 추첨 기능 + 예외처리 - private void reDraw(List memberList, int maxGroup, Scanner scan) { - String index; + //다시 추첨 기능 + private void reDraw(List memberList, int maxGroup) { + String reDrawOpinion; while(true){ - printResult(generateRandomGroups(memberList, maxGroup)); System.out.println("다시 추첨하겠습니까?"); - index = scan.nextLine(); - while(true){ - try{ - checkYesOrNo(index); - break; - }catch (InputMismatchException e){ - System.out.println("y나 n을 입력해주세요"); - index = scan.nextLine(); - } - } - if(index.equals("n")){ + reDrawOpinion = scan.nextLine(); + reDrawOpinion = getOpinion(reDrawOpinion); + if(reDrawOpinion.equals("n")){ break; } + printResult(generateRandomGroups(memberList, maxGroup)); } } - //최대 짝 수 크기 예외 처리 - private int checkMaxGroup(List memberList, int maxGroup, Scanner scan) { - while(true) { - try { - checkDataValidity(memberNumber(memberList), maxGroup); + //다시 추첨 입력 예외처리 + private String getOpinion(String index) { + while(true){ + try{ + checkYesOrNo(index); break; - } catch (RuntimeException e) { - System.out.println("최대 짝 수를 다시 입력해주세요"); - maxGroup = scan.nextInt(); + }catch (IllegalArgumentException e){ + System.out.println("y나 n을 입력해주세요"); + index = scan.nextLine(); } } - return maxGroup; + return index; } - //최대 짝 수 입력 예외 처리 - private static int getMaxGroup(Scanner scan) { + //최대 짝 수 크기 예외 처리 + private int checkMaxGroup(List memberList) { + System.out.println("\n최대 짝 수를 입력해주세요"); int maxGroup; - while(true) { + while (true) { try { maxGroup = scan.nextInt(); + checkDataValidity(memberNumber(memberList), maxGroup); break; - }catch (InputMismatchException e){ + } catch (InputMismatchException e) { + System.out.println("최대 짝 수를 다시 입력해주세요"); + scan.nextLine(); + } catch (IllegalArgumentException e) { System.out.println("최대 짝 수를 다시 입력해주세요"); - scan.next(); + scan.nextLine(); } } return maxGroup; } + //멤버 입력 예외처리 - private String inputMembers(String members, Scanner scan) { + private String inputMembers(String members) { + //초기 멤버 입력 + members = scan.nextLine(); while(true) { try { checkHasNoEnglish(members); break; - } catch (InputMismatchException e) { + } catch (IllegalArgumentException e) { System.out.println("멤버의 이름을 한글로 다시 입력해 주세요. ',' 로 구분"); members = scan.nextLine(); } @@ -105,8 +103,8 @@ private String inputMembers(String members, Scanner scan) { // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - String[] arr = members.split(","); - return new ArrayList<>(Arrays.asList(arr)); + String[] parsedMember = members.split(","); + return Arrays.asList(parsedMember); } // 총 멤버수를 반환합니다. @@ -117,8 +115,8 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) { for (Character c : members.toCharArray()) { - if((c >= 'A' && c <= 'z')){ - throw new InputMismatchException("[ERROR] 이름은 한글로 입력해야 합니다."); + if(!((c >= 'ㄱ' && c <= '힣')||c==',')){ + throw new IllegalArgumentException("[ERROR] 이름은 한글로 입력해야 합니다."); } } } @@ -126,14 +124,14 @@ public void checkHasNoEnglish(String members) { // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 public void checkDataValidity(int memberCount, int maximumGroupSize) { if(memberCount> result) { for (List strings : result) { System.out.println(strings); } - System.out.println(); - System.out.println("추첨을 완료하였습니다."); - System.out.println(); + System.out.println("\n추첨을 완료하였습니다.\n"); } public static void main(String[] args) { diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index 327a59f..67ae0c4 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -34,7 +34,7 @@ void setUp() { @Test void 멤버수와_최대_멤버수를_잘못_입력한_경우_예외를_반환한다() { - RuntimeException e = assertThrows(RuntimeException.class, () -> { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> { app.checkDataValidity(3, 4); }); assertThat("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다.").isEqualTo(e.getMessage()); @@ -42,7 +42,7 @@ void setUp() { @Test void 멤버_문자열에_영어를_입력한_경우_예외를_반환한다() { - InputMismatchException e = assertThrows(InputMismatchException.class, () -> { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> { app.checkHasNoEnglish("welcome,to,leets"); }); assertThat("[ERROR] 이름은 한글로 입력해야 합니다.").isEqualTo(e.getMessage()); @@ -50,7 +50,7 @@ void setUp() { @Test void 다시추첨에서_잘못_입력한_경우_예외를_반환한다(){ - InputMismatchException e = assertThrows(InputMismatchException.class, () -> { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> { app.checkYesOrNo("a"); }); assertThat("[ERROR] 입력에는 'y','n'만 가능합니다.").isEqualTo(e.getMessage());