From 3f4fe89433945dba5be04a50ab4f32709901a499 Mon Sep 17 00:00:00 2001 From: thornappl2 Date: Mon, 27 May 2024 17:09:27 +0900 Subject: [PATCH 01/19] =?UTF-8?q?Docs:=20"README.md=20=EC=88=98=EC=A0=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기능 목록 추가 --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 491aece1..4d9377bf 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# java-racingcar-precourse \ No newline at end of file +# java-racingcar-precourse + +# 기능 목록 정리 + +1. n대의 자동차 이름 입력 기능 +2. 이름 글자 제한 +3. 전진 기능 +4. 시행 횟수 입력 기능 +5. 우승자 표시 기능 +6. 예외 처리 기능 \ No newline at end of file From dcf813da8ecad2cf2dabfbc251ef485571a04861 Mon Sep 17 00:00:00 2001 From: thornappl2 Date: Mon, 27 May 2024 19:05:11 +0900 Subject: [PATCH 02/19] =?UTF-8?q?Feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=A0=84=EC=A7=84=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?-=20=EC=9E=90=EB=8F=99=EC=B0=A8=EA=B0=80=20=EC=A0=84=EC=A7=84?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=EC=9D=B8=20move=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EA=B5=AC=ED=98=84=20-=200=EC=97=90?= =?UTF-8?q?=EC=84=9C=209=EC=82=AC=EC=9D=B4=EC=9D=98=20=EB=9E=9C=EB=8D=A4?= =?UTF-8?q?=20=EA=B0=92=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20randomNum?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Model/Car.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Model/Car.java diff --git a/Model/Car.java b/Model/Car.java new file mode 100644 index 00000000..a1f279e0 --- /dev/null +++ b/Model/Car.java @@ -0,0 +1,23 @@ +package Model; + +public class Car { + private static final int MINIMUM_NUM = 4; + private String name; + private int position = 0; + private int randomNum = (int)(Math.random() * 10); + + public Car(String name){ + this.name = name; + } + + private int move(int position){ + if(randomNum >= MINIMUM_NUM){ + position++; + } + return position; + } + + private int getPosition(){ + return position; + } +} From 9280aa66d43a47d2f00cca0e45988043284d8756 Mon Sep 17 00:00:00 2001 From: thornappl2 Date: Mon, 27 May 2024 19:29:38 +0900 Subject: [PATCH 03/19] =?UTF-8?q?Feat:=20Race=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1=20-=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=A9=B0=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20?= =?UTF-8?q?=ED=8F=AC=ED=95=A8=ED=95=98=EA=B3=A0=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EC=A7=84=ED=96=89=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=ED=95=98=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 --- model/Race.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 model/Race.java diff --git a/model/Race.java b/model/Race.java new file mode 100644 index 00000000..635a7f5d --- /dev/null +++ b/model/Race.java @@ -0,0 +1,21 @@ +package model; + +import java.util.List; + +public class Race { + private List cars; + private int raceCount; + + public Race(List cars, int raceCount) { + this.cars = cars; + this.raceCount = raceCount; + } + + public List getCars(){ + return cars; + } + + public int getRaceCount(){ + return raceCount; + } +} From c8e7f875200c6c541dee41a1614ee07c17092903 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:14:28 +0900 Subject: [PATCH 04/19] =?UTF-8?q?feat:=20InputView=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?-=20=EC=82=AC=EC=9A=A9=EC=9E=90=EC=97=90=EA=B2=8C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EB=8A=94=20InputView=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/view/InputView.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/racingcar/view/InputView.java diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 00000000..2db5a472 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,17 @@ +package racingcar.view; + +import java.util.Scanner; + +public class InputView { + private static final Scanner scanner = new Scanner(System.in); + + public static String[] getCarNames(){ + System.out.println("경주할 자동차 이름을 입력하세요. (이름은 쉼표(,) 기준으로 구분"); + return scanner.nextLine().split(","); + } + + public static int getNumberOfAttempts(){ + System.out.println("시도할 회수는 몇회인가요?"); + return scanner.nextInt(); + } +} From aa693ad3a40fa14543ef9cf049d4e3f5dc706793 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:18:21 +0900 Subject: [PATCH 05/19] =?UTF-8?q?refactor:=20Car,=20Race=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20-?= =?UTF-8?q?=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/racingcar/model}/Car.java | 2 +- src/main/java/racingcar/model/Race.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) rename {Model => src/main/java/racingcar/model}/Car.java (94%) create mode 100644 src/main/java/racingcar/model/Race.java diff --git a/Model/Car.java b/src/main/java/racingcar/model/Car.java similarity index 94% rename from Model/Car.java rename to src/main/java/racingcar/model/Car.java index a1f279e0..ffb57e56 100644 --- a/Model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,4 +1,4 @@ -package Model; +package racingcar.model; public class Car { private static final int MINIMUM_NUM = 4; diff --git a/src/main/java/racingcar/model/Race.java b/src/main/java/racingcar/model/Race.java new file mode 100644 index 00000000..b23af431 --- /dev/null +++ b/src/main/java/racingcar/model/Race.java @@ -0,0 +1,21 @@ +package racingcar.model; + +import java.util.List; + +public class Race { + private List cars; + private int raceCount; + + public Race(List cars, int raceCount) { + this.cars = cars; + this.raceCount = raceCount; + } + + public List getCars(){ + return cars; + } + + public int getRaceCount(){ + return raceCount; + } +} From 87daf65ec6af1a71fc4004577c3d23c2b36886a8 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:19:04 +0900 Subject: [PATCH 06/19] =?UTF-8?q?refactor:=20Race=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20-=20?= =?UTF-8?q?=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/Race.java | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 model/Race.java diff --git a/model/Race.java b/model/Race.java deleted file mode 100644 index 635a7f5d..00000000 --- a/model/Race.java +++ /dev/null @@ -1,21 +0,0 @@ -package model; - -import java.util.List; - -public class Race { - private List cars; - private int raceCount; - - public Race(List cars, int raceCount) { - this.cars = cars; - this.raceCount = raceCount; - } - - public List getCars(){ - return cars; - } - - public int getRaceCount(){ - return raceCount; - } -} From 56693176b65bc914654745857b147427c5f366f4 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:44:00 +0900 Subject: [PATCH 07/19] =?UTF-8?q?feat:=20OutputView=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20-=20=EC=82=AC=EC=9A=A9=EC=9E=90=EC=97=90=EA=B2=8C=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=ED=95=B4?= =?UTF-8?q?=EC=A3=BC=EB=8A=94=20OutputView=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1=20-=20printRace,=20printWinners=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=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/view/OutputView.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/racingcar/view/OutputView.java diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 00000000..d1a93ec3 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,17 @@ +package racingcar.view; + +import racingcar.model.Car; + +import java.util.List; + +public class OutputView { + public static void printRace(List cars) { + for (Car car : cars) { + System.out.println(car.getName() + " : " + "-".repeat(car.getPosition())); + } + } + + public static void printWinners(List winners) { + System.out.println("최종 우승자 : " + String.join(", ", winners)); + } +} From cde41b9c9d4cd4b70184320b22334be40a87d9ba Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:48:33 +0900 Subject: [PATCH 08/19] =?UTF-8?q?feat:=20RaceController=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20-=20=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=EC=9D=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=ED=95=98=EA=B3=A0,=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EB=B7=B0?= =?UTF-8?q?=EC=97=90=20=EC=A0=84=EB=8B=AC=ED=95=98=EB=8A=94=20RaceControll?= =?UTF-8?q?er=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9E=91=EC=84=B1=20-=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AF=B8=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/RaceController.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/racingcar/controller/RaceController.java diff --git a/src/main/java/racingcar/controller/RaceController.java b/src/main/java/racingcar/controller/RaceController.java new file mode 100644 index 00000000..1763403d --- /dev/null +++ b/src/main/java/racingcar/controller/RaceController.java @@ -0,0 +1,12 @@ +package racingcar.controller; + +import racingcar.model.Car; +import racingcar.model.Race; +import racingcar.view.InputView; +import racingcar.view.OutputView; + +public class RaceController { + public void run(){ + //기능 구현 예정 + } +} From e1515c7fe4d04ec7ae4f0924748df6d005cf2665 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:49:15 +0900 Subject: [PATCH 09/19] =?UTF-8?q?feat:=20Application=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20-=20main=20=EB=AC=B8=EC=9D=B4=20=EC=9E=88=EB=8A=94=20Applica?= =?UTF-8?q?tion=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/racingcar/Application.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java new file mode 100644 index 00000000..35a27186 --- /dev/null +++ b/src/main/java/racingcar/Application.java @@ -0,0 +1,10 @@ +package racingcar; + +import racingcar.controller.RaceController; + +public class Application { + public static void main(String[] args) { + RaceController controller = new RaceController(); + controller.run(); + } +} From 242f458ea19cc0567df3f99da7b75290647859ba Mon Sep 17 00:00:00 2001 From: donghyeon Date: Fri, 7 Jun 2024 01:50:03 +0900 Subject: [PATCH 10/19] =?UTF-8?q?feat:=20getName=20=ED=95=A8=EC=88=98=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/model/Car.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index ffb57e56..ddba7982 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -17,7 +17,11 @@ private int move(int position){ return position; } - private int getPosition(){ + public int getPosition(){ return position; } + + public String getName(){ + return name; + } } From 26d09d58ce8bbb05b69314d18bf5e27c914a5519 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 01:51:23 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20Race=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=88=98=EC=A0=95=20-=20getWinners=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80=20-=20race=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20-=20race=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=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/model/Race.java | 27 ++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/model/Race.java b/src/main/java/racingcar/model/Race.java index b23af431..a2053c88 100644 --- a/src/main/java/racingcar/model/Race.java +++ b/src/main/java/racingcar/model/Race.java @@ -1,14 +1,18 @@ package racingcar.model; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class Race { private List cars; private int raceCount; - public Race(List cars, int raceCount) { - this.cars = cars; - this.raceCount = raceCount; + public Race(String[] carNames) { + cars = new ArrayList<>(); + for (String name : carNames) { + cars.add(new Car(name)); + } } public List getCars(){ @@ -18,4 +22,21 @@ public List getCars(){ public int getRaceCount(){ return raceCount; } + + public void race() { + for (Car car : cars) { + car.move(); + } + } + + public List getWinners(){ + int maxPosition = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElse(0); + return cars.stream() + .filter(car -> car.getPosition() == maxPosition) + .map(Car::getName) + .collect(Collectors.toList()); + } } From c91c6b6d2abe6b0132d251a0a519c7b9cfdc571d Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 01:51:55 +0900 Subject: [PATCH 12/19] =?UTF-8?q?feat:=20Car=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20move=20=ED=95=A8=EC=88=98=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 --- src/main/java/racingcar/model/Car.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index ddba7982..3c91d20f 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -10,11 +10,10 @@ public Car(String name){ this.name = name; } - private int move(int position){ + public void move(){ if(randomNum >= MINIMUM_NUM){ position++; } - return position; } public int getPosition(){ From 1bf589ddbbb306735e108daab7d12a531b58cfaa Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 01:52:43 +0900 Subject: [PATCH 13/19] =?UTF-8?q?feat:=20RaceController=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=88=98=EC=A0=95=20-=20run=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20-=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=97=90=EA=B2=8C=20=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EA=B3=BC=EC=A0=95=EA=B3=BC=20=EC=B5=9C?= =?UTF-8?q?=EC=A2=85=20=EC=9A=B0=EC=8A=B9=EC=9E=90=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/controller/RaceController.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/controller/RaceController.java b/src/main/java/racingcar/controller/RaceController.java index 1763403d..5f63c1af 100644 --- a/src/main/java/racingcar/controller/RaceController.java +++ b/src/main/java/racingcar/controller/RaceController.java @@ -5,8 +5,21 @@ import racingcar.view.InputView; import racingcar.view.OutputView; +import java.util.List; + public class RaceController { public void run(){ - //기능 구현 예정 + String[] carNames = InputView.getCarNames(); + int numberOfAttempts = InputView.getNumberOfAttempts(); + + Race race = new Race(carNames); + for (int i = 0; i < numberOfAttempts; i++) { + race.race(); + OutputView.printRace(race.getCars()); + } + + List winners = race.getWinners(); + OutputView.printWinners(winners); + } } From 320e8768f32eb9d8f0d15f7b2b2841322f0ed703 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 20:36:12 +0900 Subject: [PATCH 14/19] =?UTF-8?q?feat:=20Move=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=20canMove=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=20-=20random=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/Car.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 3c91d20f..99ed7c54 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -1,21 +1,27 @@ package racingcar.model; +import java.util.Random; + public class Car { private static final int MINIMUM_NUM = 4; private String name; private int position = 0; - private int randomNum = (int)(Math.random() * 10); public Car(String name){ this.name = name; } public void move(){ - if(randomNum >= MINIMUM_NUM){ + if(canMove()){ position++; } } + private boolean canMove() { + Random random = new Random(); + return random.nextInt(10) >= MINIMUM_NUM; + } + public int getPosition(){ return position; } From 5fefd07cb83bbfa343afb859b3cab10c16a3bfbe Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 21:59:28 +0900 Subject: [PATCH 15/19] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EA=B8=80=EC=9E=90=20=EC=A0=9C=ED=95=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20-=201=EC=9E=90=20=EC=9D=B4=EC=83=81=205?= =?UTF-8?q?=EC=9E=90=20=EC=9D=B4=ED=95=98=EB=A1=9C=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/Car.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 99ed7c54..80f803f7 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -8,6 +8,9 @@ public class Car { private int position = 0; public Car(String name){ + if (name == null || name.isEmpty() || name.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 1자 이상, 5자 이하로 입력하세요."); + } this.name = name; } From 0c026401b8d849c51027fe76208bafb9e3787a80 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 22:22:24 +0900 Subject: [PATCH 16/19] =?UTF-8?q?fix:=20Race=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B3=80=EC=88=98=20=EB=B0=8F?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/Race.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/racingcar/model/Race.java b/src/main/java/racingcar/model/Race.java index a2053c88..326900cb 100644 --- a/src/main/java/racingcar/model/Race.java +++ b/src/main/java/racingcar/model/Race.java @@ -5,8 +5,7 @@ import java.util.stream.Collectors; public class Race { - private List cars; - private int raceCount; + private final List cars; public Race(String[] carNames) { cars = new ArrayList<>(); @@ -19,10 +18,6 @@ public List getCars(){ return cars; } - public int getRaceCount(){ - return raceCount; - } - public void race() { for (Car car : cars) { car.move(); From 575fd5a4c4e08bc51f3fc65c87528bfd9b6c6157 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 22:31:46 +0900 Subject: [PATCH 17/19] =?UTF-8?q?feat:=20Car=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=8B=A8=EC=9C=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80=20-=20Car=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=8C=80=ED=95=9C=20junit=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=ED=95=98=EB=8A=94=20CarTest.java=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 --- src/test/java/racingcar/model/CarTest.java | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/java/racingcar/model/CarTest.java diff --git a/src/test/java/racingcar/model/CarTest.java b/src/test/java/racingcar/model/CarTest.java new file mode 100644 index 00000000..eae96259 --- /dev/null +++ b/src/test/java/racingcar/model/CarTest.java @@ -0,0 +1,39 @@ +package racingcar.model; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +class CarTest { + + @Test + void move() { + Car car = new Car("pobi"); + int initialPosition = car.getPosition(); + car.move(); + assertThat(car.getPosition()).isGreaterThanOrEqualTo(initialPosition); + } + + @Test + void getPosition() { + Car car = new Car("pobi"); + assertThat(car.getPosition()).isEqualTo(0); + car.move(); + assertThat(car.getPosition()).isGreaterThanOrEqualTo(0); + } + + @Test + void getName() { + Car car = new Car("pobi"); + assertThat(car.getName()).isEqualTo("pobi"); + } + + @Test + void createCar() { + Car car = new Car("pobi"); + assertThat(car.getName()).isEqualTo("pobi"); + assertThat(car.getPosition()).isEqualTo(0); + } + +} \ No newline at end of file From 39fdb3369b228dacb18b2a4a60e2f811a757a57e Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 22:32:04 +0900 Subject: [PATCH 18/19] =?UTF-8?q?feat:=20Race=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=8B=A8=EC=9C=84=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80=20-=20Race=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=8C=80=ED=95=9C=20jun?= =?UTF-8?q?it=20=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC?= =?UTF-8?q?=20=EC=A7=84=ED=96=89=ED=95=98=EB=8A=94=20RaceTest.java=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/racingcar/model/RaceTest.java | 44 +++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/test/java/racingcar/model/RaceTest.java diff --git a/src/test/java/racingcar/model/RaceTest.java b/src/test/java/racingcar/model/RaceTest.java new file mode 100644 index 00000000..c52a1e94 --- /dev/null +++ b/src/test/java/racingcar/model/RaceTest.java @@ -0,0 +1,44 @@ +package racingcar.model; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +class RaceTest { + + @Test + void getCars() { + String[] carNames = {"pobi", "woni", "jun"}; + Race race = new Race(carNames); + List cars = race.getCars(); + + assertThat(cars).hasSize(3); + assertThat(cars.get(0).getName()).isEqualTo("pobi"); + assertThat(cars.get(1).getName()).isEqualTo("woni"); + assertThat(cars.get(2).getName()).isEqualTo("jun"); + } + + @Test + void race() { + String[] carNames = {"pobi", "woni", "jun"}; + Race race = new Race(carNames); + race.race(); + + List cars = race.getCars(); + for (Car car : cars) { + assertThat(car.getPosition()).isGreaterThanOrEqualTo(0); + } + } + + @Test + void getWinners() { + String[] carNames = {"pobi", "woni", "jun"}; + Race race = new Race(carNames); + race.race(); + + List winners = race.getWinners(); + assertThat(winners).isNotEmpty(); + } +} \ No newline at end of file From 78b1abc86525cac131ed203982e89fd7b8d83584 Mon Sep 17 00:00:00 2001 From: donghyeon Date: Sun, 9 Jun 2024 22:36:51 +0900 Subject: [PATCH 19/19] =?UTF-8?q?feat:=20=EB=8B=A8=EC=88=9C=20=ED=94=84?= =?UTF-8?q?=EB=A6=B0=ED=8A=B8=EB=AC=B8=20=EC=88=98=EC=A0=95=20-=20?= =?UTF-8?q?=EB=B9=88=EC=B9=B8=20=EB=B0=8F=20=EC=8B=A4=ED=96=89=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20pri?= =?UTF-8?q?ntOutput=20=ED=95=A8=EC=88=98=20=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/controller/RaceController.java | 1 + src/main/java/racingcar/view/OutputView.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/racingcar/controller/RaceController.java b/src/main/java/racingcar/controller/RaceController.java index 5f63c1af..df587bc5 100644 --- a/src/main/java/racingcar/controller/RaceController.java +++ b/src/main/java/racingcar/controller/RaceController.java @@ -13,6 +13,7 @@ public void run(){ int numberOfAttempts = InputView.getNumberOfAttempts(); Race race = new Race(carNames); + OutputView.printOutput(); for (int i = 0; i < numberOfAttempts; i++) { race.race(); OutputView.printRace(race.getCars()); diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index d1a93ec3..e58bae48 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -5,6 +5,10 @@ import java.util.List; public class OutputView { + + public static void printOutput(){ + System.out.println("\n실행 결과"); + } public static void printRace(List cars) { for (Car car : cars) { System.out.println(car.getName() + " : " + "-".repeat(car.getPosition()));