diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/Application.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/Application.java" index a17a52e..5cad914 100644 --- "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/Application.java" +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/Application.java" @@ -1,7 +1,115 @@ package racingcar; +import racingcar.race.raceCar.RaceCar; +import racingcar.race.raceCar.RaceCarService; +import racingcar.race.raceCar.RaceCarServiceImpl; +import racingcar.race.raceMain.RaceService; +import racingcar.race.raceMain.RaceServiceImpl; +import racingcar.race.raceMain.RaceState; + +import java.util.*; + public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + + RaceService raceService = new RaceServiceImpl(); + RaceCarService raceCarService = new RaceCarServiceImpl(); + + + Scanner car_scanner = new Scanner(System.in); + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String car_input = car_scanner.nextLine(); // 입력받은 자동차 이름 + String[] cars = car_input.split(","); + + System.out.print("시도할 회수는 몇회인가요? "); + Scanner N_canner = new Scanner(System.in); + int N = N_canner.nextInt(); // 진행 횟수 입력 + + + Map carMap = new HashMap<>(); + + // Map에 저장 + for (String car : cars) { + carMap.put(car, new RaceCar(car)); + } + + System.out.println("실행결과\n"); + for (int i = 0; i < N; i++) { + + for (String car : cars) { + + RaceState currState = raceService.getState(); // GO or STAY +// System.out.println("현재 State: " + currState); + + // RaceCar input_car = raceCarService.saveCarInfo(car, currState); // 이름, GO or STAY 입력 + // => for문마다 객체가 새로 생성돼서 count가 누적되지 않음 + + RaceCar input_car = carMap.get(car); + + raceCarService.savaCurrentState(input_car, currState); + + if (input_car.getState().equals(RaceState.GO)) { + input_car.setCount(input_car.getCount() + 1); + input_car.getBar().append("-"); // GO이면 바로 "-" 추가 => 아래 문제 해결 + } + +// System.out.println(input_car.getCar_name() + " count : " + input_car.getCount()); + + // "-"가 중복적으로 추가되었던 이유 +// for (int j = 0; j < input_car.getCount(); j++) { +// input_car.getBar().append("-"); +// } + + +// System.out.println(input_car.getCar_name() + "의 현재 Bar: " + input_car.getBar()); + System.out.println(input_car.getCar_name() + ": " + input_car.getBar()); + } + + System.out.println("\n------------------------------------------\n"); + } + + Map winnerCar = new HashMap<>(); + + int[] count_val = new int[cars.length]; + int carIdx = 0; + + // count 값을 count_val에 넣기 + for (RaceCar car : carMap.values()) { + count_val[carIdx] = car.getCount(); + carIdx++; + } + + // count_val에서 최대 count 찾기 + int max = Arrays.stream(count_val).max().getAsInt(); + + for (RaceCar car : carMap.values()) { + if (car.getCount() == max) { + winnerCar.put(car, carIdx); + } + } + + // 우승자 출력 +// System.out.print("우승자: "); +// for (RaceCar car : winnerCar.keySet()) { +// System.out.print(car.getCar_name() + " "); +// } + + // 깔끔하게 출력하기!! + System.out.print("우승자: "); + List car_names = new ArrayList<>(); + for (RaceCar car : winnerCar.keySet()) { + car_names.add(car.getCar_name()); + } + + System.out.println(String.join(", ", car_names)); + + // stream 이용하기!! +// System.out.print("우승자: "); +// System.out.println( +// winnerCar.keySet().stream() +// .map(RaceCar::getCar_name) +// .collect(Collectors.joining(", ")) +// ); } } diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCar.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCar.java" new file mode 100644 index 0000000..4b3116e --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCar.java" @@ -0,0 +1,71 @@ +package racingcar.race.raceCar; + +import racingcar.race.raceMain.RaceState; + +public class RaceCar { + private String car_name; + private int count; // "-" 출력할 개수 + private RaceState state; + private StringBuilder bar = new StringBuilder(""); + private RaceState curr_state; + + + public RaceState getCurr_state() { + return curr_state; + } + + public void setCurr_state(RaceState curr_state) { + this.curr_state = curr_state; + } + + public StringBuilder getBar() { + return bar; + } + + public void setBar(StringBuilder bar) { + this.bar = bar; + } + + + public RaceCar(RaceState state) { + this.state = state; + } + + public RaceCar(String car_name) { + this.car_name = car_name; + } + + public RaceCar(String car_name, int total_count) { + this.car_name = car_name; + this.count = total_count; + } + + public RaceCar(String car_name, RaceState state) { + this.car_name = car_name; + this.state = state; + } + + public String getCar_name() { + return car_name; + } + + public void setCar_name(String car_name) { + this.car_name = car_name; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public RaceState getState() { + return state; + } + + public void setState(RaceState state) { + this.state = state; + } +} diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarService.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarService.java" new file mode 100644 index 0000000..eec61da --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarService.java" @@ -0,0 +1,16 @@ +package racingcar.race.raceCar; + + +import racingcar.race.raceMain.RaceState; + +public interface RaceCarService { + + // 자동차 이름 등록 + RaceCar saveCarName(String name); + + RaceCar saveCarInfo(String name, RaceState state); + + RaceCar saveTotalCount(int total_count); + + void savaCurrentState(RaceCar car, RaceState state); +} diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarServiceImpl.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarServiceImpl.java" new file mode 100644 index 0000000..5f2b54e --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceCar/RaceCarServiceImpl.java" @@ -0,0 +1,29 @@ +package racingcar.race.raceCar; + +import racingcar.race.raceMain.RaceState; + +public class RaceCarServiceImpl implements RaceCarService { + + + // 사용자에게 차량 이름만 입력받기 + @Override + public RaceCar saveCarName(String car_name) { + return new RaceCar(car_name); + } + + + @Override + public RaceCar saveCarInfo(String car_name, RaceState state) { + return new RaceCar(car_name, state); + } + + @Override + public RaceCar saveTotalCount(int total_count) { + return null; + } + + @Override + public void savaCurrentState(RaceCar car, RaceState state) { + car.setState(state); + } +} \ No newline at end of file diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/Race.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/Race.java" new file mode 100644 index 0000000..5d0c751 --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/Race.java" @@ -0,0 +1,46 @@ +package racingcar.race.raceMain; + +import racingcar.race.raceCar.RaceCar; + +public class Race { + private String car_name; + private int random_number; + private RaceState check_state; + private RaceCar race_car; + + + // getter + public String getCar_name() { + return car_name; + } + + public int getRandom_number() { + return random_number; + } + + public RaceState getCheck_state() { + return check_state; + } + + public RaceCar getRace_car() { + return race_car; + } + + + // setter + public void setCar_name(String car_name) { + this.car_name = car_name; + } + + public void setCheck_state(RaceState check_state) { + this.check_state = check_state; + } + + public void setRandom_number(int random_number) { + this.random_number = random_number; + } + + public void setRace_car(RaceCar race_car) { + this.race_car = race_car; + } +} diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceService.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceService.java" new file mode 100644 index 0000000..6f49923 --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceService.java" @@ -0,0 +1,7 @@ +package racingcar.race.raceMain; + +public interface RaceService { + + // 자동차 상태 조회 + RaceState getState(); // GO, STAY 구분 +} diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceServiceImpl.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceServiceImpl.java" new file mode 100644 index 0000000..c471906 --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceServiceImpl.java" @@ -0,0 +1,22 @@ +package racingcar.race.raceMain; + +import camp.nextstep.edu.missionutils.Randoms; + +public class RaceServiceImpl implements RaceService { + + @Override + public RaceState getState() { + int random_number = Randoms.pickNumberInRange(0,9); +// System.out.println(random_number); // 디버깅용 + + if(random_number >= 4) { + return RaceState.GO; + } else { + return RaceState.STAY; + } + } + + + + +} diff --git "a/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceState.java" "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceState.java" new file mode 100644 index 0000000..0785ee0 --- /dev/null +++ "b/\353\260\261\354\204\261\355\230\204/java-racingcar-6/src/main/java/racingcar/race/raceMain/RaceState.java" @@ -0,0 +1,6 @@ +package racingcar.race.raceMain; + +public enum RaceState { + GO, STAY + // random number >= 4: GO +}