diff --git a/docs/README.md b/docs/README.md index e69de29..20b0acd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,16 @@ +# 기능 명세서 + +## + +경주할 자동차 이름을 쉼표로 구분해 입력받음 +5자 이하가 아닐 시 에러발생 + +사용자가 몇 번의 이동을 할 것인지 입력받음 +숫자가 아닌걸 입력하면 에러 발생 + +입력받은 이동 횟수만큼 반복 +각 자동차마다 0부터 9까지 무작위 숫자를 random()으로 뽑아서 5가 넘을경우 한칸 앞으로 +현재 각각 자동차가 얼마나 앞으로 갔는지 출력 + +최종 우승자가 여러명이면 쉼표로 구분해 출력 아니면 그냥 출력 + diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..76028d5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,5 +3,7 @@ public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + Controller controller = new Controller(); + controller.run(); } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..29493c0 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,22 @@ +package racingcar; + +public class Car { + + final String name; + int distance; + + public Car(String name){ + this.name = name; + } + + public void addDistance(int rand){ + if(rand>=4){ + distance++; + } + } + + public boolean sameDistance(int distance){ + return this.distance==distance; + } + +} diff --git a/src/main/java/racingcar/Controller.java b/src/main/java/racingcar/Controller.java new file mode 100644 index 0000000..40b2cad --- /dev/null +++ b/src/main/java/racingcar/Controller.java @@ -0,0 +1,18 @@ +package racingcar; + +public class Controller { + + Model model = new Model(); + View view = new View(); + + void run(){ + model.saveCarName(view.inputCarName()); + + model.saveNumberOfAttempts(view.inputNumberOfAttempts()); + + view.printResult(model.race()); + + view.printWinner(model.findWinner()); + } + +} diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java new file mode 100644 index 0000000..0b2b35f --- /dev/null +++ b/src/main/java/racingcar/Model.java @@ -0,0 +1,70 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.StringTokenizer; + +public class Model { + + int numberOfAttempts; + int maxDistance = 0; + ArrayList carList; + + void saveCarName(String input){ + + StringTokenizer st = new StringTokenizer(input, ","); + carList = new ArrayList<>(); + while (st.hasMoreTokens()){ + String name = st.nextToken(); + if(name.length()>5) { + throw new IllegalArgumentException("5글자 이하로 작성"); + } + carList.add(new Car(name)); + } + + } + + void saveNumberOfAttempts(String input){ + + try { + numberOfAttempts = Integer.parseInt(input); + } catch (Exception e){ + System.out.println("숫자를 입력하세요"); + } + + } + + Map race(){ + + Map result = new HashMap<>(); + + while (numberOfAttempts --> 0) { + for (Car list : carList) { + int rand = Randoms.pickNumberInRange(0, 9); + list.addDistance(rand); + result.put(list.name, list.distance); + updateMaxValue(maxDistance, list.distance); + } + } + + return result; + } + + String findWinner(){ + ArrayList winners = new ArrayList<>(); + for (Car list : carList) { + if(list.sameDistance(maxDistance)){ + winners.add(list.name); + } + } + return winners.toString().replace("[", "").replace("]", ""); + } + + + void updateMaxValue(int max, int distance){ + maxDistance = Math.max(distance, max); + } + +} diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java new file mode 100644 index 0000000..cf92f9e --- /dev/null +++ b/src/main/java/racingcar/View.java @@ -0,0 +1,34 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; +import java.util.Map; + +public class View { + + String inputCarName(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,)기준으로 구분)"); + return Console.readLine(); + } + + String inputNumberOfAttempts(){ + System.out.println("시도할 회수는 몇회인가요?"); + return Console.readLine(); + } + + void printResult(Map result){ + + StringBuilder sb = new StringBuilder(); + sb.append("\n실행 결과\n\n"); + + result.forEach((name, distance)-> sb.append(name).append(" : ") + .append("-".repeat(distance)) + .append("\n")); + System.out.println(sb); + } + + void printWinner(String winner){ + System.out.print("최종 우승자 : "); + System.out.println(winner); + } + +}