From 0657631305b0ad51c30c7cb155155a205a9932b9 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Thu, 21 Mar 2024 09:01:13 +0900 Subject: [PATCH 01/17] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- settings.gradle | 1 + src/main/java/controller/RacingController.java | 4 ++++ src/main/java/view/InputView.java | 4 ++++ src/main/java/view/OutputView.java | 4 ++++ 4 files changed, 13 insertions(+) create mode 100644 settings.gradle create mode 100644 src/main/java/controller/RacingController.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..b98083a --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'java-racingcar' \ No newline at end of file diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java new file mode 100644 index 0000000..887b403 --- /dev/null +++ b/src/main/java/controller/RacingController.java @@ -0,0 +1,4 @@ +package controller; + +public class RacingController { +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..ae2791f --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,4 @@ +package view; + +public class InputView { +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 0000000..d8f9743 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,4 @@ +package view; + +public class OutputView { +} From 8dba7151f93393a9a4bb67e144916c77ce714546 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 15:16:09 +0900 Subject: [PATCH 02/17] =?UTF-8?q?0~9=20=EB=9E=9C=EB=8D=A4=EA=B0=92=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/NumberGenerator.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/domain/NumberGenerator.java diff --git a/src/main/java/domain/NumberGenerator.java b/src/main/java/domain/NumberGenerator.java new file mode 100644 index 0000000..c5ca266 --- /dev/null +++ b/src/main/java/domain/NumberGenerator.java @@ -0,0 +1,8 @@ +package domain; + +public class NumberGenerator { + public int generate() { + int num = (int) (Math.random() * 10); + return num; + } +} From e09800158b20a1abd88e8847508e7379317e5ca3 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 15:49:33 +0900 Subject: [PATCH 03/17] =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=B6=84=EB=A6=AC(?= =?UTF-8?q?=EC=BD=A4=EB=A7=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/StringParser.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/domain/StringParser.java diff --git a/src/main/java/domain/StringParser.java b/src/main/java/domain/StringParser.java new file mode 100644 index 0000000..52b1b16 --- /dev/null +++ b/src/main/java/domain/StringParser.java @@ -0,0 +1,10 @@ +package domain; + +import java.util.List; + +public class StringParser { + public List SplitByComma(String input){ + List carNameList = List.of(input.split(",")); + return carNameList; + } +} From 1c91d9f31a3f1a9d92a9d8cc47a415f3e66161ad Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 16:11:10 +0900 Subject: [PATCH 04/17] =?UTF-8?q?=EC=BD=A4=EB=A7=88=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/RacingTest.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/RacingTest.java diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java new file mode 100644 index 0000000..0ace235 --- /dev/null +++ b/src/test/java/RacingTest.java @@ -0,0 +1,24 @@ +import domain.StringParser; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +public class RacingTest { + @DisplayName("콤마 분리 테스트") + @Test + void splitTest(){ + //StringParser stringParser = new StringParser(); + String testString = "orange,lemon,apple"; + + List result = StringParser.SplitByComma(testString); + for (String item : result) { + System.out.println(item); + } + + assertThat(result).containsExactly("orange", "lemon", "apple"); + } +} From f675ca65f5dd4e82f50199070fb487b932859534 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 16:17:30 +0900 Subject: [PATCH 05/17] =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/{RacingTest.java => StringParserTest.java} | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) rename src/test/java/{RacingTest.java => StringParserTest.java} (79%) diff --git a/src/test/java/RacingTest.java b/src/test/java/StringParserTest.java similarity index 79% rename from src/test/java/RacingTest.java rename to src/test/java/StringParserTest.java index 0ace235..1be3b50 100644 --- a/src/test/java/RacingTest.java +++ b/src/test/java/StringParserTest.java @@ -1,16 +1,15 @@ import domain.StringParser; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; + import static org.assertj.core.api.Assertions.assertThat; import java.util.List; -public class RacingTest { +public class StringParserTest { @DisplayName("콤마 분리 테스트") @Test - void splitTest(){ + void splitTest() { //StringParser stringParser = new StringParser(); String testString = "orange,lemon,apple"; @@ -18,7 +17,6 @@ void splitTest(){ for (String item : result) { System.out.println(item); } - assertThat(result).containsExactly("orange", "lemon", "apple"); } } From a368330a282e6740e18d2c8fb96232f9277a62ba Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 16:33:01 +0900 Subject: [PATCH 06/17] =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EA=B8=B8=EC=9D=B4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/StringParserTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/test/java/StringParserTest.java b/src/test/java/StringParserTest.java index 1be3b50..f2d8072 100644 --- a/src/test/java/StringParserTest.java +++ b/src/test/java/StringParserTest.java @@ -2,8 +2,11 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.Arrays; import java.util.List; public class StringParserTest { @@ -19,4 +22,19 @@ void splitTest() { } assertThat(result).containsExactly("orange", "lemon", "apple"); } + + @DisplayName("차 이름 길이 테스트") + @Test + void checkCarNameLength(){ + List carList = Arrays.asList("Tico", "Kia", "Matiz", "Ren"); + //List carList = Arrays.asList("Ticooo", "Kiaaaa", "Matiz", "Ren"); + + //테스트 성공(5자 초과하는 이름이 없을 때), 테스트 실패(5자 초과하는 이름 존재 시) + carList.forEach(carName -> + assertTrue(carName.length() < 6, carName + "의 길이가 6자 이상.") + ); + + //추후 리스트를 받아와서 그걸로 테스트하게 변경 + } + } From 0ce070e45d0544ca878d61d2fc130b5273913758 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 20:21:52 +0900 Subject: [PATCH 07/17] =?UTF-8?q?inputview=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/view/InputView.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index ae2791f..9d315f4 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,4 +1,29 @@ package view; +import domain.StringParser; + +import java.util.List; +import java.util.Scanner; + public class InputView { + private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."; + private static final String REQEUST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?"; + + private Scanner scanner = new Scanner(System.in); + + public List readCarName() { + System.out.println(REQUEST_CAR_NAME); + String name = scanner.nextLine(); + + List carList = StringParser.SplitByComma(name); + + return carList; + } + + public int readCount(){ + System.out.println(REQEUST_ATTEMPT_NUMBER); + int count = scanner.nextInt(); + return count; + } + } From 8e20d30b3da4d4152a3ea9e3248412758f2f30b9 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 21:02:49 +0900 Subject: [PATCH 08/17] =?UTF-8?q?inputview=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/view/InputView.java | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 9d315f4..f91d9dc 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -8,22 +8,36 @@ public class InputView { private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."; private static final String REQEUST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?"; - + private static final String CAR_NAME_LENGTH_ERROR = "차 이름은 5자 이내여야 합니다."; + private static final String CAR_NAME_BLANK_ERROR = "차 이름은 공백일 수 없습니다."; private Scanner scanner = new Scanner(System.in); public List readCarName() { System.out.println(REQUEST_CAR_NAME); - String name = scanner.nextLine(); - List carList = StringParser.SplitByComma(name); + String name = scanner.nextLine(); + List carNames = StringParser.SplitByComma(name); + validateCarName(carNames); - return carList; + return carNames; } - public int readCount(){ + public int readCount() { System.out.println(REQEUST_ATTEMPT_NUMBER); int count = scanner.nextInt(); + return count; } + private void validateCarName(List carNames) { + for (String carName : carNames) { + if (carName.length() > 5) { + throw new IllegalArgumentException(carName + CAR_NAME_LENGTH_ERROR); + } + if (carName.length() < 1) { + throw new IllegalArgumentException(carName + CAR_NAME_BLANK_ERROR); + } + } + } + } From 9227177694011f53fff3c1b2e75ad667bc8bef9b Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 22:38:33 +0900 Subject: [PATCH 09/17] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=8B=B1=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=B6=9C=EB=A0=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/RacingTest.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/RacingTest.java diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java new file mode 100644 index 0000000..65e0e6c --- /dev/null +++ b/src/test/java/RacingTest.java @@ -0,0 +1,30 @@ +import domain.Car; +import domain.Cars; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import view.OutputView; + +import java.util.Arrays; +import java.util.List; + +public class RacingTest { + + @DisplayName("레이싱 진행 테스트") // 차 이름과 현재 포지션이 제대로 출력 되는지 확인 + @Test + public void racingTest() { + List carNameList = Arrays.asList("Tico", "Kia", "Matiz", "Ren"); + Cars cars = new Cars(carNameList); + + List carList = cars.getCars(); + int count = 1; + + for(Car car : carList){ + car.setPosition(count); + count++; + } + + OutputView outputView = new OutputView(); + + outputView.printStatus(carList); + } +} From bd6bc3d8d6284d5cba21d81a82c934ab7f8fc964 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:33:24 +0900 Subject: [PATCH 10/17] =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=ED=98=84(static=20=EC=82=AC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/StringParser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/domain/StringParser.java b/src/main/java/domain/StringParser.java index 52b1b16..16af5b1 100644 --- a/src/main/java/domain/StringParser.java +++ b/src/main/java/domain/StringParser.java @@ -3,8 +3,8 @@ import java.util.List; public class StringParser { - public List SplitByComma(String input){ - List carNameList = List.of(input.split(",")); - return carNameList; + public static List SplitByComma(String input) { + List carNames = List.of(input.split(",")); + return carNames; } } From 3329358704e55cd1d7e7ee7c1df13bd102f69ac7 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:34:10 +0900 Subject: [PATCH 11/17] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=8B=B1=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EA=B5=AC=ED=98=84(=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=82=AC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingMain.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 4394287..14860ec 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -1,7 +1,11 @@ +import controller.RacingController; + public class RacingMain { public static void main(String[] args) { // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 System.out.println("Hello, World!"); + RacingController racingController = new RacingController(); + racingController.startRacing(); } } From 588c60971bda070e106c45731ffd95b40f7d5188 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:34:20 +0900 Subject: [PATCH 12/17] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=8B=B1=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/RacingController.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index 887b403..7ca8acc 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -1,4 +1,38 @@ package controller; +import domain.Cars; +import domain.NumberGenerator; +import view.InputView; +import view.OutputView; + +import java.util.List; + public class RacingController { + //NumberGenerator numberGenerator = new NumberGenerator(); + InputView inputView = new InputView(); + OutputView outputView = new OutputView(); + + + public void startRacing(){ + Cars cars; + List winners; + int count; + + cars = new Cars(inputView.readCarName()); + count = inputView.readCount(); + + for(int i=0;i Date: Sun, 24 Mar 2024 23:34:32 +0900 Subject: [PATCH 13/17] =?UTF-8?q?input,=20output=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/view/InputView.java | 15 +++++++++++++- src/main/java/view/OutputView.java | 32 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index f91d9dc..88b776f 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -2,6 +2,7 @@ import domain.StringParser; +import java.util.InputMismatchException; import java.util.List; import java.util.Scanner; @@ -10,6 +11,8 @@ public class InputView { private static final String REQEUST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?"; private static final String CAR_NAME_LENGTH_ERROR = "차 이름은 5자 이내여야 합니다."; private static final String CAR_NAME_BLANK_ERROR = "차 이름은 공백일 수 없습니다."; + + private static final String NOT_VALUABLE_COUNT = "양의 정수만 입력 할 수 있습니다."; private Scanner scanner = new Scanner(System.in); public List readCarName() { @@ -24,7 +27,17 @@ public List readCarName() { public int readCount() { System.out.println(REQEUST_ATTEMPT_NUMBER); - int count = scanner.nextInt(); + int count = 0; + + try { + count = scanner.nextInt(); + if (count < 0) { + throw new IllegalArgumentException(NOT_VALUABLE_COUNT); + } + } + catch (InputMismatchException e){ + System.out.println(NOT_VALUABLE_COUNT); + } return count; } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index d8f9743..fd3ac48 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,4 +1,36 @@ package view; +import domain.Car; + +import java.util.List; + public class OutputView { + + private static final String PRINT_WINNER_TEXT = "%s가 최종 우승했습니다."; + + public void printResult(){ + System.out.println("실행 결과"); + } + + public void printStatus(List cars) { + for (Car car : cars) { + int currentPosition = car.getPosition(); + String carName = car.getCarName(); + System.out.printf(carName + ":" +' '); + printPosition(currentPosition); + } + } + + private void printPosition(int count){ + for(int i=0;i winners){ + String winnerText = String.join(", ", winners); + System.out.printf(PRINT_WINNER_TEXT,winnerText); + } + } From fda40e9a3e7c5e118363a94f0cec840fcc4476d2 Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:34:45 +0900 Subject: [PATCH 14/17] =?UTF-8?q?=EB=8B=A8=EC=9D=BC=20=EC=B0=A8=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=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/domain/Car.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/domain/Car.java diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 0000000..5e2968e --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,27 @@ +package domain; + +public class Car { + private static final int MOVE_POINT = 4; + private String carName; + private int position; + public Car(String carName) { + this.carName = carName; + position = 0; + } + + public void move(int value){ + if(value >= MOVE_POINT){ + position++; + } + } + + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } + public String getCarName() { + return carName; + } +} From e18915d6d98e0dc9a3f07ef2df8232ddd5704c1c Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:35:05 +0900 Subject: [PATCH 15/17] =?UTF-8?q?=EC=B0=A8=20=EC=A7=91=ED=95=A9=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Cars.java | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/java/domain/Cars.java diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java new file mode 100644 index 0000000..cf46c21 --- /dev/null +++ b/src/main/java/domain/Cars.java @@ -0,0 +1,57 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class Cars { + private List cars; + private NumberGenerator numberGenerator = new NumberGenerator(); + + public Cars(List carNameList) { + cars = makeCarObject(carNameList); + } + public List makeCarObject(List carNames){ + List cars = new ArrayList<>(); + for(String name : carNames){ + cars.add(new Car(name)); + } + return cars; + } + + public void moveAllCars(){ + for(Car car : cars){ + int movePoint = numberGenerator.generate(); + car.move(movePoint); + } + } + public int findMaxPosition(){ + int maxPosition = 0; + for(Car car : cars){ + int carPosition = car.getPosition(); + + if (carPosition > maxPosition){ + maxPosition = carPosition; + } + } + + return maxPosition; + } + + + + public List findWinner(int maxPosition){ + List winners = new ArrayList<>(); + for(Car car : cars){ + int carPosition = car.getPosition(); + + if(carPosition == maxPosition){ + winners.add(car.getCarName()); + } + } + return winners; + } + + public List getCars() { + return cars; + } +} From 6cb21a818aa229e78aa3f94fc48a714bfce61d0f Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Sun, 24 Mar 2024 23:36:49 +0900 Subject: [PATCH 16/17] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=BB=A8=EB=B2=A4?= =?UTF-8?q?=EC=85=98=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20(=EC=9D=B8?= =?UTF-8?q?=ED=85=94=EB=A6=AC=EC=A0=9C=EC=9D=B4=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=20=EC=82=AC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingMain.java | 2 +- .../java/controller/RacingController.java | 6 ++--- src/main/java/domain/Car.java | 7 ++++-- src/main/java/domain/Cars.java | 23 ++++++++++--------- src/main/java/view/InputView.java | 3 +-- src/main/java/view/OutputView.java | 12 +++++----- src/test/java/RacingTest.java | 2 +- src/test/java/StringParserTest.java | 2 +- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 14860ec..0da4f48 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -4,7 +4,7 @@ public class RacingMain { public static void main(String[] args) { // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 - System.out.println("Hello, World!"); + //System.out.println("Hello, World!"); RacingController racingController = new RacingController(); racingController.startRacing(); } diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index 7ca8acc..faf55bf 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -13,7 +13,7 @@ public class RacingController { OutputView outputView = new OutputView(); - public void startRacing(){ + public void startRacing() { Cars cars; List winners; int count; @@ -21,7 +21,7 @@ public void startRacing(){ cars = new Cars(inputView.readCarName()); count = inputView.readCount(); - for(int i=0;i= MOVE_POINT){ + public void move(int value) { + if (value >= MOVE_POINT) { position++; } } @@ -18,9 +19,11 @@ public void move(int value){ public int getPosition() { return position; } + public void setPosition(int position) { this.position = position; } + public String getCarName() { return carName; } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index cf46c21..82b5211 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -10,26 +10,28 @@ public class Cars { public Cars(List carNameList) { cars = makeCarObject(carNameList); } - public List makeCarObject(List carNames){ + + public List makeCarObject(List carNames) { List cars = new ArrayList<>(); - for(String name : carNames){ + for (String name : carNames) { cars.add(new Car(name)); } return cars; } - public void moveAllCars(){ - for(Car car : cars){ + public void moveAllCars() { + for (Car car : cars) { int movePoint = numberGenerator.generate(); car.move(movePoint); } } - public int findMaxPosition(){ + + public int findMaxPosition() { int maxPosition = 0; - for(Car car : cars){ + for (Car car : cars) { int carPosition = car.getPosition(); - if (carPosition > maxPosition){ + if (carPosition > maxPosition) { maxPosition = carPosition; } } @@ -38,13 +40,12 @@ public int findMaxPosition(){ } - - public List findWinner(int maxPosition){ + public List findWinner(int maxPosition) { List winners = new ArrayList<>(); - for(Car car : cars){ + for (Car car : cars) { int carPosition = car.getPosition(); - if(carPosition == maxPosition){ + if (carPosition == maxPosition) { winners.add(car.getCarName()); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 88b776f..cc5049e 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -34,8 +34,7 @@ public int readCount() { if (count < 0) { throw new IllegalArgumentException(NOT_VALUABLE_COUNT); } - } - catch (InputMismatchException e){ + } catch (InputMismatchException e) { System.out.println(NOT_VALUABLE_COUNT); } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index fd3ac48..b865e6b 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -8,7 +8,7 @@ public class OutputView { private static final String PRINT_WINNER_TEXT = "%s가 최종 우승했습니다."; - public void printResult(){ + public void printResult() { System.out.println("실행 결과"); } @@ -16,21 +16,21 @@ public void printStatus(List cars) { for (Car car : cars) { int currentPosition = car.getPosition(); String carName = car.getCarName(); - System.out.printf(carName + ":" +' '); + System.out.printf(carName + ":" + ' '); printPosition(currentPosition); } } - private void printPosition(int count){ - for(int i=0;i winners){ + public void printWinner(List winners) { String winnerText = String.join(", ", winners); - System.out.printf(PRINT_WINNER_TEXT,winnerText); + System.out.printf(PRINT_WINNER_TEXT, winnerText); } } diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java index 65e0e6c..c5b3c95 100644 --- a/src/test/java/RacingTest.java +++ b/src/test/java/RacingTest.java @@ -18,7 +18,7 @@ public void racingTest() { List carList = cars.getCars(); int count = 1; - for(Car car : carList){ + for (Car car : carList) { car.setPosition(count); count++; } diff --git a/src/test/java/StringParserTest.java b/src/test/java/StringParserTest.java index f2d8072..6ecff0e 100644 --- a/src/test/java/StringParserTest.java +++ b/src/test/java/StringParserTest.java @@ -25,7 +25,7 @@ void splitTest() { @DisplayName("차 이름 길이 테스트") @Test - void checkCarNameLength(){ + void checkCarNameLength() { List carList = Arrays.asList("Tico", "Kia", "Matiz", "Ren"); //List carList = Arrays.asList("Ticooo", "Kiaaaa", "Matiz", "Ren"); From 459111ae33d7239e0c0a7ad4c9a9e1e7b913c26b Mon Sep 17 00:00:00 2001 From: SongHyeonJun Date: Thu, 28 Mar 2024 18:55:09 +0900 Subject: [PATCH 17/17] =?UTF-8?q?moveCar=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/RacingTest.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java index c5b3c95..ed9b48e 100644 --- a/src/test/java/RacingTest.java +++ b/src/test/java/RacingTest.java @@ -1,5 +1,6 @@ import domain.Car; import domain.Cars; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import view.OutputView; @@ -7,6 +8,9 @@ import java.util.Arrays; import java.util.List; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + public class RacingTest { @DisplayName("레이싱 진행 테스트") // 차 이름과 현재 포지션이 제대로 출력 되는지 확인 @@ -24,7 +28,22 @@ public void racingTest() { } OutputView outputView = new OutputView(); - outputView.printStatus(carList); } + @Test + @DisplayName("차 이동 성공 테스트") + void moveCarTestSuccess(){ + Car car = new Car("superCar"); + car.setPosition(2); + car.move(6); + assertThat(car.getPosition()).isEqualTo(3); + } + @Test + @DisplayName("차 이동 실패 테스트") + void moveCarTestFalied(){ + Car car = new Car("superCar"); + car.setPosition(2); + car.move(1); + assertThat(car.getPosition()).isEqualTo(3); //차가 이동하지 못해 에러 발생시키기 + } }