From 6e3fbcf242997d637a701266d14bd5cc1e0e1aee Mon Sep 17 00:00:00 2001 From: rndnjsgud <139130288+rndnjsgud@users.noreply.github.com> Date: Wed, 20 Mar 2024 17:02:19 +0900 Subject: [PATCH 01/18] Update README.md --- README.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/README.md b/README.md index 1969313..b9021ce 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,87 @@ 자동차 경주 미션 저장소 +## 설정 사항 + +- (중요) JDK 17 버전으로 진행한다. + +## **기능 요구사항** + +- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. +- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. +- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. +- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. + +## **실행 결과** + +- 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. + +``` +경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). +kokodak,kuku,cucu +시도할 회수는 몇회인가요? +5 + +실행 결과 +kokodak : - +kuku : - +cucu : - + +kokodak : -- +kuku : - +cucu : -- + +kokodak : --- +kuku : -- +cucu : --- + +kokodak : ---- +kuku : --- +cucu : ---- + +kokodak : ----- +kuku : ---- +cucu : ----- + +kokodak : ----- +kuku : ---- +cucu : ----- + +kokodak, cucu가 최종 우승했습니다. +``` + +## **프로그래밍 요구사항** + +- **모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외** +- **자바 코드 컨벤션을 지키면서 프로그래밍한다.** + - 참고문서: https://google.github.io/styleguide/javaguide.html 또는 https://myeonguni.tistory.com/1596 +- **`규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.`**를 지키며 구현한다. + - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. + - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. +- **`규칙 2: else 예약어를 쓰지 않는다.`**를 지키며 구현한다. + - 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다. + - else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. +- **함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.** + - 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. + +**MVC 패턴으로 리팩터링 후의 main 메소드 예시** + +```java +import view.InputView; +import view.ResultView; +import domain.RacingGame; + +public class RacingMain { + public static void main(final String... args) { + final var carNames = InputView.getCarNames(); + final var tryCount = InputView.getTryCount(); + + final var racingGame = new RacingGame(carNames, tryCount); + racingGame.race(); + + ResultView.printWinners(racingGame.getWinners()); + } +} +``` From 2c8dda3b658d9037e97ad77b91f210b955bdb3fb Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Sun, 24 Mar 2024 19:24:38 +0900 Subject: [PATCH 02/18] Docs: Add structure outline text file --- src/main/java/RacingMain.java | 1 - ...265\254\355\230\204\352\265\254\354\241\260" | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 "\352\265\254\355\230\204\352\265\254\354\241\260" diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 4394287..7f194f9 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -1,5 +1,4 @@ public class RacingMain { - public static void main(String[] args) { // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 System.out.println("Hello, World!"); diff --git "a/\352\265\254\355\230\204\352\265\254\354\241\260" "b/\352\265\254\355\230\204\352\265\254\354\241\260" new file mode 100644 index 0000000..dd16d62 --- /dev/null +++ "b/\352\265\254\355\230\204\352\265\254\354\241\260" @@ -0,0 +1,17 @@ +1. 입력 + 경주할 자동차 이름 입력(쉼표로 구분) + 시도 횟수 입력(양수인지 확인) + +2. 출력 + 각 자동차 현재 상태 출력 + 최종 우승한 차량 이름 출력 + +3. 서비스 + 3-1. 랜덤 변수 생성 + 3-2 변수값 확인하여 전진 여부 결정 + +4. 도메인 + 4-1 자동차 이름, 현재 위치 저장 + +5.컨트롤러 + 전체적인 동작 실행 From f837b725f298a55fdc3b28b617ee40f7e8a72c8e Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Sun, 24 Mar 2024 20:12:07 +0900 Subject: [PATCH 03/18] Implement: Implement Domain --- src/main/java/Controller/RacingCarController.java | 4 ++++ src/main/java/Domain/RacingCar.java | 4 ++++ src/main/java/Service/MoveCar.java | 2 ++ src/main/java/View/Input.java | 4 ++++ src/main/java/View/Output.java | 2 ++ 5 files changed, 16 insertions(+) create mode 100644 src/main/java/Controller/RacingCarController.java create mode 100644 src/main/java/Domain/RacingCar.java create mode 100644 src/main/java/Service/MoveCar.java create mode 100644 src/main/java/View/Input.java create mode 100644 src/main/java/View/Output.java diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java new file mode 100644 index 0000000..48c70dd --- /dev/null +++ b/src/main/java/Controller/RacingCarController.java @@ -0,0 +1,4 @@ +package Controller; + +public class RacingCarController { +} diff --git a/src/main/java/Domain/RacingCar.java b/src/main/java/Domain/RacingCar.java new file mode 100644 index 0000000..75cb5c1 --- /dev/null +++ b/src/main/java/Domain/RacingCar.java @@ -0,0 +1,4 @@ +package Domain; + +public class RacingCar { +} diff --git a/src/main/java/Service/MoveCar.java b/src/main/java/Service/MoveCar.java new file mode 100644 index 0000000..444eafd --- /dev/null +++ b/src/main/java/Service/MoveCar.java @@ -0,0 +1,2 @@ +package Service;public class MoveCar { +} diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java new file mode 100644 index 0000000..839edc1 --- /dev/null +++ b/src/main/java/View/Input.java @@ -0,0 +1,4 @@ +package View; + +public class Input { +} diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java new file mode 100644 index 0000000..872af64 --- /dev/null +++ b/src/main/java/View/Output.java @@ -0,0 +1,2 @@ +package View;public class Output { +} From 74832b80f8261d54529e821db783a9418e0f041a Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Sun, 24 Mar 2024 20:38:39 +0900 Subject: [PATCH 04/18] Implement: Implement Domain.RacingCars --- src/main/java/Domain/RacingCars.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/Domain/RacingCars.java diff --git a/src/main/java/Domain/RacingCars.java b/src/main/java/Domain/RacingCars.java new file mode 100644 index 0000000..881b5c5 --- /dev/null +++ b/src/main/java/Domain/RacingCars.java @@ -0,0 +1,2 @@ +package Domain;public class RacingCars { +} From c4e565a371efca0da14634457774a99359599ae2 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 18:34:44 +0900 Subject: [PATCH 05/18] Docs: structure outline modify --- src/main/java/Domain/RacingCar.java | 18 +++++++++++++++ src/main/java/Domain/RacingCars.java | 18 ++++++++++++++- src/main/java/Service/MoveCar.java | 22 ++++++++++++++++++- src/main/java/View/Input.java | 12 ++++++++++ src/main/java/View/Output.java | 5 ++++- ...5\254\355\230\204\352\265\254\354\241\260" | 1 + 6 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/main/java/Domain/RacingCar.java b/src/main/java/Domain/RacingCar.java index 75cb5c1..ff27b91 100644 --- a/src/main/java/Domain/RacingCar.java +++ b/src/main/java/Domain/RacingCar.java @@ -1,4 +1,22 @@ package Domain; +import java.util.HashMap; +import java.util.Map; + public class RacingCar { + private String carName; + private int carPosition; + + RacingCar(String carName){ + this.carName = carName; + this.carPosition = 1; + } + + public void moveCarPosition(){ + carPosition += 1; + } + + public int getCarPosition(){ + return carPosition; + } } diff --git a/src/main/java/Domain/RacingCars.java b/src/main/java/Domain/RacingCars.java index 881b5c5..ab89453 100644 --- a/src/main/java/Domain/RacingCars.java +++ b/src/main/java/Domain/RacingCars.java @@ -1,2 +1,18 @@ -package Domain;public class RacingCars { +package Domain; + +import View.Input; + +import java.util.List; +import java.util.Map; + +public class RacingCars { + private Map racingCars; + + public RacingCars (Map racingCars){ + this.racingCars = racingCars; + } + + public Map getRacingCars(){ + return racingCars; + } } diff --git a/src/main/java/Service/MoveCar.java b/src/main/java/Service/MoveCar.java index 444eafd..0bd1e01 100644 --- a/src/main/java/Service/MoveCar.java +++ b/src/main/java/Service/MoveCar.java @@ -1,2 +1,22 @@ -package Service;public class MoveCar { +package Service; + +import Domain.RacingCar; +import Domain.RacingCars; + +import java.util.Map; + +public class MoveCar { + public int generateRandomNumber(){ + return (int)(Math.random()*10); + } + + public void moveCar(RacingCar racingCar){ + if(generateRandomNumber() >= 4){ + racingCar.moveCarPosition(); + } + } + + public void moveCars(RacingCars racingCars){ + + } } diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java index 839edc1..449b385 100644 --- a/src/main/java/View/Input.java +++ b/src/main/java/View/Input.java @@ -1,4 +1,16 @@ package View; +import Domain.RacingCars; + +import java.util.Scanner; + public class Input { + private static final String INPUT_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"; + private static final String INPUT_GAME_NUMBER = "시도할 횟수는 몇 회인가요?"; + + public void inputCarName(RacingCars racingCars){ + Scanner sc = new Scanner(System.in); + + } + } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 872af64..e17a5d5 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -1,2 +1,5 @@ -package View;public class Output { +package View; + +public class Output { + private static final String RESULT = "실행결과\n"; } diff --git "a/\352\265\254\355\230\204\352\265\254\354\241\260" "b/\352\265\254\355\230\204\352\265\254\354\241\260" index dd16d62..03dab2a 100644 --- "a/\352\265\254\355\230\204\352\265\254\354\241\260" +++ "b/\352\265\254\355\230\204\352\265\254\354\241\260" @@ -12,6 +12,7 @@ 4. 도메인 4-1 자동차 이름, 현재 위치 저장 + 4-2 Map<자동차 이름, 현재위치> 로 자동차 목록 저장 5.컨트롤러 전체적인 동작 실행 From 70415eebe1e527dc7179f8920c2922b2b23d5b3e Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 18:48:06 +0900 Subject: [PATCH 06/18] Implement: Implement Service --- src/main/java/Service/MoveCar.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/Service/MoveCar.java b/src/main/java/Service/MoveCar.java index 0bd1e01..00c2c78 100644 --- a/src/main/java/Service/MoveCar.java +++ b/src/main/java/Service/MoveCar.java @@ -16,7 +16,11 @@ public void moveCar(RacingCar racingCar){ } } - public void moveCars(RacingCars racingCars){ - + public Map moveCars(RacingCars racingCars){ + Map racingCarList = racingCars.getRacingCars(); + for(Map.Entry entry : racingCarList.entrySet()){ + moveCar(entry.getKey()); + } + return racingCarList; } } From 1ad7b11c488268f74afee5f4ab45fce5dd4fe9bb Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 18:56:24 +0900 Subject: [PATCH 07/18] Implement: Inplement View.input.inputCarName --- src/main/java/View/Input.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java index 449b385..ef44c1d 100644 --- a/src/main/java/View/Input.java +++ b/src/main/java/View/Input.java @@ -1,16 +1,22 @@ package View; +import Domain.RacingCar; import Domain.RacingCars; +import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.Scanner; public class Input { private static final String INPUT_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"; private static final String INPUT_GAME_NUMBER = "시도할 횟수는 몇 회인가요?"; - public void inputCarName(RacingCars racingCars){ + public List inputCarName(){ Scanner sc = new Scanner(System.in); - + List carNames = Arrays.stream(sc.next() + .split(",")) + .toList(); + return carNames; } - } From 5fc54091c6e88eaf84aebe7d73a0260ee4308a26 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 19:01:33 +0900 Subject: [PATCH 08/18] Comment: Add comment View.input.inputCarName --- src/main/java/View/Input.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java index ef44c1d..353aca9 100644 --- a/src/main/java/View/Input.java +++ b/src/main/java/View/Input.java @@ -12,7 +12,7 @@ public class Input { private static final String INPUT_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"; private static final String INPUT_GAME_NUMBER = "시도할 횟수는 몇 회인가요?"; - public List inputCarName(){ + public List inputCarName(){ //리스트로 차 이름 받은 후 controller에서 Racingcars 생성 Scanner sc = new Scanner(System.in); List carNames = Arrays.stream(sc.next() .split(",")) From 26a9aa7581fed7b047aefa50ebbba761892d0396 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 19:32:02 +0900 Subject: [PATCH 09/18] Implement: Implement View.Output --- src/main/java/Domain/RacingCar.java | 4 ++++ src/main/java/View/Output.java | 30 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/main/java/Domain/RacingCar.java b/src/main/java/Domain/RacingCar.java index ff27b91..b98dae8 100644 --- a/src/main/java/Domain/RacingCar.java +++ b/src/main/java/Domain/RacingCar.java @@ -19,4 +19,8 @@ public void moveCarPosition(){ public int getCarPosition(){ return carPosition; } + + public String getCarName(){ + return carName; + } } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index e17a5d5..62e2847 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -1,5 +1,35 @@ package View; +import Domain.RacingCar; +import Domain.RacingCars; + +import java.util.Collections; +import java.util.Comparator; +import java.util.Map; + public class Output { private static final String RESULT = "실행결과\n"; + + public void printResults(RacingCars racingCars){ + System.out.println(RESULT); + Map racingCarList = racingCars.getRacingCars(); + for(Map.Entry entry : racingCarList.entrySet()){ + RacingCar car = entry.getKey(); + int carPosition = entry.getValue(); + System.out.println(car.getCarName() + " : " + '-' * carPosition + "\n"); + } + } + + public void printFinalResult(RacingCars racingCars){ + Map racingCarList = racingCars.getRacingCars(); + int maxValue = (Collections.max(racingCarList.values())); + for(Map.Entry entry : racingCarList.entrySet()){ + if(entry.getValue() == maxValue){ + System.out.println(entry.getKey().getCarName() + ", "); + } + } + System.out.println("\b\b" + "가 최종 우승했습니다"); + + + } } From dbe66bca4de389a24b5f35eda1abae07966c9262 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 19:34:00 +0900 Subject: [PATCH 10/18] Fix: Change methods in View to static --- src/main/java/Controller/RacingCarController.java | 3 +++ src/main/java/View/Input.java | 2 +- src/main/java/View/Output.java | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java index 48c70dd..1765dec 100644 --- a/src/main/java/Controller/RacingCarController.java +++ b/src/main/java/Controller/RacingCarController.java @@ -1,4 +1,7 @@ package Controller; public class RacingCarController { + public void racingStart(){ + //List carNames = Input. + } } diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java index 353aca9..cfda9ef 100644 --- a/src/main/java/View/Input.java +++ b/src/main/java/View/Input.java @@ -12,7 +12,7 @@ public class Input { private static final String INPUT_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"; private static final String INPUT_GAME_NUMBER = "시도할 횟수는 몇 회인가요?"; - public List inputCarName(){ //리스트로 차 이름 받은 후 controller에서 Racingcars 생성 + public static List inputCarName(){ //리스트로 차 이름 받은 후 controller에서 Racingcars 생성 Scanner sc = new Scanner(System.in); List carNames = Arrays.stream(sc.next() .split(",")) diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 62e2847..8636f66 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -10,7 +10,7 @@ public class Output { private static final String RESULT = "실행결과\n"; - public void printResults(RacingCars racingCars){ + public static void printResults(RacingCars racingCars){ System.out.println(RESULT); Map racingCarList = racingCars.getRacingCars(); for(Map.Entry entry : racingCarList.entrySet()){ @@ -20,7 +20,7 @@ public void printResults(RacingCars racingCars){ } } - public void printFinalResult(RacingCars racingCars){ + public static void printFinalResult(RacingCars racingCars){ Map racingCarList = racingCars.getRacingCars(); int maxValue = (Collections.max(racingCarList.values())); for(Map.Entry entry : racingCarList.entrySet()){ From bd5154ccd17e462e723672c3fcaffa26b16cd328 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:05:22 +0900 Subject: [PATCH 11/18] Fix: Change Racingcars data type map to List --- .../java/Controller/RacingCarController.java | 7 +++++- src/main/java/Domain/RacingCars.java | 6 ++--- src/main/java/Service/MoveCar.java | 13 ++++++----- src/main/java/View/Output.java | 23 +++++++------------ 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java index 1765dec..4b4d0bd 100644 --- a/src/main/java/Controller/RacingCarController.java +++ b/src/main/java/Controller/RacingCarController.java @@ -1,7 +1,12 @@ package Controller; +import View.Input; + +import java.util.List; + public class RacingCarController { public void racingStart(){ - //List carNames = Input. + List carNames = Input.inputCarName(); + } } diff --git a/src/main/java/Domain/RacingCars.java b/src/main/java/Domain/RacingCars.java index ab89453..c73a381 100644 --- a/src/main/java/Domain/RacingCars.java +++ b/src/main/java/Domain/RacingCars.java @@ -6,13 +6,13 @@ import java.util.Map; public class RacingCars { - private Map racingCars; + private List racingCars; - public RacingCars (Map racingCars){ + public RacingCars (List racingCars){ this.racingCars = racingCars; } - public Map getRacingCars(){ + public List getRacingCars(){ return racingCars; } } diff --git a/src/main/java/Service/MoveCar.java b/src/main/java/Service/MoveCar.java index 00c2c78..c1cfcdc 100644 --- a/src/main/java/Service/MoveCar.java +++ b/src/main/java/Service/MoveCar.java @@ -3,6 +3,7 @@ import Domain.RacingCar; import Domain.RacingCars; +import java.util.List; import java.util.Map; public class MoveCar { @@ -16,11 +17,11 @@ public void moveCar(RacingCar racingCar){ } } - public Map moveCars(RacingCars racingCars){ - Map racingCarList = racingCars.getRacingCars(); - for(Map.Entry entry : racingCarList.entrySet()){ - moveCar(entry.getKey()); - } - return racingCarList; + public List moveCars(RacingCars racingCars){ + List racingCarList = racingCars.getRacingCars(); + racingCarList.stream() + .forEach(this::moveCar); + + return racingCarList; } } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 8636f66..49e7d79 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.Comparator; +import java.util.List; import java.util.Map; public class Output { @@ -12,24 +13,16 @@ public class Output { public static void printResults(RacingCars racingCars){ System.out.println(RESULT); - Map racingCarList = racingCars.getRacingCars(); - for(Map.Entry entry : racingCarList.entrySet()){ - RacingCar car = entry.getKey(); - int carPosition = entry.getValue(); - System.out.println(car.getCarName() + " : " + '-' * carPosition + "\n"); - } + List racingCarList = racingCars.getRacingCars(); + racingCarList.stream() + .forEach(cars -> System.out.println(cars.getCarName() + " : " + '-' * cars.getCarPosition() + "\n")); } - +/* public static void printFinalResult(RacingCars racingCars){ - Map racingCarList = racingCars.getRacingCars(); - int maxValue = (Collections.max(racingCarList.values())); - for(Map.Entry entry : racingCarList.entrySet()){ - if(entry.getValue() == maxValue){ - System.out.println(entry.getKey().getCarName() + ", "); - } - } + List racingCarList = racingCars.getRacingCars(); + int maxPosition = racingCarList.getCar System.out.println("\b\b" + "가 최종 우승했습니다"); - } + }*/ } From ce13a8cb324ee2887d9eb7140f011a60623b5d4b Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:15:36 +0900 Subject: [PATCH 12/18] Implement: Implement Domain.RacingCarGenerator --- src/main/java/Domain/RacingCarGenetator.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/Domain/RacingCarGenetator.java diff --git a/src/main/java/Domain/RacingCarGenetator.java b/src/main/java/Domain/RacingCarGenetator.java new file mode 100644 index 0000000..23bd4b2 --- /dev/null +++ b/src/main/java/Domain/RacingCarGenetator.java @@ -0,0 +1,26 @@ +package Domain; + +import View.Input; + +import java.util.ArrayList; +import java.util.List; + +public class RacingCarGenetator { + private final List racingCars = new ArrayList<>(); + + public RacingCarGenetator(){ + } + + public RacingCar generateRacingCar(String carName){ + return new RacingCar(carName); + } + + public List generateCars(){ + List carNames = Input.inputCarName(); + List racingCars = new ArrayList<>(); + for(int i = 0 ; i < carNames.size() ; i++){ + racingCars.add(generateRacingCar(carNames.get(i))); + } + return racingCars; + } +} From 296c29a04b402ed962982d1e60816fea50b9503e Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:16:49 +0900 Subject: [PATCH 13/18] Rename: rename method Domain.RacingCarGenerator.generatecars to generateRacingCars --- src/main/java/Domain/RacingCarGenetator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Domain/RacingCarGenetator.java b/src/main/java/Domain/RacingCarGenetator.java index 23bd4b2..d2e952f 100644 --- a/src/main/java/Domain/RacingCarGenetator.java +++ b/src/main/java/Domain/RacingCarGenetator.java @@ -15,7 +15,7 @@ public RacingCar generateRacingCar(String carName){ return new RacingCar(carName); } - public List generateCars(){ + public List generateRacingCars(){ List carNames = Input.inputCarName(); List racingCars = new ArrayList<>(); for(int i = 0 ; i < carNames.size() ; i++){ From 0e3dc6597d25c4e51191a02193161fa1a9939c32 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:32:14 +0900 Subject: [PATCH 14/18] Implement: Implement Controller right before print result --- src/main/java/Controller/RacingCarController.java | 14 +++++++++++++- src/main/java/RacingMain.java | 5 ++++- src/main/java/Service/MoveCar.java | 4 ++-- src/main/java/View/Input.java | 7 +++++++ src/main/java/View/Output.java | 4 ++-- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java index 4b4d0bd..e420e00 100644 --- a/src/main/java/Controller/RacingCarController.java +++ b/src/main/java/Controller/RacingCarController.java @@ -1,12 +1,24 @@ package Controller; +import Domain.RacingCarGenetator; +import Domain.RacingCars; +import Service.MoveCar; import View.Input; +import View.Output; import java.util.List; public class RacingCarController { public void racingStart(){ - List carNames = Input.inputCarName(); + RacingCarGenetator racingCarGenetator = new RacingCarGenetator(); + RacingCars racingCars = new RacingCars(racingCarGenetator.generateRacingCars()); + MoveCar moveCar = new MoveCar(); + int gameNumbers = Input.inputGameNumber(); + for(int i = 0 ; i < gameNumbers ; i++){ + Output.printResults(racingCars); + moveCar.moveCars(racingCars); + } + Output.printResults(racingCars); } } diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 7f194f9..e849b0b 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -1,6 +1,9 @@ +import Controller.RacingCarController; + public class RacingMain { public static void main(String[] args) { // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 - System.out.println("Hello, World!"); + RacingCarController racingCarController = new RacingCarController(); + racingCarController.racingStart(); } } diff --git a/src/main/java/Service/MoveCar.java b/src/main/java/Service/MoveCar.java index c1cfcdc..86b7cd7 100644 --- a/src/main/java/Service/MoveCar.java +++ b/src/main/java/Service/MoveCar.java @@ -17,11 +17,11 @@ public void moveCar(RacingCar racingCar){ } } - public List moveCars(RacingCars racingCars){ + public void moveCars(RacingCars racingCars){ List racingCarList = racingCars.getRacingCars(); racingCarList.stream() .forEach(this::moveCar); - return racingCarList; + //return racingCarList; } } diff --git a/src/main/java/View/Input.java b/src/main/java/View/Input.java index cfda9ef..27425e4 100644 --- a/src/main/java/View/Input.java +++ b/src/main/java/View/Input.java @@ -13,10 +13,17 @@ public class Input { private static final String INPUT_GAME_NUMBER = "시도할 횟수는 몇 회인가요?"; public static List inputCarName(){ //리스트로 차 이름 받은 후 controller에서 Racingcars 생성 + System.out.println(INPUT_CAR_NAME); Scanner sc = new Scanner(System.in); List carNames = Arrays.stream(sc.next() .split(",")) .toList(); return carNames; } + + public static int inputGameNumber(){ + System.out.println(INPUT_GAME_NUMBER); + Scanner sc = new Scanner(System.in); + return sc.nextInt(); + } } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 49e7d79..f22d101 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -15,7 +15,7 @@ public static void printResults(RacingCars racingCars){ System.out.println(RESULT); List racingCarList = racingCars.getRacingCars(); racingCarList.stream() - .forEach(cars -> System.out.println(cars.getCarName() + " : " + '-' * cars.getCarPosition() + "\n")); + .forEach(cars -> System.out.println(cars.getCarName() + " : " + "-".repeat( cars.getCarPosition()))); } /* public static void printFinalResult(RacingCars racingCars){ @@ -24,5 +24,5 @@ public static void printFinalResult(RacingCars racingCars){ System.out.println("\b\b" + "가 최종 우승했습니다"); - }*/ + } } From 57bde9697d6411fe84bc1a38235257ea9a3658e4 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:33:06 +0900 Subject: [PATCH 15/18] Fix: fix syntax error from View.Output --- src/main/java/View/Output.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index f22d101..f7cbbbd 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -24,5 +24,5 @@ public static void printFinalResult(RacingCars racingCars){ System.out.println("\b\b" + "가 최종 우승했습니다"); - } + }*/ } From 7cda743926d5d9e4f444a66072240c8e53b5aadf Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 20:53:01 +0900 Subject: [PATCH 16/18] Implement: Implement method to find winner's position --- .../java/Controller/RacingCarController.java | 1 + src/main/java/View/Output.java | 29 +++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java index e420e00..4b189ef 100644 --- a/src/main/java/Controller/RacingCarController.java +++ b/src/main/java/Controller/RacingCarController.java @@ -21,4 +21,5 @@ public void racingStart(){ Output.printResults(racingCars); } + } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index f7cbbbd..7775bbf 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -10,19 +10,36 @@ public class Output { private static final String RESULT = "실행결과\n"; - + private static final String FINAL_RESULT = "가 최종 우승했습니다"; public static void printResults(RacingCars racingCars){ System.out.println(RESULT); List racingCarList = racingCars.getRacingCars(); racingCarList.stream() .forEach(cars -> System.out.println(cars.getCarName() + " : " + "-".repeat( cars.getCarPosition()))); } -/* - public static void printFinalResult(RacingCars racingCars){ + + public int findWinnersPosition(RacingCars racingCars){ List racingCarList = racingCars.getRacingCars(); - int maxPosition = racingCarList.getCar - System.out.println("\b\b" + "가 최종 우승했습니다"); + int maxPosition = 0; + for(int i = 0 ; i < racingCarList.size() ; i++){ + maxPosition = findBigger(racingCarList.get(i).getCarPosition(), maxPosition); + } + return maxPosition; + } + public int findBigger(int n, int m){ + if(n > m){ + return n; + } + return m; + } - }*/ + public static void printFinalResult(RacingCars racingCars){ + List racingCarList = racingCars.getRacingCars(); + int maxPosition = 0; + for(int i = 0 ; i < racingCarList.size() ; i++){ + + } + System.out.println("\b\b" + FINAL_RESULT); + } } From 81edd1c9840c42b85b89ad7e0cc11d46939947f0 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 21:00:12 +0900 Subject: [PATCH 17/18] Implement: Implement method View.Output.printFinalResult --- src/main/java/View/Output.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 7775bbf..4340602 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -18,7 +18,7 @@ public static void printResults(RacingCars racingCars){ .forEach(cars -> System.out.println(cars.getCarName() + " : " + "-".repeat( cars.getCarPosition()))); } - public int findWinnersPosition(RacingCars racingCars){ + public static int findWinnersPosition(RacingCars racingCars){ List racingCarList = racingCars.getRacingCars(); int maxPosition = 0; for(int i = 0 ; i < racingCarList.size() ; i++){ @@ -27,7 +27,7 @@ public int findWinnersPosition(RacingCars racingCars){ return maxPosition; } - public int findBigger(int n, int m){ + public static int findBigger(int n, int m){ if(n > m){ return n; } @@ -36,9 +36,11 @@ public int findBigger(int n, int m){ public static void printFinalResult(RacingCars racingCars){ List racingCarList = racingCars.getRacingCars(); - int maxPosition = 0; - for(int i = 0 ; i < racingCarList.size() ; i++){ - + int winnersPosition = findWinnersPosition(racingCars); + for(int i = 0 ; i > racingCarList.size() ; i++){ + if(racingCarList.get(i).getCarPosition() == winnersPosition){ + System.out.println(racingCarList.get(i).getCarName() + ", "); + } } System.out.println("\b\b" + FINAL_RESULT); } From 22b1bba1fc0593bd89ceb0dbd48580f5f0c19660 Mon Sep 17 00:00:00 2001 From: rndnjsgud <00kwh@naver.com> Date: Mon, 25 Mar 2024 21:03:58 +0900 Subject: [PATCH 18/18] Fix: Fix result output --- src/main/java/Controller/RacingCarController.java | 2 +- src/main/java/View/Output.java | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/Controller/RacingCarController.java b/src/main/java/Controller/RacingCarController.java index 4b189ef..3268aef 100644 --- a/src/main/java/Controller/RacingCarController.java +++ b/src/main/java/Controller/RacingCarController.java @@ -19,7 +19,7 @@ public void racingStart(){ moveCar.moveCars(racingCars); } Output.printResults(racingCars); - + Output.printFinalResult(racingCars); } } diff --git a/src/main/java/View/Output.java b/src/main/java/View/Output.java index 4340602..e80447b 100644 --- a/src/main/java/View/Output.java +++ b/src/main/java/View/Output.java @@ -12,10 +12,11 @@ public class Output { private static final String RESULT = "실행결과\n"; private static final String FINAL_RESULT = "가 최종 우승했습니다"; public static void printResults(RacingCars racingCars){ - System.out.println(RESULT); + System.out.print(RESULT); List racingCarList = racingCars.getRacingCars(); racingCarList.stream() .forEach(cars -> System.out.println(cars.getCarName() + " : " + "-".repeat( cars.getCarPosition()))); + System.out.println(); } public static int findWinnersPosition(RacingCars racingCars){ @@ -37,11 +38,11 @@ public static int findBigger(int n, int m){ public static void printFinalResult(RacingCars racingCars){ List racingCarList = racingCars.getRacingCars(); int winnersPosition = findWinnersPosition(racingCars); - for(int i = 0 ; i > racingCarList.size() ; i++){ + for(int i = 0 ; i < racingCarList.size() ; i++){ if(racingCarList.get(i).getCarPosition() == winnersPosition){ - System.out.println(racingCarList.get(i).getCarName() + ", "); + System.out.print(racingCarList.get(i).getCarName() + ", "); } } - System.out.println("\b\b" + FINAL_RESULT); + System.out.print("\b\b" + FINAL_RESULT); } }