diff --git a/docs/README.md b/docs/README.md index e69de29bb2d..84a8aa24b40 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,11 @@ +# 1. 차 이름 입력문구 출력 + +# 2. 배열 동적 할당으로 차 입력 받음 + +# 3. 시도할 횟수 입력받기 + +# 4. 실행결과 순차적 출력 + +# 5. 최종 우승자 출력 + +# 6. 예외처리 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7242..fda70ab897c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,11 @@ package racingcar; +import racingcar.controller.Controller; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Controller controller = new Controller(); + controller.run(); + } } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java new file mode 100644 index 00000000000..8905fa90ca7 --- /dev/null +++ b/src/main/java/racingcar/controller/Controller.java @@ -0,0 +1,30 @@ +package racingcar.controller; + +import racingcar.model.RacingGame; +import racingcar.view.InputView; +import racingcar.view.OutputView; + +import java.util.List; + +public class Controller { + + InputView inputView = new InputView(); + OutputView outputView = new OutputView(); + List carNames = inputView.readCarName(); + int tryNumber = inputView.tryNumber(); + + public void run(){ + RacingGame game = new RacingGame(carNames); + + outputView.showResultMessage(); + + for(int i = 0; i MAX_NAME_LENGTH) { + throw new IllegalArgumentException(); + } + } + + public void move(int number){ + if(number >=CRITERIA_NUM){ + position ++; + } + } + + public String getName(){ + return name; + } + + public int getPosition(){ + return position; + } +} diff --git a/src/main/java/racingcar/model/RacingGame.java b/src/main/java/racingcar/model/RacingGame.java new file mode 100644 index 00000000000..a3d87b18dd0 --- /dev/null +++ b/src/main/java/racingcar/model/RacingGame.java @@ -0,0 +1,28 @@ +package racingcar.model; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.List; + +public class RacingGame { + private final List cars; + private final static int MIN_VALUE = 0; + private final static int MAX_VALUE = 9; + public RacingGame(List names) { + this.cars = names.stream() + .map(Car::new) + .toList(); + } + + public void moveAll(){ + for (Car car : cars) { + int number = Randoms.pickNumberInRange(MIN_VALUE, MAX_VALUE); + car.move(number); + } + } + + public List getCars(){ + return cars; + } + +} diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 00000000000..7bf3a6cd8c8 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,26 @@ +package racingcar.view; + +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.List; + +public class InputView { + + public List readCarName(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return new ArrayList<>(List.of(Console.readLine().split(","))); + } + + public int tryNumber() { + System.out.println("시도할 횟수는 몇 회인가요?"); + + int tryNumber = Integer.parseInt(Console.readLine()); + + if (tryNumber <= 0) { + throw new IllegalArgumentException(); + } + + return tryNumber; + } +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 00000000000..ca009082458 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,33 @@ +package racingcar.view; + +import racingcar.model.Car; + +import java.util.List; +import java.util.stream.Collectors; + +public class OutputView { + public void showResultMessage() { + System.out.println("실행 결과"); + } + public void printAll(List cars){ + for(Car car : cars){ + String position = "-".repeat(car.getPosition()); + System.out.println(car.getName() + " : " + position); + } + + } + public void showWinner(List cars){ + int maxPosition = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElseThrow(); + + String winners = cars.stream() + .filter(car -> car.getPosition() == maxPosition) + .map(Car::getName) + .collect(Collectors.joining(", ")); + + System.out.println("최종 우승자 : " + winners); + } + +}