From 4043e13ba312d364362b7d83fb3b6c932e1ebbfb Mon Sep 17 00:00:00 2001 From: jj0526 Date: Wed, 10 Apr 2024 22:31:28 +0900 Subject: [PATCH 1/2] make groups randomly --- .../leets_mate/LeetsMateApplication.java | 120 +++++++++++++++++- .../leets_mate/LeetsMateApplicationTests.java | 8 +- 2 files changed, 117 insertions(+), 11 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..8eeed24 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -5,37 +5,143 @@ public class LeetsMateApplication { // 동작 함수입니다. - public void run() { + public void run() throws Exception { + Boolean playagain = true; + while(playagain) { + Scanner sc = new Scanner(System.in); + System.out.println("참석자들의 이름을 입력해 주세요. (,로 구분)"); + String str = sc.nextLine(); + checkHasNoEnglish(str); + List memberList = parseMembers(str); + System.out.println(Arrays.deepToString(memberList.toArray())); + + int memberCount = memberNumber(memberList); + + System.out.println("최대 짝 수를 입력해 주세요"); + int maximumGroupSize = sc.nextInt(); + checkDataValidity(memberCount, maximumGroupSize); //멤버수와 최대 짝수 데이터가 유효한지 검사 + + List> result = generateRandomGroups(memberList, maximumGroupSize); + System.out.println("오늘의 짝 추천 결과입니다."); + printResult(result); + //김성민,조혜원,노정완,김혜진,양태석, 전시현, 아아 + + System.out.println("추천을 완료했습니다.\n다시 구성하시겠습니까? (y or n):"); + + char again = sc.next().charAt(0); + if(again == 'n' || again == 'N'){ + playagain = false; + } + } + System.out.println("자리를 이동해 서로에게 인사해주세요"); + } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + //String[] memberList = members.split(","); + /* + for(int i = 0; i memberList = Arrays.asList(members.split(",")); + return memberList; } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) { + public void checkHasNoEnglish(String members) throws Exception { + if(members.matches(".*[a-zA-Z].*")) {//영어가 포함되면 + System.out.println("has english"); + throw new Exception("has english"); + } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 - public void checkDataValidity(int memberCount, int maximumGroupSize) { + public void checkDataValidity(int memberCount, int maximumGroupSize) throws Exception { + if(memberCount 3개조 + //멤버 수 9명, maximumGroupSize:4 -> 4*2+1, 4, public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + int size = memberList.size(); + Random r = new Random(); + int index; + + ArrayList selected = new ArrayList(); + + for (int i = 0; i=maximumGroupSize){ + groupnum[i] = maximumGroupSize; + left-=maximumGroupSize; + } + else{ + groupnum[i] = left; + } + } + //at least 2 people in a group + if(left==1 && maximumGroupSize!=1 && maximumGroupSize !=2){ + //left alone + groupnum[times-2]--; + groupnum[times-1]++; //change group + } + List> result = new ArrayList<>(); + + //add member names as the num of members with groupnum[i] + int indexOfSelected = 0; + for(int i = 0; i innerList = new ArrayList<>(); + for(int j = 0; j> result) { + System.out.println(result); } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { LeetsMateApplication app = new LeetsMateApplication(); app.run(); } diff --git a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java index 706e295..fbb111a 100644 --- a/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java +++ b/src/test/java/leets/leets_mate/LeetsMateApplicationTests.java @@ -18,28 +18,28 @@ void setUp() { } @Test - void 입력받은_문자열을_파싱하여_리스트로_만든다() { + void parseMembers() { String members = "리츠에,오신,걸,환영합니다"; List actual = app.parseMembers(members); assertThat(actual).containsExactly("리츠에", "오신", "걸", "환영합니다"); } @Test - void 멤버수를_반환한다() { + void memberNumber() { List members = Arrays.asList("리츠에", "오신", "걸", "환영합니다"); int actual = app.memberNumber(members); assertThat(actual).isEqualTo(4); } @Test - void 멤버수와_최대_멤버수를_잘못_입력한_경우_예외를_반환한다() { + void checkHasNoEnglish() { assertThrows(Exception.class, () -> { app.checkDataValidity(3, 4); }); } @Test - void 멤버_문자열에_영어를_입력한_경우_예외를_반환한다() { + void checkDataValidity() { assertThrows(Exception.class, () -> { app.checkHasNoEnglish("welcome,to,leets"); }); From f946b7386e6adc38613027f362ee70e920bafc41 Mon Sep 17 00:00:00 2001 From: jj0526 Date: Thu, 11 Apr 2024 19:51:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?review=EB=90=9C=20=EB=82=B4=EC=9A=A9=20?= =?UTF-8?q?=EC=88=98=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 8eeed24..432e479 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -6,14 +6,14 @@ public class LeetsMateApplication { // 동작 함수입니다. public void run() throws Exception { - Boolean playagain = true; - while(playagain) { + Boolean isDone = false; + while(!isDone) { Scanner sc = new Scanner(System.in); System.out.println("참석자들의 이름을 입력해 주세요. (,로 구분)"); String str = sc.nextLine(); checkHasNoEnglish(str); List memberList = parseMembers(str); - System.out.println(Arrays.deepToString(memberList.toArray())); + System.out.println(Arrays.deepToString(memberList.toArray())); //2차월 어레이 바로 출력 int memberCount = memberNumber(memberList); @@ -29,8 +29,8 @@ public void run() throws Exception { System.out.println("추천을 완료했습니다.\n다시 구성하시겠습니까? (y or n):"); char again = sc.next().charAt(0); - if(again == 'n' || again == 'N'){ - playagain = false; + if(!(again == 'y' || again == 'Y')){ + isDone = true; //n, N을 포함한 다른 입력은 다시시작x } } System.out.println("자리를 이동해 서로에게 인사해주세요"); @@ -45,7 +45,7 @@ public List parseMembers(String members) { if(members[i]) }*/ - members = members.replaceAll(", ", ","); + members = members.replaceAll(" ", ""); //공백 제거 List memberList = Arrays.asList(members.split(",")); return memberList; } @@ -78,21 +78,14 @@ public List> generateRandomGroups(List memberList, int maxi Random r = new Random(); int index; - ArrayList selected = new ArrayList(); - - for (int i = 0; i> generateRandomGroups(List memberList, int maxi times = size/maximumGroupSize+1; //the number of total groups } - + //그룹 당 인원 수 정하기 int left = size; //get num of members per group for(int i = 0; i=maximumGroupSize){ - groupnum[i] = maximumGroupSize; + groupNum[i] = maximumGroupSize; left-=maximumGroupSize; } else{ - groupnum[i] = left; + groupNum[i] = left; } } + //at least 2 people in a group if(left==1 && maximumGroupSize!=1 && maximumGroupSize !=2){ //left alone - groupnum[times-2]--; - groupnum[times-1]++; //change group + groupNum[times-2]--; + groupNum[times-1]++; //change group } List> result = new ArrayList<>(); @@ -125,8 +119,8 @@ public List> generateRandomGroups(List memberList, int maxi int indexOfSelected = 0; for(int i = 0; i innerList = new ArrayList<>(); - for(int j = 0; j