diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..27b86cf5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,20 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Input input = new Input(); + Output output = new Output(); + + String[] carNames = input.readCarName(); + int rounds = input.readRound(); + + Racing racing = new Racing(carNames); + + for (int i = 0; i < rounds; i++) + { + racing.raceRound(); + output.printRaceStatus(racing.getCars()); + } + + output.printWinner(racing.getWinners()); } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 00000000..db9a0a00 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,36 @@ +package racingcar; + + +import camp.nextstep.edu.missionutils.Randoms; + +public class Car { + private final String name; + private int position; + + public Car(String name) + { + verificationName(name); + this.name = name; + this.position = 0; + } + + public void verificationName(String name) + { + if (name.length() > 5) + { + throw new IllegalArgumentException("차 이름은 5자 이하만 가능합니다."); + } + } + + public void move() + { + if (Randoms.pickNumberInRange(0, 9) >= 4) + { + this.position++; + } + } + + public String getName() {return name;} + + public int getPosition() {return position;} +} \ No newline at end of file diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java new file mode 100644 index 00000000..ae39f5b2 --- /dev/null +++ b/src/main/java/racingcar/Input.java @@ -0,0 +1,30 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; + +public class Input { + + public String[] readCarName() + { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return Console.readLine().split(","); + } + + public int readRound() + { + System.out.println("시도할 횟수는 몇회인가요?"); + String input = Console.readLine().trim(); + int rounds = Integer.parseInt(input); + verificationRound(rounds); + + return rounds; + } + + private void verificationRound(int value) + { + if (value <= 0) + { + throw new IllegalArgumentException("시도 회수는 1 이상이어야 합니다."); + } + } +} diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java new file mode 100644 index 00000000..b15b8af5 --- /dev/null +++ b/src/main/java/racingcar/Output.java @@ -0,0 +1,19 @@ +package racingcar; + +import java.util.List; + +public class Output { + public void printRaceStatus(List cars) + { + for (Car car : cars) + { + System.out.println(car.getName() + " : " + "-".repeat(car.getPosition())); + } + System.out.println(); + } + + public void printWinner(List winners) + { + System.out.println("최종 우승자 : " + String.join(", ", winners)); + } +} diff --git a/src/main/java/racingcar/Racing.java b/src/main/java/racingcar/Racing.java new file mode 100644 index 00000000..05c28887 --- /dev/null +++ b/src/main/java/racingcar/Racing.java @@ -0,0 +1,60 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; +import java.util.List; +import java.util.ArrayList; + + +public class Racing +{ + private final List cars = new ArrayList<>(); + + public Racing(String[] names) + { + for (String name : names) + { + cars.add(new Car(name.trim())); + } + } + + public void raceRound() + { + for (Car car : cars) + { + car.move(); + } + } + + + public List getWinners() + { + int maxPosition = findMaxPosition(); + List winners = new ArrayList<>(); + for (Car car : cars) + { + if (car.getPosition() == maxPosition) + { + winners.add(car.getName()); + } + } + return winners; + } + + private int findMaxPosition() + { + int max = 0; + for (Car car : cars) + { + if (car.getPosition() > max) + { + max = car.getPosition(); + } + } + return max; + } + + public List getCars() + { + return cars; + } +}