From 62b3d52902fe3c95c753828f2d1fcbaa9e4059ab Mon Sep 17 00:00:00 2001 From: rtaeho Date: Fri, 29 Mar 2024 18:08:47 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingMain.java | 16 ++++++--- src/main/java/domain/Car.java | 27 +++++++++++++++ src/main/java/domain/Cars.java | 15 +++++++++ src/main/java/domain/RacingGame.java | 49 ++++++++++++++++++++++++++++ src/main/java/view/InputView.java | 34 +++++++++++++++++++ src/main/java/view/ResultView.java | 30 +++++++++++++++++ 6 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 src/main/java/domain/Car.java create mode 100644 src/main/java/domain/Cars.java create mode 100644 src/main/java/domain/RacingGame.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/ResultView.java diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 4394287..a2fb595 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -1,7 +1,15 @@ -public class RacingMain { +import view.InputView; +import view.ResultView; +import domain.RacingGame; + +import java.io.IOException; - public static void main(String[] args) { - // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 - System.out.println("Hello, World!"); +public class RacingMain { + public static void main(final String... args) throws IOException { + final var carNames = InputView.getCarNames(); + final var tryCount = InputView.getTryCount(); + final RacingGame racingGame = new RacingGame(carNames, tryCount); + racingGame.race(); + ResultView.printWinners(racingGame.getWinners()); } } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 0000000..e0470fe --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,27 @@ +package domain; + +public class Car { + private static final int STANDARD_NUM = 4; + private final String carName; + private int position; + + public Car(String carName) { + this.carName = carName; + this.position = 0; + } + + public void move(int num) { + if (num >= STANDARD_NUM) { + position++; + } + } + + public int getPosition() { + return position; + } + + + public String getCarName() { + return carName; + } +} diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java new file mode 100644 index 0000000..e384bd6 --- /dev/null +++ b/src/main/java/domain/Cars.java @@ -0,0 +1,15 @@ +package domain; + +import java.util.List; + +public class Cars { + private List cars; + + public Cars(List carNameList) { + this.cars = carNameList; + } + + public List getCars() { + return cars; + } +} \ No newline at end of file diff --git a/src/main/java/domain/RacingGame.java b/src/main/java/domain/RacingGame.java new file mode 100644 index 0000000..bb47eed --- /dev/null +++ b/src/main/java/domain/RacingGame.java @@ -0,0 +1,49 @@ +package domain; + +import view.ResultView; + +import java.util.ArrayList; +import java.util.List; + +public class RacingGame { + private List carNames; + private int tryCount; + + public RacingGame(List carNames, int tryCount) { + this.carNames = carNames; + this.tryCount = tryCount; + } + + public int findMaxPosition() { + int maxPosition = 0; + for (Car car : carNames) { + int carPosition = car.getPosition(); + if (carPosition > maxPosition) { + maxPosition = carPosition; + } + } + return maxPosition; + } + + public List getWinners() { + List winners = new ArrayList<>(); + for (Car car : carNames) { + int carPosition = car.getPosition(); + int maxPosition = findMaxPosition(); + if (carPosition == maxPosition) { + winners.add(car.getCarName()); + } + } + return winners; + } + + public void race() { + for (int i = 0; i < tryCount; i++) { + for (Car car : carNames) { + int randomNum = (int) (Math.random() * 10); + car.move(randomNum); + } + ResultView.printStatus(carNames); + } + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..0b51b2a --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,34 @@ +package view; + +import domain.Car; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class InputView { + private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."; + private static final String REQUEST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?"; + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + public static List getCarNames() throws IOException { + System.out.println(REQUEST_CAR_NAME); + String name = br.readLine(); + String[] carNamesArray = name.split(","); + List cars = new ArrayList<>(); + for (String carName : carNamesArray) { + cars.add(new Car(carName)); + } + return cars; + } + + public static int getTryCount() throws IOException { + System.out.println(REQUEST_ATTEMPT_NUMBER); + return Integer.parseInt(br.readLine()); + } + +} diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java new file mode 100644 index 0000000..7cd7022 --- /dev/null +++ b/src/main/java/view/ResultView.java @@ -0,0 +1,30 @@ +package view; + +import java.util.List; + +import domain.Car; + +public class ResultView { + public static void printStatus(List carsList) { + for (Car car : carsList) { + int currentPosition = car.getPosition(); + String carName = car.getCarName(); + System.out.print(carName + " : "); + printPosition(currentPosition); + } + System.out.println(); + } + + private static void printPosition(int currenPosition) { + for (int i = 0; i < currenPosition; i++) { + System.out.print("-"); + } + System.out.println(); + } + + public static void printWinners(List winners) { + String result = String.join(", ", winners); + System.out.println(result + "가 최종 우승했습니다."); + } + +} From 3ae7e628df4d445cf9b70679679554f49070523c Mon Sep 17 00:00:00 2001 From: rtaeho Date: Sat, 30 Mar 2024 14:59:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=8B=A4=EB=93=AC?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 10 ++++ src/main/java/RacingMain.java | 15 ------ .../java/controller/RacingGameManager.java | 31 ++++++++++++ src/main/java/domain/Cars.java | 49 +++++++++++++++++-- src/main/java/domain/RacingGame.java | 49 ------------------- src/main/java/view/InputView.java | 13 ++--- src/main/java/view/ResultView.java | 6 +-- 7 files changed, 93 insertions(+), 80 deletions(-) create mode 100644 src/main/java/Application.java delete mode 100644 src/main/java/RacingMain.java create mode 100644 src/main/java/controller/RacingGameManager.java delete mode 100644 src/main/java/domain/RacingGame.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 0000000..95595ee --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,10 @@ +import controller.RacingGameManager; + +import java.io.IOException; + +public class Application { + public static void main(String[] args) throws IOException { + RacingGameManager racingGameManager = new RacingGameManager(); + racingGameManager.race(); + } +} \ No newline at end of file diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java deleted file mode 100644 index a2fb595..0000000 --- a/src/main/java/RacingMain.java +++ /dev/null @@ -1,15 +0,0 @@ -import view.InputView; -import view.ResultView; -import domain.RacingGame; - -import java.io.IOException; - -public class RacingMain { - public static void main(final String... args) throws IOException { - final var carNames = InputView.getCarNames(); - final var tryCount = InputView.getTryCount(); - final RacingGame racingGame = new RacingGame(carNames, tryCount); - racingGame.race(); - ResultView.printWinners(racingGame.getWinners()); - } -} diff --git a/src/main/java/controller/RacingGameManager.java b/src/main/java/controller/RacingGameManager.java new file mode 100644 index 0000000..eba0b11 --- /dev/null +++ b/src/main/java/controller/RacingGameManager.java @@ -0,0 +1,31 @@ +package controller; + +import domain.Cars; +import view.InputView; +import view.ResultView; +import java.io.IOException; + + +public class RacingGameManager { + private final InputView inputView = new InputView(); + private final ResultView resultView = new ResultView(); + + public void race() throws IOException { + String names = inputView.getCarNames(); + Cars cars = new Cars(names); + + int tryCount = inputView.getTryCount(); + runGame(tryCount, cars); + + resultView.printWinners(cars.getWinners()); + } + + void runGame(int tryCount, Cars cars) { + for (int i = 0; i < tryCount; i++) { + cars.moveAllCars(); + resultView.printStatus(cars.getCars()); + } + + } + +} diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index e384bd6..2bc36fa 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -1,12 +1,55 @@ package domain; +import java.util.ArrayList; import java.util.List; public class Cars { - private List cars; + private final List cars; - public Cars(List carNameList) { - this.cars = carNameList; + public Cars(String carNames) { + this.cars = addCars(carNames); + } + + public List addCars(String carNames) { + String[] carNamesArray = carNames.split(","); + List cars = new ArrayList<>(); + for (String carName : carNamesArray) { + cars.add(new Car(carName)); + } + return cars; + } + + public void moveAllCars() { + for (Car car : cars) { + car.move(generateRandomNumber()); + } + } + + private int generateRandomNumber() { + return (int) (Math.random() * 10); + } + public int findMaxPosition() { + int maxPosition = 0; + for (Car car : cars) { + int carPosition = car.getPosition(); + if (carPosition > maxPosition) { + maxPosition = carPosition; + } + } + return maxPosition; + } + + + public List getWinners() { + List winners = new ArrayList<>(); + for (Car car : cars) { + int carPosition = car.getPosition(); + int maxPosition = findMaxPosition(); + if (carPosition == maxPosition) { + winners.add(car.getCarName()); + } + } + return winners; } public List getCars() { diff --git a/src/main/java/domain/RacingGame.java b/src/main/java/domain/RacingGame.java deleted file mode 100644 index bb47eed..0000000 --- a/src/main/java/domain/RacingGame.java +++ /dev/null @@ -1,49 +0,0 @@ -package domain; - -import view.ResultView; - -import java.util.ArrayList; -import java.util.List; - -public class RacingGame { - private List carNames; - private int tryCount; - - public RacingGame(List carNames, int tryCount) { - this.carNames = carNames; - this.tryCount = tryCount; - } - - public int findMaxPosition() { - int maxPosition = 0; - for (Car car : carNames) { - int carPosition = car.getPosition(); - if (carPosition > maxPosition) { - maxPosition = carPosition; - } - } - return maxPosition; - } - - public List getWinners() { - List winners = new ArrayList<>(); - for (Car car : carNames) { - int carPosition = car.getPosition(); - int maxPosition = findMaxPosition(); - if (carPosition == maxPosition) { - winners.add(car.getCarName()); - } - } - return winners; - } - - public void race() { - for (int i = 0; i < tryCount; i++) { - for (Car car : carNames) { - int randomNum = (int) (Math.random() * 10); - car.move(randomNum); - } - ResultView.printStatus(carNames); - } - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 0b51b2a..880f8ac 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -6,7 +6,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class InputView { @@ -15,18 +14,12 @@ public class InputView { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - public static List getCarNames() throws IOException { + public String getCarNames() throws IOException { System.out.println(REQUEST_CAR_NAME); - String name = br.readLine(); - String[] carNamesArray = name.split(","); - List cars = new ArrayList<>(); - for (String carName : carNamesArray) { - cars.add(new Car(carName)); - } - return cars; + return br.readLine(); } - public static int getTryCount() throws IOException { + public int getTryCount() throws IOException { System.out.println(REQUEST_ATTEMPT_NUMBER); return Integer.parseInt(br.readLine()); } diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 7cd7022..0309599 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -5,7 +5,7 @@ import domain.Car; public class ResultView { - public static void printStatus(List carsList) { + public void printStatus(List carsList) { for (Car car : carsList) { int currentPosition = car.getPosition(); String carName = car.getCarName(); @@ -15,14 +15,14 @@ public static void printStatus(List carsList) { System.out.println(); } - private static void printPosition(int currenPosition) { + private void printPosition(int currenPosition) { for (int i = 0; i < currenPosition; i++) { System.out.print("-"); } System.out.println(); } - public static void printWinners(List winners) { + public void printWinners(List winners) { String result = String.join(", ", winners); System.out.println(result + "가 최종 우승했습니다."); } From aa335efca359e2772ce9b3aa73c5f449c609dbfa Mon Sep 17 00:00:00 2001 From: rtaeho Date: Sat, 30 Mar 2024 16:02:32 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=83=81=EC=88=98=ED=99=94=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EA=B3=B5=EB=B0=B1=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingGameManager.java | 4 ++-- src/main/java/domain/Cars.java | 3 ++- src/main/java/view/InputView.java | 4 ---- src/main/java/view/ResultView.java | 8 +++++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/controller/RacingGameManager.java b/src/main/java/controller/RacingGameManager.java index eba0b11..757d55e 100644 --- a/src/main/java/controller/RacingGameManager.java +++ b/src/main/java/controller/RacingGameManager.java @@ -4,6 +4,8 @@ import view.InputView; import view.ResultView; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; public class RacingGameManager { @@ -25,7 +27,5 @@ void runGame(int tryCount, Cars cars) { cars.moveAllCars(); resultView.printStatus(cars.getCars()); } - } - } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 2bc36fa..cf2cff7 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -14,7 +14,7 @@ public List addCars(String carNames) { String[] carNamesArray = carNames.split(","); List cars = new ArrayList<>(); for (String carName : carNamesArray) { - cars.add(new Car(carName)); + cars.add(new Car(carName.trim())); } return cars; } @@ -28,6 +28,7 @@ public void moveAllCars() { private int generateRandomNumber() { return (int) (Math.random() * 10); } + public int findMaxPosition() { int maxPosition = 0; for (Car car : cars) { diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 880f8ac..8dc3fb6 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,12 +1,8 @@ package view; -import domain.Car; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; public class InputView { private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."; diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 0309599..663599e 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -1,10 +1,12 @@ package view; -import java.util.List; - import domain.Car; +import java.util.List; + public class ResultView { + public static final String PRINT_FINAL_WINNER = "가 최종 우승했습니다."; + public void printStatus(List carsList) { for (Car car : carsList) { int currentPosition = car.getPosition(); @@ -24,7 +26,7 @@ private void printPosition(int currenPosition) { public void printWinners(List winners) { String result = String.join(", ", winners); - System.out.println(result + "가 최종 우승했습니다."); + System.out.println(result + PRINT_FINAL_WINNER); } }