diff --git a/docs/README.md b/docs/README.md index e69de29..3cab4cc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,27 @@ +## 과제 관련 기능목록 및 구현 방식 + +클래스 제작 : Race,Car + +Race는 Racing의 대한 전반적인 기능들을 담당 +Car는 전반적으로 자동차 자체의 기능 및 상태를 담당 + + +> ()는 메서드, 아무것도 없으면 상태 및 에러 +## Car + 1. name : 이름 + 2. stack : 자동차가 얼마나 갔는지를 확인하기 위해 + 3. action () : stack이 증가 및 유지관련 메서드 + 4. toString() : Race관련 메세지를 출력해주는 메서드 + 5. 에러 이름에 빈공간이 있는지 확인 + +## Race + 1. Race initCar() : 자동차 관련 세팅 메서드 + 2. Race start() : 실제 로직 + 3. Race initCount() : 몇번 돌지 등등 Race 관련 메서드 + 4. carList : list race 상황중 값을 담기 위해 + 5. final_victory : 이후 stream으로 값을 정리함 + 6. race_count : 몇번 반복할지 + +## Main method +1. Race 호출 + diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..faf72d9 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,10 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Race race = new Race(); + race.start(); } } + + +// diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..5dc352a --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,37 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.stream.IntStream; + +public class Car { + + private String name; + private int stack; + + public Car(String name) { + if (name.isBlank()) throw new IllegalArgumentException("빈칸"); + if (name.length() > 5) throw new IllegalArgumentException("길이"); + if (name.contains(" ")) throw new IllegalArgumentException("이름에 공백이 포함되었습니다."); + this.name = name; + } + + public String getName() { + return name; + } + + public int getStack() { + return stack; + } + + public void action(){ + if (Randoms.pickNumberInRange(0,9) >= 4){ + stack++; + } + } + + @Override + public String toString() { + return name+" : "+ "-".repeat(stack); + } +} diff --git a/src/main/java/racingcar/Race.java b/src/main/java/racingcar/Race.java new file mode 100644 index 0000000..8d36e8b --- /dev/null +++ b/src/main/java/racingcar/Race.java @@ -0,0 +1,70 @@ +package racingcar; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.*; +import java.util.stream.Collectors; + +public class Race { + + private List carList; + private int raceCount; + + public Race() { + } + + public void start(){ + initCar(); + initRace(); + } + + private void initCar() { + carList = new ArrayList<>(); + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + + for(String t : Console.readLine().trim().split(",")){ + Car car = new Car(t); + if (carList.stream().anyMatch(c -> c.getName().equals(t.trim()))){ + throw new IllegalArgumentException(); + } + carList.add(car); + } + } + + private void initRace() { + System.out.println("시도할 회수는 몇회인가요?"); + + raceCount = Integer.parseInt(camp.nextstep.edu.missionutils.Console.readLine()); + if (raceCount <= 0){ + throw new IllegalArgumentException(); + } + raceStart(); + } + + private void raceStart() { + System.out.println("실행 결과"); + + for (int i = 0; i < raceCount; i++) { + carList.forEach(v -> { + v.action() ; + System.out.println(v.toString()); + }); + } + + int maxStack = carList + .stream() + .mapToInt(f -> f.getStack()) + .max() + .getAsInt(); + + String finalVictory = carList + .stream() + .filter(f -> f.getStack() == maxStack) + .map(Car::getName) + .collect(Collectors.joining(", ")); + + System.out.println("최종 우승자 : " + finalVictory); + } + +}