From 86d0ac43e6afab37deb224eba75f61ce804ec8f5 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 12:31:13 +0900 Subject: [PATCH 01/28] =?UTF-8?q?docs(=EA=B8=B0=EB=8A=A5=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?)=20:=20=EA=B5=AC=ED=98=84=EC=A0=84=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=EC=9D=84=20=EA=B0=84=EB=9E=B5=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\270\260\353\212\245\353\252\251\353\241\235.md" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "\352\270\260\353\212\245\353\252\251\353\241\235.md" diff --git "a/\352\270\260\353\212\245\353\252\251\353\241\235.md" "b/\352\270\260\353\212\245\353\252\251\353\241\235.md" new file mode 100644 index 0000000..695f2c3 --- /dev/null +++ "b/\352\270\260\353\212\245\353\252\251\353\241\235.md" @@ -0,0 +1,9 @@ +### 기능 목록 +1. 사용자의 입력을 받는 입력부 + 1. 동일한 자동차 이름이 존재하는지 여부를 확인 +2. 입력받은 자동차 이름을 분리하여 자동차 객체를 생성하는 기능 +3. 입력받은 시도 횟수를 저장하는 기능 + 1. 숫자가 입력이 되었는지 여부를 확인 +4. 자동차 객체의 움직임을 결정하는 기능 +5. 자동차 객체의 움직임을 출력하는 기능 +6. 우승자를 결정하는 기능 \ No newline at end of file From ecb44867a697cb67439a84d01b07ae2ae064f976 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 12:38:46 +0900 Subject: [PATCH 02/28] =?UTF-8?q?feat(Application)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed045..ed32d60 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,23 @@ package racingcar; +import java.util.ArrayList; +import java.util.List; + +import camp.nextstep.edu.missionutils.Console; + public class Application { - public static void main(String[] args) { - // TODO 구현 진행 - } + + private static final String CAR_NAME_DELIMITER = ","; + private final List cars; + + public Application(String carNames) { + cars = new ArrayList<>(); + String[] carNamesArray = carNames.split(CAR_NAME_DELIMITER); + for (String carName : carNamesArray) { + cars.add(new Car(carName)); + } + } + + public static void main(String[] args) { + } } From 476ee324c160fa2c26f3478111d2873fc3b19c80 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 12:39:34 +0900 Subject: [PATCH 03/28] =?UTF-8?q?feat(Application)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=97=90=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EC=9D=B4=20=EC=9E=88=EB=8A=94=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index ed32d60..a48e4da 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -13,11 +13,23 @@ public class Application { public Application(String carNames) { cars = new ArrayList<>(); String[] carNamesArray = carNames.split(CAR_NAME_DELIMITER); + checkDuplicateName(carNamesArray); for (String carName : carNamesArray) { cars.add(new Car(carName)); } } + + private void checkDuplicateName(String[] carNamesArray){ + for (int i = 0; i < carNamesArray.length; i++) { + for (int j = i + 1; j < carNamesArray.length; j++) { + if (carNamesArray[i].equals(carNamesArray[j])) { + throw new IllegalArgumentException("[Error] 중복된 이름이 있습니다."); + } + } + } + } + public static void main(String[] args) { } } From 6d4091e9a16a080eb61319406f66a996a0cbbc0c Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 13:22:47 +0900 Subject: [PATCH 04/28] =?UTF-8?q?test(Application)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=EC=97=90=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EC=9D=B4=20=EC=9E=88=EC=9D=84=EB=95=8C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=EA=B0=80=20=EB=82=98=EB=8A=94=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/ApplicationTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 8f6f70a..168c1cd 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -5,7 +5,7 @@ import static camp.nextstep.edu.missionutils.test.Assertions.assertRandomNumberInRangeTest; import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; class ApplicationTest extends NsTest { private static final int MOVING_FORWARD = 4; @@ -34,6 +34,19 @@ class ApplicationTest extends NsTest { ); } + @Test + void 중복된_이름에_대한_예외처리(){ + String carnames = "pobi,javaji,pobi"; + try{ + new Application(carnames); + } + catch (Exception e){ + assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class); + return; + } + assertThat(false).isEqualTo(true); + } + @Override public void runMain() { Application.main(new String[]{}); From 3cb0d1996f932c426ecd7d11a16736c620e5f2af Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 13:26:20 +0900 Subject: [PATCH 05/28] =?UTF-8?q?refactor(Application)=20:=20set=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=EA=B5=AC=EC=A1=B0=EB=A5=BC=20=ED=99=9C=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=20=EC=A4=91=EB=B3=B5=20=EA=B2=80=EC=82=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존의 코드는 indent가 3단계 이상이었고, 2단계까지 문제에서 허용하기에 해당 요구사항 충족을 위해 변경함 --- src/main/java/racingcar/Application.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a48e4da..a458ea6 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,10 @@ package racingcar; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import camp.nextstep.edu.missionutils.Console; @@ -21,12 +24,9 @@ public Application(String carNames) { private void checkDuplicateName(String[] carNamesArray){ - for (int i = 0; i < carNamesArray.length; i++) { - for (int j = i + 1; j < carNamesArray.length; j++) { - if (carNamesArray[i].equals(carNamesArray[j])) { - throw new IllegalArgumentException("[Error] 중복된 이름이 있습니다."); - } - } + Set carNamesSet = new HashSet<>(Arrays.asList(carNamesArray)); + if (carNamesSet.size() != carNamesArray.length) { + throw new IllegalArgumentException("[Error] 중복된 이름이 있습니다."); } } From 517644e7ab8434285f048ac7fa1440104d9fb511 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sun, 12 Mar 2023 13:32:38 +0900 Subject: [PATCH 06/28] =?UTF-8?q?refactor=20:=20indent=EA=B0=80=20tab?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=84=A4=EC=A0=95=EB=90=98=EC=96=B4?= =?UTF-8?q?=EC=9E=88=EC=96=B4=204=EA=B0=9C=EC=9D=98=20space=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 45 +++++++++----------- src/test/java/racingcar/ApplicationTest.java | 10 ++--- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a458ea6..64090e7 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -6,30 +6,27 @@ import java.util.List; import java.util.Set; -import camp.nextstep.edu.missionutils.Console; - public class Application { - private static final String CAR_NAME_DELIMITER = ","; - private final List cars; - - public Application(String carNames) { - cars = new ArrayList<>(); - String[] carNamesArray = carNames.split(CAR_NAME_DELIMITER); - checkDuplicateName(carNamesArray); - for (String carName : carNamesArray) { - cars.add(new Car(carName)); - } - } - - - private void checkDuplicateName(String[] carNamesArray){ - Set carNamesSet = new HashSet<>(Arrays.asList(carNamesArray)); - if (carNamesSet.size() != carNamesArray.length) { - throw new IllegalArgumentException("[Error] 중복된 이름이 있습니다."); - } - } - - public static void main(String[] args) { - } + private static final String CAR_NAME_DELIMITER = ","; + private final List cars; + + public Application(String carNames) { + cars = new ArrayList<>(); + String[] carNamesArray = carNames.split(CAR_NAME_DELIMITER); + checkDuplicateName(carNamesArray); + for (String carName : carNamesArray) { + cars.add(new Car(carName)); + } + } + + private void checkDuplicateName(String[] carNamesArray) { + Set carNamesSet = new HashSet<>(Arrays.asList(carNamesArray)); + if (carNamesSet.size() != carNamesArray.length) { + throw new IllegalArgumentException("[Error] 중복된 이름이 있습니다."); + } + } + + public static void main(String[] args) { + } } diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 168c1cd..f39ae9f 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -1,6 +1,7 @@ package racingcar; import camp.nextstep.edu.missionutils.test.NsTest; + import org.junit.jupiter.api.Test; import static camp.nextstep.edu.missionutils.test.Assertions.assertRandomNumberInRangeTest; @@ -35,12 +36,11 @@ class ApplicationTest extends NsTest { } @Test - void 중복된_이름에_대한_예외처리(){ + void 중복된_이름에_대한_예외처리() { String carnames = "pobi,javaji,pobi"; - try{ + try { new Application(carnames); - } - catch (Exception e){ + } catch (Exception e) { assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class); return; } @@ -49,6 +49,6 @@ class ApplicationTest extends NsTest { @Override public void runMain() { - Application.main(new String[]{}); + Application.main(new String[] {}); } } From a1979df428218ad508bf8dddcfa240fb374dbd94 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:33:23 +0900 Subject: [PATCH 07/28] =?UTF-8?q?feat(InputManager)=20:=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=99=80,=20=EA=B8=80=EC=9E=90=EB=A5=BC=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=98=A4=EB=8A=94=20=EC=97=AD=ED=95=A0=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=ED=96=89=ED=95=A0=20static=20class=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/InputManager.java | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/racingcar/InputManager.java diff --git a/src/main/java/racingcar/InputManager.java b/src/main/java/racingcar/InputManager.java new file mode 100644 index 0000000..a0513fc --- /dev/null +++ b/src/main/java/racingcar/InputManager.java @@ -0,0 +1,25 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; + +public class InputManager { + private static final String CAR_NAME_DELIMITER = ","; + + public static String[] getCarNames(){ + String inputLine = Console.readLine(); + return inputLine.split(CAR_NAME_DELIMITER); + } + + public static int getCount(){ + String inputLine = Console.readLine(); + try{ + int count = Integer.parseInt(inputLine); + if(count < 1){ + throw new IllegalArgumentException("[Error] 1 이상의 숫자를 입력해주세요."); + } + return count; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[Error]숫자를 입력해주세요."); + } + } +} From 86a9bf23310d50b4ed9819f72d55cbc49042c415 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:35:36 +0900 Subject: [PATCH 08/28] =?UTF-8?q?test(ApplicationTest)=20:=20=EA=B8=80?= =?UTF-8?q?=EC=9E=90=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=99=80=EC=84=9C=20?= =?UTF-8?q?=EC=9E=90=EB=A5=B4=EB=8A=94=20=EC=9D=BC=EC=9D=84=20InputManager?= =?UTF-8?q?=EC=97=90=20=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/ApplicationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index f39ae9f..bd52553 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -37,7 +37,7 @@ class ApplicationTest extends NsTest { @Test void 중복된_이름에_대한_예외처리() { - String carnames = "pobi,javaji,pobi"; + String[] carnames = {"pobi", "javaji", "pobi"}; try { new Application(carnames); } catch (Exception e) { From 29d7d7fcd25100c12c90e27e429426b6d5d3fb12 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:38:21 +0900 Subject: [PATCH 09/28] =?UTF-8?q?refactor(Application)=20:=20Application?= =?UTF-8?q?=EC=9D=B4=20String=20=EB=B0=B0=EC=97=B4=EB=A1=9C=20Init=20?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 64090e7..e4037da 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -11,11 +11,10 @@ public class Application { private static final String CAR_NAME_DELIMITER = ","; private final List cars; - public Application(String carNames) { + public Application(String[] carNames) { cars = new ArrayList<>(); - String[] carNamesArray = carNames.split(CAR_NAME_DELIMITER); - checkDuplicateName(carNamesArray); - for (String carName : carNamesArray) { + checkDuplicateName(carNames); + for (String carName : carNames) { cars.add(new Car(carName)); } } From 24ca6b515379e3f0aca86377de19bfc935e519b0 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:43:32 +0900 Subject: [PATCH 10/28] =?UTF-8?q?feat(Application)=20:=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=EC=97=90=20=EB=AA=87=EB=B2=88=EC=A7=B8=20=ED=84=B4?= =?UTF-8?q?=EC=9D=B8=EC=A7=80=20=EC=B2=B4=ED=81=AC=ED=95=98=EA=B3=A0,=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index e4037da..4a89eca 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -10,10 +10,14 @@ public class Application { private static final String CAR_NAME_DELIMITER = ","; private final List cars; + private final int maxTurnCount; - public Application(String[] carNames) { - cars = new ArrayList<>(); + public Application(String[] carNames, int maxTurnCount) { checkDuplicateName(carNames); + checkTurnValid(maxTurnCount); + + cars = new ArrayList<>(); + this.maxTurnCount = maxTurnCount; for (String carName : carNames) { cars.add(new Car(carName)); } @@ -26,6 +30,12 @@ private void checkDuplicateName(String[] carNamesArray) { } } + private void checkTurnValid(int turn) { + if (turn < 1) { + throw new IllegalArgumentException("[Error] 1 이상의 숫자를 입력해주세요."); + } + } + public static void main(String[] args) { } } From b48267e97d0ba269ea3dc14c8b97e929edc8284e Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:44:03 +0900 Subject: [PATCH 11/28] =?UTF-8?q?test(ApplicationTest)=20:=20=EC=B5=9C?= =?UTF-8?q?=EB=8C=80=20=ED=84=B4=20=ED=9A=9F=EC=88=98=EB=A5=BC=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=B0=9B=EA=B2=8C=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/ApplicationTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index bd52553..5fa496e 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -38,8 +38,9 @@ class ApplicationTest extends NsTest { @Test void 중복된_이름에_대한_예외처리() { String[] carnames = {"pobi", "javaji", "pobi"}; + int maxTurnCount = 10; try { - new Application(carnames); + new Application(carnames, maxTurnCount); } catch (Exception e) { assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class); return; From edd9e55cb302d873e572f1fd974ba409f40d8058 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:45:08 +0900 Subject: [PATCH 12/28] =?UTF-8?q?refactor(InputManager)=20:=20=ED=84=B4=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98=EC=9D=98=20validation=20check=20logic?= =?UTF-8?q?=EC=9D=84=20=EC=96=B4=ED=94=8C=EB=A6=AC=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=85=98=EC=97=90=20=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/InputManager.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/racingcar/InputManager.java b/src/main/java/racingcar/InputManager.java index a0513fc..fb9a756 100644 --- a/src/main/java/racingcar/InputManager.java +++ b/src/main/java/racingcar/InputManager.java @@ -13,11 +13,7 @@ public static String[] getCarNames(){ public static int getCount(){ String inputLine = Console.readLine(); try{ - int count = Integer.parseInt(inputLine); - if(count < 1){ - throw new IllegalArgumentException("[Error] 1 이상의 숫자를 입력해주세요."); - } - return count; + return Integer.parseInt(inputLine); } catch (NumberFormatException e) { throw new IllegalArgumentException("[Error]숫자를 입력해주세요."); } From 3859fe8fd6e8ecf7b813ff9d59e9c17887b4be49 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:54:11 +0900 Subject: [PATCH 13/28] =?UTF-8?q?feat(Car)=20:=20=EB=9E=9C=EB=8D=A4?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=95=9E=EC=9C=BC=EB=A1=9C=20=EA=B0=80?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=A7=8C=EB=93=9C=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df94..1a31673 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,6 +1,9 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; + public class Car { + private static final int moveRate = 20; private final String name; private int position = 0; @@ -8,5 +11,8 @@ public Car(String name) { this.name = name; } - // 추가 기능 구현 + public void randomlyGoForward() { + if(Randoms.pickNumberInRange(0, 100) >= moveRate) + position++; + } } From 28e11621e6fb0495c7b85380c5967a103bbb8c41 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 14:56:03 +0900 Subject: [PATCH 14/28] =?UTF-8?q?feat(Car)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=EC=84=9C=20get?= =?UTF-8?q?ter=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 getter들을 사용해서 Application이 출력을 진행할 예정임 Related to : #5 #6 --- src/main/java/racingcar/Car.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1a31673..e6af298 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -15,4 +15,12 @@ public void randomlyGoForward() { if(Randoms.pickNumberInRange(0, 100) >= moveRate) position++; } + + public String getName() { + return name; + } + + public int getPosition() { + return position; + } } From be0d99bc9bc11d32253f82334d17583697c8dce0 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 15:50:47 +0900 Subject: [PATCH 15/28] =?UTF-8?q?feat(PrintManager)=20:=20=EC=BD=98?= =?UTF-8?q?=EC=86=94=EC=97=90=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=9C=84=EC=B9=98=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit printManager 가 모든 print method들을 물고 있도록 만들어, 출력과 관련한 책임을 지도록 만듦 Related to : #1 #5 --- src/main/java/racingcar/PrintManager.java | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/racingcar/PrintManager.java diff --git a/src/main/java/racingcar/PrintManager.java b/src/main/java/racingcar/PrintManager.java new file mode 100644 index 0000000..2469aef --- /dev/null +++ b/src/main/java/racingcar/PrintManager.java @@ -0,0 +1,29 @@ +package racingcar; + +import java.util.List; + +public class PrintManager { + + public void printCarNameInputMessage() { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + } + + public void printTurnInputMessage() { + System.out.println("시도할 회수는 몇회인가요?"); + } + + public void printCarData(List cars) { + for (Car car : cars) { + System.out.println(car.getName() + " : " + getDash(car.getPosition())); + } + System.out.println(); + } + + private String getDash(int position) { + StringBuilder dash = new StringBuilder(); + for (int i = 0; i < position; i++) { + dash.append("-"); + } + return dash.toString(); + } +} From e6c8dbec4dcc617c6ca12db4fdf02248ee308c27 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 16:00:51 +0900 Subject: [PATCH 16/28] =?UTF-8?q?feat(PrintManager)=20:=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=ED=8F=AC=EB=A7=B7=EC=9D=84=20=EB=A7=9E=EC=B6=94?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EC=8B=A4=ED=96=89=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=ED=95=A8=EC=88=98=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/PrintManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/PrintManager.java b/src/main/java/racingcar/PrintManager.java index 2469aef..a8e9112 100644 --- a/src/main/java/racingcar/PrintManager.java +++ b/src/main/java/racingcar/PrintManager.java @@ -4,22 +4,26 @@ public class PrintManager { - public void printCarNameInputMessage() { + public static void printCarNameInputMessage() { System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); } - public void printTurnInputMessage() { + public static void printTurnInputMessage() { System.out.println("시도할 회수는 몇회인가요?"); } - public void printCarData(List cars) { + public static void printResultMessage() { + System.out.println("실행 결과"); + } + + public static void printCarData(List cars) { for (Car car : cars) { System.out.println(car.getName() + " : " + getDash(car.getPosition())); } System.out.println(); } - private String getDash(int position) { + private static String getDash(int position) { StringBuilder dash = new StringBuilder(); for (int i = 0; i < position; i++) { dash.append("-"); From 7454c9f0816be30099c3bfd44be27997f08e5568 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 16:05:20 +0900 Subject: [PATCH 17/28] =?UTF-8?q?feat(Application)=20:=20=EC=8A=B9?= =?UTF-8?q?=EC=9E=90=20=ED=99=95=EC=9D=B8=ED=95=A8=EC=88=98=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 가장 먼거리를 구하고, 해당 거리만큼 이동한 모든 차량을 반환 Related to : #6 --- src/main/java/racingcar/Application.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 4a89eca..fe029fc 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -36,6 +36,20 @@ private void checkTurnValid(int turn) { } } + private List getWinners(){ + List winners = new ArrayList<>(); + int maxPosition = 0; + for (Car car : cars) { + maxPosition = Math.max(maxPosition, car.getPosition()); + } + for (Car car : cars) { + if (car.getPosition() == maxPosition) { + winners.add(car); + } + } + return winners; + } + public static void main(String[] args) { } } From 5cd9fb16964a5a04e2c44a4733058e504c7dfeb8 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 16:09:33 +0900 Subject: [PATCH 18/28] =?UTF-8?q?feat(Application)=20:=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A7=84=ED=96=89=20=EB=A1=9C=EC=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 각 차량이 randomlyForward함수 통해서 이동할 수 있도록 구현 Related To : #4 #5 --- src/main/java/racingcar/Application.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index fe029fc..3ff9d49 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -23,6 +23,16 @@ public Application(String[] carNames, int maxTurnCount) { } } + public void start() { + PrintManager.printResultMessage(); + for (int i = 0; i < maxTurnCount; i++) { + for (Car car : cars) { + car.randomlyGoForward(); + } + PrintManager.printCarData(cars); + } + } + private void checkDuplicateName(String[] carNamesArray) { Set carNamesSet = new HashSet<>(Arrays.asList(carNamesArray)); if (carNamesSet.size() != carNamesArray.length) { @@ -36,7 +46,7 @@ private void checkTurnValid(int turn) { } } - private List getWinners(){ + private List getWinnerCars(){ List winners = new ArrayList<>(); int maxPosition = 0; for (Car car : cars) { From cf54dffc156562c0970fc1510ae8b69e656afc7b Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 16:30:08 +0900 Subject: [PATCH 19/28] =?UTF-8?q?feat(PrintManager)=20:=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A2=85=EB=A3=8C=20=EB=A9=94=EC=84=B8=EC=A7=80=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 마지막은 ,가 출력 되지 않도록 설정 Related To : #6 --- src/main/java/racingcar/PrintManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/racingcar/PrintManager.java b/src/main/java/racingcar/PrintManager.java index a8e9112..1c9d8a3 100644 --- a/src/main/java/racingcar/PrintManager.java +++ b/src/main/java/racingcar/PrintManager.java @@ -30,4 +30,14 @@ private static String getDash(int position) { } return dash.toString(); } + + public static void printWinner(List winnerCars) { + System.out.print("최종 우승자 : "); + for(Car winner : winnerCars){ + System.out.print(winner.getName()); + if(winner != winnerCars.get(winnerCars.size()-1)) + System.out.print(", "); + } + System.out.println(); + } } From baf4aa8703476a40901cedaca45c958e5a739a57 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Wed, 15 Mar 2023 16:35:10 +0900 Subject: [PATCH 20/28] =?UTF-8?q?feat(Appliation)=20:=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=20=EC=B4=9D=EA=B4=84=20=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=EB=B0=8F=20main=20method=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 3ff9d49..4519616 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -33,6 +33,11 @@ public void start() { } } + public void reward(){ + List winnerCars = getWinnerCars(); + PrintManager.printWinner(winnerCars); + } + private void checkDuplicateName(String[] carNamesArray) { Set carNamesSet = new HashSet<>(Arrays.asList(carNamesArray)); if (carNamesSet.size() != carNamesArray.length) { @@ -61,5 +66,11 @@ private List getWinnerCars(){ } public static void main(String[] args) { + String[] cars = InputManager.getCarNames(); + int gameCount = InputManager.getCount(); + Application game = new Application(cars, gameCount); + + game.start(); + game.reward(); } } From 914fcfa00d5a2f7198b1be41cae90001a08eff3a Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Fri, 17 Mar 2023 13:52:33 +0900 Subject: [PATCH 21/28] =?UTF-8?q?refactor(OutputManager,=20InputManager)?= =?UTF-8?q?=20:=20static=EC=9D=B4=20=EC=95=84=EB=8B=8C=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=ED=99=94=20=EA=B0=80=EB=8A=A5?= =?UTF-8?q?=ED=95=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IOC를 통해서 상관관계가 있는 객체들을 주입받도록(DI 가능하도록) 만들려고 함. --- src/main/java/racingcar/InputManager.java | 4 +- src/main/java/racingcar/OutputManager.java | 43 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/racingcar/OutputManager.java diff --git a/src/main/java/racingcar/InputManager.java b/src/main/java/racingcar/InputManager.java index fb9a756..36ff180 100644 --- a/src/main/java/racingcar/InputManager.java +++ b/src/main/java/racingcar/InputManager.java @@ -5,12 +5,12 @@ public class InputManager { private static final String CAR_NAME_DELIMITER = ","; - public static String[] getCarNames(){ + public String[] getCarNames(){ String inputLine = Console.readLine(); return inputLine.split(CAR_NAME_DELIMITER); } - public static int getCount(){ + public int getCount(){ String inputLine = Console.readLine(); try{ return Integer.parseInt(inputLine); diff --git a/src/main/java/racingcar/OutputManager.java b/src/main/java/racingcar/OutputManager.java new file mode 100644 index 0000000..e421560 --- /dev/null +++ b/src/main/java/racingcar/OutputManager.java @@ -0,0 +1,43 @@ +package racingcar; + +import java.util.List; + +public class OutputManager { + + public void printCarNameInputMessage() { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + } + + public void printTurnInputMessage() { + System.out.println("시도할 회수는 몇회인가요?"); + } + + public void printResultMessage() { + System.out.println("실행 결과"); + } + + public void printCarData(List cars) { + for (Car car : cars) { + System.out.println(car.getName() + " : " + getDash(car.getPosition())); + } + System.out.println(); + } + + private String getDash(int position) { + StringBuilder dash = new StringBuilder(); + for (int i = 0; i < position; i++) { + dash.append("-"); + } + return dash.toString(); + } + + public void printWinner(List winnerCars) { + System.out.print("최종 우승자 : "); + for(Car winner : winnerCars){ + System.out.print(winner.getName()); + if(winner != winnerCars.get(winnerCars.size()-1)) + System.out.print(", "); + } + System.out.println(); + } +} From 2b8d0174016d24cab7f02bcbee4bc43394056bc9 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Fri, 17 Mar 2023 13:58:20 +0900 Subject: [PATCH 22/28] =?UTF-8?q?fix(ApplicationTest)=20:=20application=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EB=B3=80=EA=B2=BD=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20test=20=EC=BD=94=EB=93=9C=20=EC=9D=BC?= =?UTF-8?q?=EB=B6=80=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/ApplicationTest.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 5fa496e..c5f32e9 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -35,19 +35,6 @@ class ApplicationTest extends NsTest { ); } - @Test - void 중복된_이름에_대한_예외처리() { - String[] carnames = {"pobi", "javaji", "pobi"}; - int maxTurnCount = 10; - try { - new Application(carnames, maxTurnCount); - } catch (Exception e) { - assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class); - return; - } - assertThat(false).isEqualTo(true); - } - @Override public void runMain() { Application.main(new String[] {}); From 8b43b2331ff984539b937096d91d3a18f281474b Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Fri, 17 Mar 2023 14:01:22 +0900 Subject: [PATCH 23/28] =?UTF-8?q?refactor(Application->RacingGame)=20:=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20Start=20=ED=95=A8=EC=88=98=ED=95=98=EB=82=98?= =?UTF-8?q?=EB=A1=9C=20=EC=8B=9C=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 실질적인 생성자 수정 및 생성자 수정에 따른 로직 변경도 포함되어있습니다. --- .../{Application.java => RacingGame.java} | 49 +++++++++++++------ ...plicationTest.java => RacingGameTest.java} | 0 2 files changed, 34 insertions(+), 15 deletions(-) rename src/main/java/racingcar/{Application.java => RacingGame.java} (59%) rename src/test/java/racingcar/{ApplicationTest.java => RacingGameTest.java} (100%) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/RacingGame.java similarity index 59% rename from src/main/java/racingcar/Application.java rename to src/main/java/racingcar/RacingGame.java index 4519616..b45211a 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/RacingGame.java @@ -9,33 +9,52 @@ public class Application { private static final String CAR_NAME_DELIMITER = ","; - private final List cars; - private final int maxTurnCount; + private InputManager inputManager; + private OutputManager outputManager; + private List cars; + private int maxTurnCount; - public Application(String[] carNames, int maxTurnCount) { + public Application(InputManager inputManager, OutputManager outputManager) { + this.inputManager = inputManager; + this.outputManager = outputManager; + } + + public void start() { + initGame(); + race(); + reward(); + } + + private void initGame() { + outputManager.printCarNameInputMessage(); + String[] carNames = inputManager.getCarNames(); checkDuplicateName(carNames); - checkTurnValid(maxTurnCount); + + outputManager.printTurnInputMessage(); + int turn = inputManager.getCount(); + checkTurnValid(turn); cars = new ArrayList<>(); - this.maxTurnCount = maxTurnCount; + this.maxTurnCount = turn; for (String carName : carNames) { cars.add(new Car(carName)); } + } - public void start() { - PrintManager.printResultMessage(); + private void race() { + outputManager.printResultMessage(); for (int i = 0; i < maxTurnCount; i++) { for (Car car : cars) { car.randomlyGoForward(); } - PrintManager.printCarData(cars); + outputManager.printCarData(cars); } } - public void reward(){ + private void reward() { List winnerCars = getWinnerCars(); - PrintManager.printWinner(winnerCars); + outputManager.printWinner(winnerCars); } private void checkDuplicateName(String[] carNamesArray) { @@ -51,7 +70,7 @@ private void checkTurnValid(int turn) { } } - private List getWinnerCars(){ + private List getWinnerCars() { List winners = new ArrayList<>(); int maxPosition = 0; for (Car car : cars) { @@ -66,11 +85,11 @@ private List getWinnerCars(){ } public static void main(String[] args) { - String[] cars = InputManager.getCarNames(); - int gameCount = InputManager.getCount(); - Application game = new Application(cars, gameCount); + InputManager inputManager = new InputManager(); + OutputManager outputManager = new OutputManager(); + + Application game = new Application(inputManager, outputManager); game.start(); - game.reward(); } } diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/RacingGameTest.java similarity index 100% rename from src/test/java/racingcar/ApplicationTest.java rename to src/test/java/racingcar/RacingGameTest.java From ebac38080ebaeb8e3085da5a9054f6b0cf65041e Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Fri, 17 Mar 2023 14:23:08 +0900 Subject: [PATCH 24/28] =?UTF-8?q?feat(OutputManager)=20:=20=EC=98=88?= =?UTF-8?q?=EC=81=98=EA=B2=8C=20=EC=B6=9C=EB=A0=A5=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=EA=B8=80=EC=9E=90=20=EA=B8=B8=EC=9D=B4=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/OutputManager.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/OutputManager.java b/src/main/java/racingcar/OutputManager.java index e421560..45459a2 100644 --- a/src/main/java/racingcar/OutputManager.java +++ b/src/main/java/racingcar/OutputManager.java @@ -4,6 +4,12 @@ public class OutputManager { + int maxCarNameLen = 10; + + public void setMaxCarNameLen(int len){ + this.maxCarNameLen = maxCarNameLen; + } + public void printCarNameInputMessage() { System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); } @@ -18,7 +24,11 @@ public void printResultMessage() { public void printCarData(List cars) { for (Car car : cars) { - System.out.println(car.getName() + " : " + getDash(car.getPosition())); + String carname = car.getName(); + for(int i =0; i Date: Fri, 17 Mar 2023 14:23:50 +0900 Subject: [PATCH 25/28] =?UTF-8?q?feat(RacingGame)=20:=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20=EA=B8=B8=EC=9D=B4=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20trim=20=ED=86=B5=ED=95=B4=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=A2=8C=EC=9A=B0=20=EC=97=AC=EB=B0=B1=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/RacingGame.java | 28 ++++++++++++--------- src/test/java/racingcar/RacingGameTest.java | 4 +-- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index b45211a..29155c4 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -1,12 +1,14 @@ package racingcar; +import static java.lang.Integer.*; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; -public class Application { +public class RacingGame { private static final String CAR_NAME_DELIMITER = ","; private InputManager inputManager; @@ -14,7 +16,14 @@ public class Application { private List cars; private int maxTurnCount; - public Application(InputManager inputManager, OutputManager outputManager) { + public static void main(String[] args) { + InputManager inputManager = new InputManager(); + OutputManager outputManager = new OutputManager(); + RacingGame game = new RacingGame(inputManager, outputManager); + game.start(); + } + + public RacingGame(InputManager inputManager, OutputManager outputManager) { this.inputManager = inputManager; this.outputManager = outputManager; } @@ -34,12 +43,16 @@ private void initGame() { int turn = inputManager.getCount(); checkTurnValid(turn); + + int maxCarNameLen = -1; cars = new ArrayList<>(); this.maxTurnCount = turn; for (String carName : carNames) { - cars.add(new Car(carName)); + cars.add(new Car(carName.trim())); + maxCarNameLen = max(maxCarNameLen, carName.length()); } + outputManager.setMaxCarNameLen(maxCarNameLen); } private void race() { @@ -83,13 +96,4 @@ private List getWinnerCars() { } return winners; } - - public static void main(String[] args) { - InputManager inputManager = new InputManager(); - OutputManager outputManager = new OutputManager(); - - Application game = new Application(inputManager, outputManager); - - game.start(); - } } diff --git a/src/test/java/racingcar/RacingGameTest.java b/src/test/java/racingcar/RacingGameTest.java index c5f32e9..9390861 100644 --- a/src/test/java/racingcar/RacingGameTest.java +++ b/src/test/java/racingcar/RacingGameTest.java @@ -8,7 +8,7 @@ import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest; import static org.assertj.core.api.Assertions.*; -class ApplicationTest extends NsTest { +class RacingGameTest extends NsTest { private static final int MOVING_FORWARD = 4; private static final int STOP = 3; @@ -37,6 +37,6 @@ class ApplicationTest extends NsTest { @Override public void runMain() { - Application.main(new String[] {}); + RacingGame.main(new String[] {}); } } From ea35570f0a38805ab106bdc44fdb15f24ade9df8 Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Fri, 17 Mar 2023 14:31:50 +0900 Subject: [PATCH 26/28] =?UTF-8?q?refactor(OutputManager)=20:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=ED=8F=AD=EC=9C=BC=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EB=A9=B4?= =?UTF-8?q?=EC=84=9C=20stringbuilder=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stringbuilder가String에 비해서 더하기 할때 더 유리함 + getDash와 같이 다른 함수로 분리 --- src/main/java/racingcar/OutputManager.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/OutputManager.java b/src/main/java/racingcar/OutputManager.java index 45459a2..8a74184 100644 --- a/src/main/java/racingcar/OutputManager.java +++ b/src/main/java/racingcar/OutputManager.java @@ -7,7 +7,7 @@ public class OutputManager { int maxCarNameLen = 10; public void setMaxCarNameLen(int len){ - this.maxCarNameLen = maxCarNameLen; + this.maxCarNameLen = len; } public void printCarNameInputMessage() { @@ -24,14 +24,18 @@ public void printResultMessage() { public void printCarData(List cars) { for (Car car : cars) { - String carname = car.getName(); - for(int i =0; i Date: Sat, 18 Mar 2023 12:13:23 +0900 Subject: [PATCH 27/28] =?UTF-8?q?fix=20:=20=EC=9D=B4=EB=A6=84=EC=9D=98=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=20=EA=B8=B8=EC=9D=B4=EA=B0=80=205=EA=B8=80?= =?UTF-8?q?=EC=9E=90=20=EC=9E=84=EC=97=90,=20=EA=B7=B8=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OuputManager의 자동차 이름 입력 가이드에서, 5글자 미만 여부로 입력하는 명령 추가. RacingGame에서 최대 길이를 조사하던 로직삭제 --- src/main/java/racingcar/OutputManager.java | 8 +--- src/main/java/racingcar/PrintManager.java | 43 ---------------------- src/main/java/racingcar/RacingGame.java | 9 ++--- 3 files changed, 6 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/racingcar/PrintManager.java diff --git a/src/main/java/racingcar/OutputManager.java b/src/main/java/racingcar/OutputManager.java index 8a74184..4ca75a8 100644 --- a/src/main/java/racingcar/OutputManager.java +++ b/src/main/java/racingcar/OutputManager.java @@ -4,14 +4,10 @@ public class OutputManager { - int maxCarNameLen = 10; - - public void setMaxCarNameLen(int len){ - this.maxCarNameLen = len; - } + int maxCarNameLen = 5; public void printCarNameInputMessage() { - System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). 최대 5글자"); } public void printTurnInputMessage() { diff --git a/src/main/java/racingcar/PrintManager.java b/src/main/java/racingcar/PrintManager.java deleted file mode 100644 index 1c9d8a3..0000000 --- a/src/main/java/racingcar/PrintManager.java +++ /dev/null @@ -1,43 +0,0 @@ -package racingcar; - -import java.util.List; - -public class PrintManager { - - public static void printCarNameInputMessage() { - System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); - } - - public static void printTurnInputMessage() { - System.out.println("시도할 회수는 몇회인가요?"); - } - - public static void printResultMessage() { - System.out.println("실행 결과"); - } - - public static void printCarData(List cars) { - for (Car car : cars) { - System.out.println(car.getName() + " : " + getDash(car.getPosition())); - } - System.out.println(); - } - - private static String getDash(int position) { - StringBuilder dash = new StringBuilder(); - for (int i = 0; i < position; i++) { - dash.append("-"); - } - return dash.toString(); - } - - public static void printWinner(List winnerCars) { - System.out.print("최종 우승자 : "); - for(Car winner : winnerCars){ - System.out.print(winner.getName()); - if(winner != winnerCars.get(winnerCars.size()-1)) - System.out.print(", "); - } - System.out.println(); - } -} diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 29155c4..5f3701c 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -44,15 +44,14 @@ private void initGame() { checkTurnValid(turn); - int maxCarNameLen = -1; cars = new ArrayList<>(); this.maxTurnCount = turn; for (String carName : carNames) { - cars.add(new Car(carName.trim())); - maxCarNameLen = max(maxCarNameLen, carName.length()); + String trimed = carName.trim(); + if(trimed.length() > 5) + throw new IllegalArgumentException("[Error] 이름은 5글자 이하만 가능합니다."); + cars.add(new Car(trimed)); } - - outputManager.setMaxCarNameLen(maxCarNameLen); } private void race() { From d5094a0429242ed3f842e03d1c9b9ef06b0e13ea Mon Sep 17 00:00:00 2001 From: rohsik2 Date: Sat, 18 Mar 2023 12:48:35 +0900 Subject: [PATCH 28/28] =?UTF-8?q?fix(Car):=200~9=EC=A4=91=204=EC=9D=B4?= =?UTF-8?q?=EC=83=81=EC=9D=98=20=EC=88=AB=EC=9E=90=EB=A1=9C=20=EC=A0=84?= =?UTF-8?q?=EC=A7=84=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index e6af298..856f0b3 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -3,7 +3,7 @@ import camp.nextstep.edu.missionutils.Randoms; public class Car { - private static final int moveRate = 20; + private static final int MOVE_RATE = 4; private final String name; private int position = 0; @@ -12,7 +12,7 @@ public Car(String name) { } public void randomlyGoForward() { - if(Randoms.pickNumberInRange(0, 100) >= moveRate) + if(Randoms.pickNumberInRange(0, 9) >= MOVE_RATE) position++; }