From 0a1c04ef6dd9b9a6f645892cbb22a6f6785d5b46 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Mon, 17 Jun 2019 23:07:16 +0900 Subject: [PATCH 01/27] =?UTF-8?q?docs=20#step2=20-=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=A0=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c550c4c2a09..8fbe11936a0 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,15 @@ * 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. ## 온라인 코드 리뷰 과정 -* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview) \ No newline at end of file +* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview) + +## 구현할 기능 목록 + +### step2 +1. 사용자가 몇 대의 자동차로 몇 번의 이동을 할 것인지 입력하는 기능 (main) +2. 입력받은 자동차 수에 따라 자동차를 생성하는 기능 (service) +3. 생성된 자동차를 화면에 출력하는 기능 (ui) +4. 자동차의 전진 여부를 무작위으로 결정하는 기능 (service) +5. 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 (ui) +6. 입력받은 실행 횟수에 따라 경주를 실행하는 기능 (service) +7. 실행 결과를 화면에 출력하는 기능 (main) From 1bce695ef3855ee849e4519d83abdd423f1e5631 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Mon, 17 Jun 2019 23:23:02 +0900 Subject: [PATCH 02/27] =?UTF-8?q?feat=20#step2=20-=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=EB=B6=80=ED=84=B0=20=EA=B0=92=EC=9D=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EB=B0=9B=EA=B3=A0=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20main=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/step2/CarRaceApplication.java diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java new file mode 100644 index 00000000000..b9d4f760805 --- /dev/null +++ b/src/main/java/step2/CarRaceApplication.java @@ -0,0 +1,19 @@ +package step2; + +import java.util.Scanner; + +public class CarRaceApplication { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.println("자동차 대수는 몇 대 인가요?"); + int numberOfCars = scanner.nextInt(); + + System.out.println("시도할 횟수는 몇 회 인가요?"); + int numberOfTrial = scanner.nextInt(); + + System.out.println(); + System.out.println("실행 결과"); + } +} From 303459f5031bd319faa2c4964d49d5d74be83201 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 01:14:12 +0900 Subject: [PATCH 03/27] =?UTF-8?q?refactor=20#step2=20-=20Main=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=9D=98=20UI=20=EB=A1=9C=EC=A7=81=EC=9D=84?= =?UTF-8?q?=20InputView=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 13 ++++++------ src/main/java/step2/InputView.java | 22 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 src/main/java/step2/InputView.java diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index b9d4f760805..7d4cc32b2e3 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -1,19 +1,18 @@ package step2; -import java.util.Scanner; - public class CarRaceApplication { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - System.out.println("자동차 대수는 몇 대 인가요?"); - int numberOfCars = scanner.nextInt(); + InputView inputView = new InputView(); + int numberOfCars = inputView.getNumberOfCars(); + int numberOfTrials = inputView.getNumberOfTrials(); - System.out.println("시도할 횟수는 몇 회 인가요?"); - int numberOfTrial = scanner.nextInt(); + startRace(numberOfCars, numberOfTrials); System.out.println(); System.out.println("실행 결과"); } + + } diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/InputView.java new file mode 100644 index 00000000000..4807142e970 --- /dev/null +++ b/src/main/java/step2/InputView.java @@ -0,0 +1,22 @@ +package step2; + +import java.util.Scanner; + +public class InputView { + private static final String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; + private static final String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; + private Scanner scanner = new Scanner(System.in); + + public int getNumberOfCars() { + System.out.println(ASK_NUMBER_OF_CARS); + return scanner.nextInt(); + } + + public int getNumberOfTrials() { + System.out.println(ASK_NUMBER_OF_TRIALS); + int numberOfTrials = scanner.nextInt(); + scanner.close(); + return numberOfTrials; + } + +} From 29901aa053f240c0b219e53d828df1bf607fbda5 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 10:18:07 +0900 Subject: [PATCH 04/27] =?UTF-8?q?feat=20#step2=20-=20Car=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80,=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EA=B3=84=ED=9A=8D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++++-------- src/main/java/step2/Car.java | 20 ++++++++++++++++++++ src/main/java/step2/CarRaceApplication.java | 7 +++---- src/main/java/step2/InputView.java | 4 ++-- 4 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 src/main/java/step2/Car.java diff --git a/README.md b/README.md index 8fbe11936a0..12b47045eff 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,12 @@ ## 구현할 기능 목록 -### step2 -1. 사용자가 몇 대의 자동차로 몇 번의 이동을 할 것인지 입력하는 기능 (main) -2. 입력받은 자동차 수에 따라 자동차를 생성하는 기능 (service) -3. 생성된 자동차를 화면에 출력하는 기능 (ui) -4. 자동차의 전진 여부를 무작위으로 결정하는 기능 (service) -5. 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 (ui) -6. 입력받은 실행 횟수에 따라 경주를 실행하는 기능 (service) -7. 실행 결과를 화면에 출력하는 기능 (main) +### step2 +1. 사용자가 몇 대의 자동차로 몇 번의 이동을 할 것인지 입력하는 기능 +2. (추가) 자동차의 속성 정의 +3. 입력받은 자동차 수에 따라 자동차를 생성하는 기능 +4. 생성된 자동차를 화면에 출력하는 기능 +5. 자동차의 전진 여부를 무작위으로 결정하는 기능 +6. 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 +7. 입력받은 실행 횟수에 따라 경주를 실행하는 기능 +8. 실행 결과를 화면에 출력하는 기능 \ No newline at end of file diff --git a/src/main/java/step2/Car.java b/src/main/java/step2/Car.java new file mode 100644 index 00000000000..850ee3747ac --- /dev/null +++ b/src/main/java/step2/Car.java @@ -0,0 +1,20 @@ +package step2; + +public class Car { + private final static int INITIAL_POSITION = 0; + private final static int DISTANCE_PER_MOVE = 1; //TODO: 상수들은 Car를 사용하는 곳에서 선언해야되려나? + + private int position; + + public Car() { + this.position = INITIAL_POSITION; + } + + public int getPosition() { + return this.position; + } + + public int move() { + return this.position + DISTANCE_PER_MOVE; + } +} diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 7d4cc32b2e3..b5440ca662a 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -3,12 +3,11 @@ public class CarRaceApplication { public static void main(String[] args) { - InputView inputView = new InputView(); - int numberOfCars = inputView.getNumberOfCars(); - int numberOfTrials = inputView.getNumberOfTrials(); + final int numberOfCars = inputView.getNumberOfCars(); + final int numberOfTrials = inputView.getNumberOfTrials(); - startRace(numberOfCars, numberOfTrials); + startCarRace(numberOfCars, numberOfTrials); System.out.println(); System.out.println("실행 결과"); diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/InputView.java index 4807142e970..64041281d7c 100644 --- a/src/main/java/step2/InputView.java +++ b/src/main/java/step2/InputView.java @@ -3,8 +3,8 @@ import java.util.Scanner; public class InputView { - private static final String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; - private static final String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; + private final static String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; + private final static String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; private Scanner scanner = new Scanner(System.in); public int getNumberOfCars() { From c2597d37403063aab654318a5c34dc645ac7e1b1 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 10:57:21 +0900 Subject: [PATCH 05/27] =?UTF-8?q?test=20#step2=20-=20Car=20=EC=9C=A0?= =?UTF-8?q?=EB=8B=9B=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80,=20Ca?= =?UTF-8?q?r=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20move()=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/Car.java | 12 +++++-- src/main/java/step2/CarRaceApplication.java | 2 +- src/test/java/step2/CarTest.java | 35 +++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/test/java/step2/CarTest.java diff --git a/src/main/java/step2/Car.java b/src/main/java/step2/Car.java index 850ee3747ac..7154b7596c9 100644 --- a/src/main/java/step2/Car.java +++ b/src/main/java/step2/Car.java @@ -10,11 +10,19 @@ public Car() { this.position = INITIAL_POSITION; } + public Car(int position) { + this.position = position; + } + public int getPosition() { return this.position; } - public int move() { - return this.position + DISTANCE_PER_MOVE; +// public int move() { +// return this.position + DISTANCE_PER_MOVE; +// } + + public Car move(int distancePerMove) { + return new Car(this.position + distancePerMove); } } diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index b5440ca662a..0d802b642a7 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -7,7 +7,7 @@ public static void main(String[] args) { final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - startCarRace(numberOfCars, numberOfTrials); +// startCarRace(numberOfCars, numberOfTrials); System.out.println(); System.out.println("실행 결과"); diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java new file mode 100644 index 00000000000..e4afdd042ac --- /dev/null +++ b/src/test/java/step2/CarTest.java @@ -0,0 +1,35 @@ +package step2; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CarTest { + + Car car; + + @BeforeEach + void init() { + car = new Car(); + } + + @Test + void 자동차가_생성된다() { + assertThat(car).isNotNull(); + } + + @Test + void 생성된_자동차의_시작포지션은_0이다() { + assertThat(car.getPosition()).isEqualTo(0); + } + + @ParameterizedTest + @ValueSource(ints = {1, 2, 3, 4, 5}) + void 자동차가_주어진_거리만큼_이동한다(int numberOfMoves) { + Car movedCar = car.move(numberOfMoves); + assertThat(movedCar.getPosition()).isEqualTo(numberOfMoves); + } +} From acd03f3e311c9ced6e9ce664c1a08587af3eb4de Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 11:27:57 +0900 Subject: [PATCH 06/27] =?UTF-8?q?feat=20#step2=20-=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=EA=B0=92=20Validation=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/Car.java | 2 +- src/main/java/step2/InputView.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/step2/Car.java b/src/main/java/step2/Car.java index 7154b7596c9..71056bd9b91 100644 --- a/src/main/java/step2/Car.java +++ b/src/main/java/step2/Car.java @@ -10,7 +10,7 @@ public Car() { this.position = INITIAL_POSITION; } - public Car(int position) { + private Car(int position) { this.position = position; } diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/InputView.java index 64041281d7c..bf164fb7a70 100644 --- a/src/main/java/step2/InputView.java +++ b/src/main/java/step2/InputView.java @@ -5,18 +5,29 @@ public class InputView { private final static String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; private final static String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; + private final static int MINIMUM_NUMBER_CAN_BE_INPUT = 1; private Scanner scanner = new Scanner(System.in); public int getNumberOfCars() { System.out.println(ASK_NUMBER_OF_CARS); - return scanner.nextInt(); + final int numberOfCars = scanner.nextInt(); + inputNumberValidation(numberOfCars); + return numberOfCars; } public int getNumberOfTrials() { System.out.println(ASK_NUMBER_OF_TRIALS); - int numberOfTrials = scanner.nextInt(); + final int numberOfTrials = scanner.nextInt(); + inputNumberValidation(numberOfTrials); scanner.close(); return numberOfTrials; } + public void inputNumberValidation(int number) { + if(number < MINIMUM_NUMBER_CAN_BE_INPUT) { + scanner.close(); + throw new IllegalArgumentException("최소 1대의 자동차와 최소 1번의 시도횟수가 필요합니다."); + } + } + } From cef19ce2cf31f495ffe14ede72dd936b832a99f9 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 11:31:57 +0900 Subject: [PATCH 07/27] =?UTF-8?q?refactor=20#step2=20-=20Scanner=EB=A5=BC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=9E=90=EB=A1=9C=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/InputView.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/InputView.java index bf164fb7a70..aa1c568f79e 100644 --- a/src/main/java/step2/InputView.java +++ b/src/main/java/step2/InputView.java @@ -6,7 +6,11 @@ public class InputView { private final static String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; private final static String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; private final static int MINIMUM_NUMBER_CAN_BE_INPUT = 1; - private Scanner scanner = new Scanner(System.in); + private Scanner scanner; + + public InputView() { + this.scanner = new Scanner(System.in); + } public int getNumberOfCars() { System.out.println(ASK_NUMBER_OF_CARS); From e4fa12bf02cf01e6ba51ff34cbc2eb32e4131eef Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 12:41:04 +0900 Subject: [PATCH 08/27] =?UTF-8?q?feat=20#step2=20-=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EB=93=A4=EC=9D=84=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20=ED=99=94=EB=A9=B4=EC=97=90=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRace.java | 27 +++++++++++++++++++++ src/main/java/step2/CarRaceApplication.java | 6 ++--- src/main/java/step2/OutputView.java | 24 ++++++++++++++++++ 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 src/main/java/step2/CarRace.java create mode 100644 src/main/java/step2/OutputView.java diff --git a/src/main/java/step2/CarRace.java b/src/main/java/step2/CarRace.java new file mode 100644 index 00000000000..c57ff6809d0 --- /dev/null +++ b/src/main/java/step2/CarRace.java @@ -0,0 +1,27 @@ +package step2; + +import java.util.ArrayList; +import java.util.List; + +public class CarRace { + private int numberOfCars; + private int numberOfTrials; + + public CarRace(int numberOfCars, int numberOfTrials) { + this.numberOfCars = numberOfCars; + this.numberOfTrials = numberOfTrials; + } + + public List makeCars(int numberOfCars) { + List cars = new ArrayList<>(); + for(int i=0; i cars = makeCars(numberOfCars); + return new OutputView(cars); + } +} diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 0d802b642a7..8a87cfa6708 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -7,10 +7,8 @@ public static void main(String[] args) { final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); -// startCarRace(numberOfCars, numberOfTrials); - - System.out.println(); - System.out.println("실행 결과"); + CarRace carRace = new CarRace(numberOfCars, numberOfTrials); + carRace.start(); } diff --git a/src/main/java/step2/OutputView.java b/src/main/java/step2/OutputView.java new file mode 100644 index 00000000000..177bfed28f1 --- /dev/null +++ b/src/main/java/step2/OutputView.java @@ -0,0 +1,24 @@ +package step2; + +import java.util.List; + +public class OutputView { + private static final String POSITION_OF_CAR = "-"; + + public OutputView(List cars) { + System.out.println(); + System.out.println("실행 결과"); + for(Car car : cars) { + printCars(car); + } + System.out.println(); + } + + private void printCars(Car car) { + for(int i=0; i Date: Tue, 18 Jun 2019 15:48:46 +0900 Subject: [PATCH 09/27] =?UTF-8?q?feat=20#step2=20-=20=EC=A0=84=EC=A7=84=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=EB=A5=BC=20=EA=B2=B0=EC=A0=95=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80(=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=84=EC=9A=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 ++++++++-------- src/main/java/step2/CarRace.java | 20 ++++++++++++++++++-- src/main/java/step2/CarRaceApplication.java | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 12b47045eff..07ccf69f05f 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ ## 구현할 기능 목록 ### step2 -1. 사용자가 몇 대의 자동차로 몇 번의 이동을 할 것인지 입력하는 기능 -2. (추가) 자동차의 속성 정의 -3. 입력받은 자동차 수에 따라 자동차를 생성하는 기능 -4. 생성된 자동차를 화면에 출력하는 기능 -5. 자동차의 전진 여부를 무작위으로 결정하는 기능 -6. 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 -7. 입력받은 실행 횟수에 따라 경주를 실행하는 기능 -8. 실행 결과를 화면에 출력하는 기능 \ No newline at end of file +- [x] 사용자가 몇 대의 자동차로 몇 번의 이동을 할 것인지 입력하는 기능 +- [x] (추가) 자동차의 속성 정의 +- [x] 입력받은 자동차 수에 따라 자동차를 생성하는 기능 +- [x] 생성된 자동차를 화면에 출력하는 기능 +- [ ] 자동차의 전진 여부를 무작위으로 결정하는 기능 +- [ ] 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 +- [ ] 입력받은 실행 횟수에 따라 경주를 실행하는 기능 +- [ ] 실행 결과를 화면에 출력하는 기능 \ No newline at end of file diff --git a/src/main/java/step2/CarRace.java b/src/main/java/step2/CarRace.java index c57ff6809d0..ada3362f21c 100644 --- a/src/main/java/step2/CarRace.java +++ b/src/main/java/step2/CarRace.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Random; public class CarRace { private int numberOfCars; @@ -12,7 +13,7 @@ public CarRace(int numberOfCars, int numberOfTrials) { this.numberOfTrials = numberOfTrials; } - public List makeCars(int numberOfCars) { + private List makeCars(int numberOfCars) { List cars = new ArrayList<>(); for(int i=0; i makeCars(int numberOfCars) { return cars; } - public OutputView start() { + private Car decideMoveOrNot(Car car) { + if(canMove()) { + return car.move(1); + } + return car.move(0); + } + + public boolean canMove() { + Random random = new Random(); + if(random.nextInt(10) >= 4) { + return true; + } + return false; + } + + public OutputView raceStart() { List cars = makeCars(numberOfCars); return new OutputView(cars); } diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 8a87cfa6708..14ac46b819c 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -8,7 +8,7 @@ public static void main(String[] args) { final int numberOfTrials = inputView.getNumberOfTrials(); CarRace carRace = new CarRace(numberOfCars, numberOfTrials); - carRace.start(); + carRace.raceStart(); } From 1d55df4104afea40246723d1a80391553c3669a1 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 17:45:17 +0900 Subject: [PATCH 10/27] =?UTF-8?q?feat=20#step2=20-=20=EC=8B=9C=ED=96=89=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98=EB=A7=8C=ED=81=BC=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EB=A5=BC=20=EC=A0=84=EC=A7=84=EC=8B=9C=ED=82=A4?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80,?= =?UTF-8?q?=20=EA=B0=81=20=EC=8B=9C=ED=96=89=EB=A7=88=EB=8B=A4=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=97=90=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++--- src/main/java/step2/Car.java | 14 +++-------- src/main/java/step2/CarRace.java | 39 +++++++++++++++++++++-------- src/main/java/step2/InputView.java | 1 + src/main/java/step2/OutputView.java | 2 -- src/test/java/step2/CarTest.java | 6 +++-- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 07ccf69f05f..cabdca627c3 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ - [x] (추가) 자동차의 속성 정의 - [x] 입력받은 자동차 수에 따라 자동차를 생성하는 기능 - [x] 생성된 자동차를 화면에 출력하는 기능 -- [ ] 자동차의 전진 여부를 무작위으로 결정하는 기능 -- [ ] 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 -- [ ] 입력받은 실행 횟수에 따라 경주를 실행하는 기능 -- [ ] 실행 결과를 화면에 출력하는 기능 \ No newline at end of file +- [x] 자동차의 전진 여부를 무작위으로 결정하는 기능 +- [x] 자동차가 전진 할 경우 화면에 출력될 변화를 설정하는 기능 +- [x] 입력받은 실행 횟수에 따라 경주를 실행하는 기능 +- [x] 실행 결과를 화면에 출력하는 기능 +- [ ] (추가) 구조 리팩토링 \ No newline at end of file diff --git a/src/main/java/step2/Car.java b/src/main/java/step2/Car.java index 71056bd9b91..b08eb862b42 100644 --- a/src/main/java/step2/Car.java +++ b/src/main/java/step2/Car.java @@ -2,7 +2,7 @@ public class Car { private final static int INITIAL_POSITION = 0; - private final static int DISTANCE_PER_MOVE = 1; //TODO: 상수들은 Car를 사용하는 곳에서 선언해야되려나? + private final static int DISTANCE_PER_MOVE = 1; private int position; @@ -10,19 +10,11 @@ public Car() { this.position = INITIAL_POSITION; } - private Car(int position) { - this.position = position; - } - public int getPosition() { return this.position; } -// public int move() { -// return this.position + DISTANCE_PER_MOVE; -// } - - public Car move(int distancePerMove) { - return new Car(this.position + distancePerMove); + public int move() { + return this.position += DISTANCE_PER_MOVE; } } diff --git a/src/main/java/step2/CarRace.java b/src/main/java/step2/CarRace.java index ada3362f21c..7ed96788f96 100644 --- a/src/main/java/step2/CarRace.java +++ b/src/main/java/step2/CarRace.java @@ -5,11 +5,12 @@ import java.util.Random; public class CarRace { - private int numberOfCars; + + private List cars; private int numberOfTrials; public CarRace(int numberOfCars, int numberOfTrials) { - this.numberOfCars = numberOfCars; + this.cars = makeCars(numberOfCars); this.numberOfTrials = numberOfTrials; } @@ -21,23 +22,39 @@ private List makeCars(int numberOfCars) { return cars; } - private Car decideMoveOrNot(Car car) { + private void executeTrials() { + for(int i=0; i= 4) { + private boolean canMove() { + if(getRandomNumber() >= 4) { return true; } return false; } - public OutputView raceStart() { - List cars = makeCars(numberOfCars); - return new OutputView(cars); + private int getRandomNumber() { + Random random = new Random(); + return random.nextInt(10); + } + + public void raceStart() { + System.out.println("실행 결과"); + executeTrials(); } } diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/InputView.java index aa1c568f79e..742f5ffe74e 100644 --- a/src/main/java/step2/InputView.java +++ b/src/main/java/step2/InputView.java @@ -24,6 +24,7 @@ public int getNumberOfTrials() { final int numberOfTrials = scanner.nextInt(); inputNumberValidation(numberOfTrials); scanner.close(); + System.out.println(); return numberOfTrials; } diff --git a/src/main/java/step2/OutputView.java b/src/main/java/step2/OutputView.java index 177bfed28f1..8dd4d4c8428 100644 --- a/src/main/java/step2/OutputView.java +++ b/src/main/java/step2/OutputView.java @@ -6,8 +6,6 @@ public class OutputView { private static final String POSITION_OF_CAR = "-"; public OutputView(List cars) { - System.out.println(); - System.out.println("실행 결과"); for(Car car : cars) { printCars(car); } diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index e4afdd042ac..33f29a6b741 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -29,7 +29,9 @@ void init() { @ParameterizedTest @ValueSource(ints = {1, 2, 3, 4, 5}) void 자동차가_주어진_거리만큼_이동한다(int numberOfMoves) { - Car movedCar = car.move(numberOfMoves); - assertThat(movedCar.getPosition()).isEqualTo(numberOfMoves); + for(int i=0; i Date: Tue, 18 Jun 2019 18:02:10 +0900 Subject: [PATCH 11/27] =?UTF-8?q?refactor=20#step2=20-=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=8F=99=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/step2/CarTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index 33f29a6b741..3f8870efed2 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -9,7 +9,7 @@ public class CarTest { - Car car; + private Car car; @BeforeEach void init() { From c848eadce2039c0e9ee056ce2b61a32f74812c80 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 18:56:21 +0900 Subject: [PATCH 12/27] =?UTF-8?q?refactor=20#step2=20-=20=EA=B2=BD?= =?UTF-8?q?=EC=A3=BC=EB=A5=BC=20=EC=8B=A4=ED=96=89=ED=95=98=EB=8A=94=20Rac?= =?UTF-8?q?eExcutor=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRace.java | 36 ++-------------- src/main/java/step2/RaceExecutor.java | 42 +++++++++++++++++++ .../java/step2/RandomNumberGenerator.java | 12 ++++++ 3 files changed, 57 insertions(+), 33 deletions(-) create mode 100644 src/main/java/step2/RaceExecutor.java create mode 100644 src/main/java/step2/RandomNumberGenerator.java diff --git a/src/main/java/step2/CarRace.java b/src/main/java/step2/CarRace.java index 7ed96788f96..da25f71128a 100644 --- a/src/main/java/step2/CarRace.java +++ b/src/main/java/step2/CarRace.java @@ -2,16 +2,17 @@ import java.util.ArrayList; import java.util.List; -import java.util.Random; public class CarRace { private List cars; private int numberOfTrials; + private RaceExecutor raceExecutor; public CarRace(int numberOfCars, int numberOfTrials) { this.cars = makeCars(numberOfCars); this.numberOfTrials = numberOfTrials; + this.raceExecutor = new RaceExecutor(this.cars); //TODO : RaceExcutor는 CarRace가 생성되어야만 필요하니까 이렇게 생성했는데 문제없을까요? } private List makeCars(int numberOfCars) { @@ -22,39 +23,8 @@ private List makeCars(int numberOfCars) { return cars; } - private void executeTrials() { - for(int i=0; i= 4) { - return true; - } - return false; - } - - private int getRandomNumber() { - Random random = new Random(); - return random.nextInt(10); - } - public void raceStart() { System.out.println("실행 결과"); - executeTrials(); + raceExecutor.executeTrials(numberOfTrials); } } diff --git a/src/main/java/step2/RaceExecutor.java b/src/main/java/step2/RaceExecutor.java new file mode 100644 index 00000000000..0e3b53444ac --- /dev/null +++ b/src/main/java/step2/RaceExecutor.java @@ -0,0 +1,42 @@ +package step2; + +import java.util.List; + +public class RaceExecutor { + private final static int MOVE_CRITERION = 4; + + private List cars; + private RandomNumberGenerator randomNumberGenerator; + + public RaceExecutor(List cars) { + this.cars = cars; + this.randomNumberGenerator = new RandomNumberGenerator(); + } + + public void executeTrials(int numberOfTrials) { + for (int i = 0; i < numberOfTrials; i++) { + moveCars(); + } + } + + private OutputView moveCars() { + for (Car car : this.cars) { + decideMoveOrNot(car); + } + return new OutputView(this.cars); // TODO: 결과화면을 여기서 반환하는 것이 어색한데 문제없을지 궁금합니다. + } + + private void decideMoveOrNot(Car car) { + if (canMove()) { + car.move(); + } + } + + private boolean canMove() { + final int randomNumber = randomNumberGenerator.getRandomNumber(); + if (randomNumber >= MOVE_CRITERION) { + return true; + } + return false; + } +} diff --git a/src/main/java/step2/RandomNumberGenerator.java b/src/main/java/step2/RandomNumberGenerator.java new file mode 100644 index 00000000000..20cc5a76588 --- /dev/null +++ b/src/main/java/step2/RandomNumberGenerator.java @@ -0,0 +1,12 @@ +package step2; + +import java.util.Random; + +public class RandomNumberGenerator { + final static int LIMIT_OF_RANDOM_NUMBER = 10; + + public int getRandomNumber() { + Random random = new Random(); + return random.nextInt(LIMIT_OF_RANDOM_NUMBER); + } +} From c702fcf5bee8972e5be22f3a4f9c1847b5c9fd1c Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 19:05:35 +0900 Subject: [PATCH 13/27] =?UTF-8?q?refactor=20#step2=20-=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC(domain,=20utils,=20view?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 5 ++++- src/main/java/step2/{ => domain}/Car.java | 2 +- src/main/java/step2/{ => domain}/CarRace.java | 4 ++-- src/main/java/step2/{ => domain}/RaceExecutor.java | 9 ++++++--- .../java/step2/{ => utils}/RandomNumberGenerator.java | 4 ++-- src/main/java/step2/{ => view}/InputView.java | 2 +- src/main/java/step2/{ => view}/OutputView.java | 4 +++- src/test/java/step2/CarTest.java | 1 + 8 files changed, 20 insertions(+), 11 deletions(-) rename src/main/java/step2/{ => domain}/Car.java (94%) rename src/main/java/step2/{ => domain}/CarRace.java (93%) rename src/main/java/step2/{ => domain}/RaceExecutor.java (77%) rename src/main/java/step2/{ => utils}/RandomNumberGenerator.java (71%) rename src/main/java/step2/{ => view}/InputView.java (98%) rename src/main/java/step2/{ => view}/OutputView.java (90%) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 14ac46b819c..20b9aee6fc3 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -1,5 +1,8 @@ package step2; +import step2.domain.CarRace; +import step2.view.InputView; + public class CarRaceApplication { public static void main(String[] args) { @@ -8,7 +11,7 @@ public static void main(String[] args) { final int numberOfTrials = inputView.getNumberOfTrials(); CarRace carRace = new CarRace(numberOfCars, numberOfTrials); - carRace.raceStart(); + carRace.raceExecute(); } diff --git a/src/main/java/step2/Car.java b/src/main/java/step2/domain/Car.java similarity index 94% rename from src/main/java/step2/Car.java rename to src/main/java/step2/domain/Car.java index b08eb862b42..a9ba8c04e91 100644 --- a/src/main/java/step2/Car.java +++ b/src/main/java/step2/domain/Car.java @@ -1,4 +1,4 @@ -package step2; +package step2.domain; public class Car { private final static int INITIAL_POSITION = 0; diff --git a/src/main/java/step2/CarRace.java b/src/main/java/step2/domain/CarRace.java similarity index 93% rename from src/main/java/step2/CarRace.java rename to src/main/java/step2/domain/CarRace.java index da25f71128a..d4a60686297 100644 --- a/src/main/java/step2/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,4 +1,4 @@ -package step2; +package step2.domain; import java.util.ArrayList; import java.util.List; @@ -23,7 +23,7 @@ private List makeCars(int numberOfCars) { return cars; } - public void raceStart() { + public void raceExecute() { System.out.println("실행 결과"); raceExecutor.executeTrials(numberOfTrials); } diff --git a/src/main/java/step2/RaceExecutor.java b/src/main/java/step2/domain/RaceExecutor.java similarity index 77% rename from src/main/java/step2/RaceExecutor.java rename to src/main/java/step2/domain/RaceExecutor.java index 0e3b53444ac..595eb50c3ec 100644 --- a/src/main/java/step2/RaceExecutor.java +++ b/src/main/java/step2/domain/RaceExecutor.java @@ -1,4 +1,7 @@ -package step2; +package step2.domain; + +import step2.utils.RandomNumberGenerator; +import step2.view.OutputView; import java.util.List; @@ -19,11 +22,11 @@ public void executeTrials(int numberOfTrials) { } } - private OutputView moveCars() { + private void moveCars() { for (Car car : this.cars) { decideMoveOrNot(car); } - return new OutputView(this.cars); // TODO: 결과화면을 여기서 반환하는 것이 어색한데 문제없을지 궁금합니다. + new OutputView(this.cars); // TODO: 결과화면을 여기서 생성하는 것이 어색한데 문제 없을지 궁금합니다. } private void decideMoveOrNot(Car car) { diff --git a/src/main/java/step2/RandomNumberGenerator.java b/src/main/java/step2/utils/RandomNumberGenerator.java similarity index 71% rename from src/main/java/step2/RandomNumberGenerator.java rename to src/main/java/step2/utils/RandomNumberGenerator.java index 20cc5a76588..46bdf10cc0f 100644 --- a/src/main/java/step2/RandomNumberGenerator.java +++ b/src/main/java/step2/utils/RandomNumberGenerator.java @@ -1,9 +1,9 @@ -package step2; +package step2.utils; import java.util.Random; public class RandomNumberGenerator { - final static int LIMIT_OF_RANDOM_NUMBER = 10; + private final static int LIMIT_OF_RANDOM_NUMBER = 10; public int getRandomNumber() { Random random = new Random(); diff --git a/src/main/java/step2/InputView.java b/src/main/java/step2/view/InputView.java similarity index 98% rename from src/main/java/step2/InputView.java rename to src/main/java/step2/view/InputView.java index 742f5ffe74e..d6a50fc92f9 100644 --- a/src/main/java/step2/InputView.java +++ b/src/main/java/step2/view/InputView.java @@ -1,4 +1,4 @@ -package step2; +package step2.view; import java.util.Scanner; diff --git a/src/main/java/step2/OutputView.java b/src/main/java/step2/view/OutputView.java similarity index 90% rename from src/main/java/step2/OutputView.java rename to src/main/java/step2/view/OutputView.java index 8dd4d4c8428..725bbef0d38 100644 --- a/src/main/java/step2/OutputView.java +++ b/src/main/java/step2/view/OutputView.java @@ -1,4 +1,6 @@ -package step2; +package step2.view; + +import step2.domain.Car; import java.util.List; diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index 3f8870efed2..54e544ff51f 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import step2.domain.Car; import static org.assertj.core.api.Assertions.assertThat; From 9188b75a4305adbb1615acd3df7b439711b7b7d2 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Tue, 18 Jun 2019 19:14:33 +0900 Subject: [PATCH 14/27] =?UTF-8?q?refactor=20#step2=20-=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EC=9D=98=20=EC=A0=84=EC=A7=84=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80=EB=A5=BC=20=EA=B2=B0=EC=A0=95=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20MoveIndicator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/domain/CarRace.java | 2 +- src/main/java/step2/domain/RaceExecutor.java | 18 ++++++------------ src/main/java/step2/utils/MoveIndicator.java | 13 +++++++++++++ src/main/java/step2/view/InputView.java | 4 ++-- src/main/java/step2/view/OutputView.java | 4 ++-- 5 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 src/main/java/step2/utils/MoveIndicator.java diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index d4a60686297..b00438c5f07 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -17,7 +17,7 @@ public CarRace(int numberOfCars, int numberOfTrials) { private List makeCars(int numberOfCars) { List cars = new ArrayList<>(); - for(int i=0; i cars; private RandomNumberGenerator randomNumberGenerator; + private MoveIndicator moveIndicator; public RaceExecutor(List cars) { this.cars = cars; this.randomNumberGenerator = new RandomNumberGenerator(); + this.moveIndicator = new MoveIndicator(); } public void executeTrials(int numberOfTrials) { @@ -24,22 +26,14 @@ public void executeTrials(int numberOfTrials) { private void moveCars() { for (Car car : this.cars) { - decideMoveOrNot(car); + moveIfPossible(car); } new OutputView(this.cars); // TODO: 결과화면을 여기서 생성하는 것이 어색한데 문제 없을지 궁금합니다. } - private void decideMoveOrNot(Car car) { - if (canMove()) { + private void moveIfPossible(Car car) { + if (moveIndicator.canMove(randomNumberGenerator)) { car.move(); } } - - private boolean canMove() { - final int randomNumber = randomNumberGenerator.getRandomNumber(); - if (randomNumber >= MOVE_CRITERION) { - return true; - } - return false; - } } diff --git a/src/main/java/step2/utils/MoveIndicator.java b/src/main/java/step2/utils/MoveIndicator.java new file mode 100644 index 00000000000..28386e49a78 --- /dev/null +++ b/src/main/java/step2/utils/MoveIndicator.java @@ -0,0 +1,13 @@ +package step2.utils; + +public class MoveIndicator { + private final static int MOVE_CRITERION = 4; + + public boolean canMove(RandomNumberGenerator generator) { + final int randomNumber = generator.getRandomNumber(); + if (randomNumber >= MOVE_CRITERION) { + return true; + } + return false; + } +} diff --git a/src/main/java/step2/view/InputView.java b/src/main/java/step2/view/InputView.java index d6a50fc92f9..ff3edff8845 100644 --- a/src/main/java/step2/view/InputView.java +++ b/src/main/java/step2/view/InputView.java @@ -28,8 +28,8 @@ public int getNumberOfTrials() { return numberOfTrials; } - public void inputNumberValidation(int number) { - if(number < MINIMUM_NUMBER_CAN_BE_INPUT) { + private void inputNumberValidation(int number) { + if (number < MINIMUM_NUMBER_CAN_BE_INPUT) { scanner.close(); throw new IllegalArgumentException("최소 1대의 자동차와 최소 1번의 시도횟수가 필요합니다."); } diff --git a/src/main/java/step2/view/OutputView.java b/src/main/java/step2/view/OutputView.java index 725bbef0d38..a60a3a6f0eb 100644 --- a/src/main/java/step2/view/OutputView.java +++ b/src/main/java/step2/view/OutputView.java @@ -8,14 +8,14 @@ public class OutputView { private static final String POSITION_OF_CAR = "-"; public OutputView(List cars) { - for(Car car : cars) { + for (Car car : cars) { printCars(car); } System.out.println(); } private void printCars(Car car) { - for(int i=0; i Date: Tue, 18 Jun 2019 23:44:05 +0900 Subject: [PATCH 15/27] =?UTF-8?q?feedback=20#step2=20-=20CarTest=EC=9D=98?= =?UTF-8?q?=20@BeforEach=20=EB=8C=80=EC=8B=A0=20Car=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/step2/CarTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index 54e544ff51f..110e24a4a14 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -1,6 +1,5 @@ package step2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -10,12 +9,7 @@ public class CarTest { - private Car car; - - @BeforeEach - void init() { - car = new Car(); - } + private Car car = new Car(); @Test void 자동차가_생성된다() { @@ -27,10 +21,16 @@ void init() { assertThat(car.getPosition()).isEqualTo(0); } + @Test + void 자동차는_랜덤숫자가_4이상인_경우만_이동한다() { + + // RaceExecutor 리팩토링 후 작성 예정 + } + @ParameterizedTest @ValueSource(ints = {1, 2, 3, 4, 5}) void 자동차가_주어진_거리만큼_이동한다(int numberOfMoves) { - for(int i=0; i Date: Wed, 19 Jun 2019 00:30:30 +0900 Subject: [PATCH 16/27] =?UTF-8?q?feedback=20#step2=20-=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=89=20=EC=BB=AC=EB=A0=89=EC=85=98=20=EA=B0=9D=EC=B2=B4(Ca?= =?UTF-8?q?rs)=20=EC=83=9D=EC=84=B1,=20CarRace=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20Cars=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/domain/CarRace.java | 15 ++++++--------- src/main/java/step2/domain/Cars.java | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 src/main/java/step2/domain/Cars.java diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index b00438c5f07..ee3ef5df928 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,30 +1,27 @@ package step2.domain; import java.util.ArrayList; -import java.util.List; public class CarRace { - private List cars; private int numberOfTrials; private RaceExecutor raceExecutor; public CarRace(int numberOfCars, int numberOfTrials) { - this.cars = makeCars(numberOfCars); + makeCars(numberOfCars); this.numberOfTrials = numberOfTrials; - this.raceExecutor = new RaceExecutor(this.cars); //TODO : RaceExcutor는 CarRace가 생성되어야만 필요하니까 이렇게 생성했는데 문제없을까요? + this.raceExecutor = new RaceExecutor(this.cars); } - private List makeCars(int numberOfCars) { - List cars = new ArrayList<>(); + private void makeCars(int numberOfCars) { + Cars cars = new Cars(new ArrayList<>()); for (int i = 0; i < numberOfCars; i++) { - cars.add(new Car()); + cars.getCars().add(new Car()); } - return cars; } public void raceExecute() { - System.out.println("실행 결과"); + System.out.println("실행 결과"); //TODO: view에 위임 raceExecutor.executeTrials(numberOfTrials); } } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java new file mode 100644 index 00000000000..25bbe48f37e --- /dev/null +++ b/src/main/java/step2/domain/Cars.java @@ -0,0 +1,17 @@ +package step2.domain; + +import java.util.ArrayList; +import java.util.List; + +public class Cars { + + private List cars; + + public Cars(List cars) { + this.cars = cars; + } + + public List getCars() { + return cars; + } +} From 522d860e8967202ef369195928355674e3d77d44 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 01:12:32 +0900 Subject: [PATCH 17/27] =?UTF-8?q?feedback=20#step2=20-=20Car=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EA=B0=80=20=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=EA=B0=80=EB=8A=A5=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=EA=B0=80=EC=A7=80=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/domain/Car.java | 15 +++++++++++---- src/main/java/step2/domain/CarRace.java | 11 +++++++---- src/main/java/step2/domain/Cars.java | 1 - 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/step2/domain/Car.java b/src/main/java/step2/domain/Car.java index a9ba8c04e91..c80f05ad3a0 100644 --- a/src/main/java/step2/domain/Car.java +++ b/src/main/java/step2/domain/Car.java @@ -3,7 +3,7 @@ public class Car { private final static int INITIAL_POSITION = 0; private final static int DISTANCE_PER_MOVE = 1; - + private final static int MOVE_CRITERION = 4; private int position; public Car() { @@ -11,10 +11,17 @@ public Car() { } public int getPosition() { - return this.position; + return position; + } + + public int move(int randomNumber) { + if (canMove(randomNumber)) { + return position += DISTANCE_PER_MOVE; + } + return position; } - public int move() { - return this.position += DISTANCE_PER_MOVE; + private boolean canMove(int randomNumber) { + return randomNumber >= MOVE_CRITERION; } } diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index ee3ef5df928..e1aac798bea 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,16 +1,19 @@ package step2.domain; +import step2.view.OutputView; + import java.util.ArrayList; public class CarRace { - private int numberOfTrials; - private RaceExecutor raceExecutor; + private Cars cars; + private final int numberOfTrials; +// private RaceExecutor raceExecutor; public CarRace(int numberOfCars, int numberOfTrials) { makeCars(numberOfCars); this.numberOfTrials = numberOfTrials; - this.raceExecutor = new RaceExecutor(this.cars); +// this.raceExecutor = new RaceExecutor(this.cars); } private void makeCars(int numberOfCars) { @@ -22,6 +25,6 @@ private void makeCars(int numberOfCars) { public void raceExecute() { System.out.println("실행 결과"); //TODO: view에 위임 - raceExecutor.executeTrials(numberOfTrials); +// raceExecutor.executeTrials(numberOfTrials); } } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java index 25bbe48f37e..32e34e590a6 100644 --- a/src/main/java/step2/domain/Cars.java +++ b/src/main/java/step2/domain/Cars.java @@ -1,6 +1,5 @@ package step2.domain; -import java.util.ArrayList; import java.util.List; public class Cars { From e9b839961d0259ee8ded25c04d4f8a28856b9bd4 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 01:43:03 +0900 Subject: [PATCH 18/27] =?UTF-8?q?feedback=20#step2=20-=20Cars=20=EC=BB=AC?= =?UTF-8?q?=EB=A0=89=EC=85=98=EC=9D=84=20Cars=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD,=20=EA=B2=8C=EC=9E=84=20=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 5 ++-- src/main/java/step2/domain/CarRace.java | 27 ++++++++++++--------- src/main/java/step2/domain/Cars.java | 9 +++++++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 20b9aee6fc3..f4ae442eadb 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -5,13 +5,14 @@ public class CarRaceApplication { + private static CarRace carRace; + public static void main(String[] args) { InputView inputView = new InputView(); final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - CarRace carRace = new CarRace(numberOfCars, numberOfTrials); - carRace.raceExecute(); + carRace.raceExecute(numberOfCars, numberOfTrials); } diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index e1aac798bea..a64f6d1f8a1 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -7,24 +7,27 @@ public class CarRace { private Cars cars; - private final int numberOfTrials; -// private RaceExecutor raceExecutor; + private int numberOfTrials; - public CarRace(int numberOfCars, int numberOfTrials) { - makeCars(numberOfCars); + private CarRace(Cars cars, int numberOfTrials) { + this.cars = cars; this.numberOfTrials = numberOfTrials; -// this.raceExecutor = new RaceExecutor(this.cars); } - private void makeCars(int numberOfCars) { - Cars cars = new Cars(new ArrayList<>()); - for (int i = 0; i < numberOfCars; i++) { - cars.getCars().add(new Car()); - } + public CarRace raceExecute(int numberOfCars, int numberOfTrials) { + return new CarRace(Cars.makeCars(numberOfCars), numberOfTrials); } - public void raceExecute() { - System.out.println("실행 결과"); //TODO: view에 위임 + +// private void makeCars(int numberOfCars) { +// Cars cars = new Cars(new ArrayList<>()); +// for (int i = 0; i < numberOfCars; i++) { +// cars.getCars().add(new Car()); +// } +// } + +// public void raceExecute() { +// System.out.println("실행 결과"); //TODO: view에 위임 // raceExecutor.executeTrials(numberOfTrials); } } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java index 32e34e590a6..0c7fae3098d 100644 --- a/src/main/java/step2/domain/Cars.java +++ b/src/main/java/step2/domain/Cars.java @@ -1,5 +1,6 @@ package step2.domain; +import java.util.ArrayList; import java.util.List; public class Cars { @@ -13,4 +14,12 @@ public Cars(List cars) { public List getCars() { return cars; } + + public static Cars makeCars(int numberOfCars) { + List cars = new ArrayList<>(); + for (int i = 0; i < numberOfCars; i++) { + cars.add(new Car()); + } + return new Cars(cars); + } } From e62c955554322a3b10d67c227ad3bea6c13202b1 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 02:26:01 +0900 Subject: [PATCH 19/27] =?UTF-8?q?feedback=20#step2=20-=20NumberGenerator?= =?UTF-8?q?=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/domain/CarRace.java | 12 +----------- src/main/java/step2/utils/NumberGenerator.java | 6 ++++++ src/main/java/step2/utils/RandomNumberGenerator.java | 3 ++- src/test/java/step2/CarTest.java | 6 +++++- 4 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 src/main/java/step2/utils/NumberGenerator.java diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index a64f6d1f8a1..302684844c1 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,9 +1,5 @@ package step2.domain; -import step2.view.OutputView; - -import java.util.ArrayList; - public class CarRace { private Cars cars; @@ -19,15 +15,9 @@ public CarRace raceExecute(int numberOfCars, int numberOfTrials) { } -// private void makeCars(int numberOfCars) { -// Cars cars = new Cars(new ArrayList<>()); -// for (int i = 0; i < numberOfCars; i++) { -// cars.getCars().add(new Car()); -// } -// } // public void raceExecute() { // System.out.println("실행 결과"); //TODO: view에 위임 // raceExecutor.executeTrials(numberOfTrials); - } +// } } diff --git a/src/main/java/step2/utils/NumberGenerator.java b/src/main/java/step2/utils/NumberGenerator.java new file mode 100644 index 00000000000..5f25839fb60 --- /dev/null +++ b/src/main/java/step2/utils/NumberGenerator.java @@ -0,0 +1,6 @@ +package step2.utils; + +public interface NumberGenerator { + + int getRandomNumber(); +} diff --git a/src/main/java/step2/utils/RandomNumberGenerator.java b/src/main/java/step2/utils/RandomNumberGenerator.java index 46bdf10cc0f..bb032a1f8a2 100644 --- a/src/main/java/step2/utils/RandomNumberGenerator.java +++ b/src/main/java/step2/utils/RandomNumberGenerator.java @@ -2,9 +2,10 @@ import java.util.Random; -public class RandomNumberGenerator { +public class RandomNumberGenerator implements NumberGenerator { private final static int LIMIT_OF_RANDOM_NUMBER = 10; + @Override public int getRandomNumber() { Random random = new Random(); return random.nextInt(LIMIT_OF_RANDOM_NUMBER); diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index 110e24a4a14..ba6dcda663e 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -22,8 +22,12 @@ public class CarTest { } @Test - void 자동차는_랜덤숫자가_4이상인_경우만_이동한다() { + void 입력된_숫자만큼_자동차가_생성된다() { + // TODO + } + @Test + void 자동차는_랜덤숫자가_4이상인_경우만_이동한다() { // RaceExecutor 리팩토링 후 작성 예정 } From ea195078f2497493dd8230a2d654c0b9c53546fd Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 03:33:50 +0900 Subject: [PATCH 20/27] =?UTF-8?q?feedback=20#step2=20-=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EB=93=A4=20=EC=9D=B4=EB=8F=99=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20Cars=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EC=A0=84,=20=EA=B0=81=20=EA=B2=BD?= =?UTF-8?q?=EC=A3=BC=20=EC=8B=9C=ED=96=89=EA=B2=B0=EA=B3=BC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=EC=9D=84=20main=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 12 ++++++++++-- src/main/java/step2/domain/CarRace.java | 13 +++++++------ src/main/java/step2/domain/Cars.java | 13 ++++++++++++- src/main/java/step2/view/OutputView.java | 5 +++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index f4ae442eadb..f880275b87e 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -1,19 +1,27 @@ package step2; import step2.domain.CarRace; +import step2.domain.Cars; +import step2.utils.NumberGenerator; import step2.view.InputView; +import step2.view.OutputView; public class CarRaceApplication { private static CarRace carRace; + private static NumberGenerator numberGenerator; public static void main(String[] args) { InputView inputView = new InputView(); final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - carRace.raceExecute(numberOfCars, numberOfTrials); - } + carRace.raceStart(numberOfCars, numberOfTrials); + for (int i = 0; i < numberOfTrials; i++) { + Cars raceResult = carRace.executeTrials(numberGenerator); + new OutputView(raceResult); + } + } } diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index 302684844c1..679f0b4ecde 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,5 +1,7 @@ package step2.domain; +import step2.utils.NumberGenerator; + public class CarRace { private Cars cars; @@ -10,14 +12,13 @@ private CarRace(Cars cars, int numberOfTrials) { this.numberOfTrials = numberOfTrials; } - public CarRace raceExecute(int numberOfCars, int numberOfTrials) { + public CarRace raceStart(int numberOfCars, int numberOfTrials) { return new CarRace(Cars.makeCars(numberOfCars), numberOfTrials); } + public Cars executeTrials(NumberGenerator numberGenerator) { + int randomNumber = numberGenerator.getRandomNumber(); + return cars.moveCars(randomNumber); + } - -// public void raceExecute() { -// System.out.println("실행 결과"); //TODO: view에 위임 -// raceExecutor.executeTrials(numberOfTrials); -// } } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java index 0c7fae3098d..37b1c2ebb25 100644 --- a/src/main/java/step2/domain/Cars.java +++ b/src/main/java/step2/domain/Cars.java @@ -1,5 +1,7 @@ package step2.domain; +import step2.utils.NumberGenerator; + import java.util.ArrayList; import java.util.List; @@ -7,7 +9,7 @@ public class Cars { private List cars; - public Cars(List cars) { + private Cars(List cars) { this.cars = cars; } @@ -22,4 +24,13 @@ public static Cars makeCars(int numberOfCars) { } return new Cars(cars); } + + public Cars moveCars(int randomNumber) { + for (Car car : cars) { + car.move(randomNumber); + } + return this; + } + + } diff --git a/src/main/java/step2/view/OutputView.java b/src/main/java/step2/view/OutputView.java index a60a3a6f0eb..c9c4ecc30ec 100644 --- a/src/main/java/step2/view/OutputView.java +++ b/src/main/java/step2/view/OutputView.java @@ -1,14 +1,15 @@ package step2.view; import step2.domain.Car; +import step2.domain.Cars; import java.util.List; public class OutputView { private static final String POSITION_OF_CAR = "-"; - public OutputView(List cars) { - for (Car car : cars) { + public OutputView(Cars cars) { + for (Car car : cars.getCars()) { printCars(car); } System.out.println(); From 3334a79d28c22876dad607e68b885a98f0225e8b Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 03:37:24 +0900 Subject: [PATCH 21/27] =?UTF-8?q?feedback=20#step2=20-=20numberOfTrials?= =?UTF-8?q?=EB=A5=BC=20main=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90=EC=84=9C?= =?UTF-8?q?=EB=A7=8C=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 2 +- src/main/java/step2/domain/CarRace.java | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index f880275b87e..d31df9250f0 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -16,7 +16,7 @@ public static void main(String[] args) { final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - carRace.raceStart(numberOfCars, numberOfTrials); + carRace.raceStart(numberOfCars); for (int i = 0; i < numberOfTrials; i++) { Cars raceResult = carRace.executeTrials(numberGenerator); diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index 679f0b4ecde..9736cd30db6 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -5,15 +5,13 @@ public class CarRace { private Cars cars; - private int numberOfTrials; - private CarRace(Cars cars, int numberOfTrials) { + private CarRace(Cars cars) { this.cars = cars; - this.numberOfTrials = numberOfTrials; } - public CarRace raceStart(int numberOfCars, int numberOfTrials) { - return new CarRace(Cars.makeCars(numberOfCars), numberOfTrials); + public CarRace raceStart(int numberOfCars) { + return new CarRace(Cars.makeCars(numberOfCars)); } public Cars executeTrials(NumberGenerator numberGenerator) { From 7b3fa9e3afaa89ad51c6868af4d4a671bb558708 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 03:42:31 +0900 Subject: [PATCH 22/27] =?UTF-8?q?feedback=20#step2=20-=20NumberGenerator?= =?UTF-8?q?=EB=A5=BC=20CarRace=EC=9D=98=20=ED=95=84=EB=93=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 6 +----- src/main/java/step2/domain/CarRace.java | 5 +++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index d31df9250f0..e1ba543afad 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -1,15 +1,12 @@ package step2; import step2.domain.CarRace; -import step2.domain.Cars; -import step2.utils.NumberGenerator; import step2.view.InputView; import step2.view.OutputView; public class CarRaceApplication { private static CarRace carRace; - private static NumberGenerator numberGenerator; public static void main(String[] args) { InputView inputView = new InputView(); @@ -19,8 +16,7 @@ public static void main(String[] args) { carRace.raceStart(numberOfCars); for (int i = 0; i < numberOfTrials; i++) { - Cars raceResult = carRace.executeTrials(numberGenerator); - new OutputView(raceResult); + new OutputView(carRace.executeTrials()); } } diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index 9736cd30db6..82a6a10bf8f 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -5,6 +5,7 @@ public class CarRace { private Cars cars; + private NumberGenerator numberGenerator; private CarRace(Cars cars) { this.cars = cars; @@ -14,8 +15,8 @@ public CarRace raceStart(int numberOfCars) { return new CarRace(Cars.makeCars(numberOfCars)); } - public Cars executeTrials(NumberGenerator numberGenerator) { - int randomNumber = numberGenerator.getRandomNumber(); + public Cars executeTrials() { + int randomNumber = this.numberGenerator.getRandomNumber(); return cars.moveCars(randomNumber); } From 5cd9174e56359e2780adef543a98725d4087ca25 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 03:50:29 +0900 Subject: [PATCH 23/27] =?UTF-8?q?feedback=20#step2=20-=20printEmptyLine()?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80,=20=EC=B6=9C=EB=A0=A5=EA=B3=BC=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=EB=90=9C=20=EA=B2=83=EC=9D=84=20OutputView?= =?UTF-8?q?=EC=97=90=20=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 1 + src/main/java/step2/domain/Cars.java | 2 -- src/main/java/step2/view/OutputView.java | 12 +++++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index e1ba543afad..38c615e9ad1 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -15,6 +15,7 @@ public static void main(String[] args) { carRace.raceStart(numberOfCars); + OutputView.showResultTitle(); for (int i = 0; i < numberOfTrials; i++) { new OutputView(carRace.executeTrials()); } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java index 37b1c2ebb25..e400590cae8 100644 --- a/src/main/java/step2/domain/Cars.java +++ b/src/main/java/step2/domain/Cars.java @@ -1,7 +1,5 @@ package step2.domain; -import step2.utils.NumberGenerator; - import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/step2/view/OutputView.java b/src/main/java/step2/view/OutputView.java index c9c4ecc30ec..e614066050d 100644 --- a/src/main/java/step2/view/OutputView.java +++ b/src/main/java/step2/view/OutputView.java @@ -3,22 +3,28 @@ import step2.domain.Car; import step2.domain.Cars; -import java.util.List; - public class OutputView { private static final String POSITION_OF_CAR = "-"; + public static void showResultTitle() { + System.out.println("실행 결과"); + } + public OutputView(Cars cars) { for (Car car : cars.getCars()) { printCars(car); } - System.out.println(); + printEmptyLine(); } private void printCars(Car car) { for (int i = 0; i < car.getPosition(); i++) { System.out.print(POSITION_OF_CAR); } + printEmptyLine(); + } + + private void printEmptyLine() { System.out.println(); } From 846a85acd2fa76e7d148c46a71c84699cfeb317f Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 03:59:22 +0900 Subject: [PATCH 24/27] =?UTF-8?q?feedback=20#step2=20-=20Cars=EB=A5=BC=20O?= =?UTF-8?q?utputView=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 7 +++++-- src/main/java/step2/view/OutputView.java | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 38c615e9ad1..480bcaad102 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -1,6 +1,7 @@ package step2; import step2.domain.CarRace; +import step2.domain.Cars; import step2.view.InputView; import step2.view.OutputView; @@ -15,9 +16,11 @@ public static void main(String[] args) { carRace.raceStart(numberOfCars); - OutputView.showResultTitle(); + OutputView outputView = new OutputView(); + outputView.showResultTitle(); for (int i = 0; i < numberOfTrials; i++) { - new OutputView(carRace.executeTrials()); + Cars raceResult = carRace.executeTrials(); + outputView.showResult(raceResult); } } diff --git a/src/main/java/step2/view/OutputView.java b/src/main/java/step2/view/OutputView.java index e614066050d..d401686042d 100644 --- a/src/main/java/step2/view/OutputView.java +++ b/src/main/java/step2/view/OutputView.java @@ -6,11 +6,11 @@ public class OutputView { private static final String POSITION_OF_CAR = "-"; - public static void showResultTitle() { + public void showResultTitle() { System.out.println("실행 결과"); } - public OutputView(Cars cars) { + public void showResult(Cars cars) { for (Car car : cars.getCars()) { printCars(car); } From afdd1e6e63ca2b1c5b5ffb26d63c0a0306d43ff1 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 04:17:14 +0900 Subject: [PATCH 25/27] =?UTF-8?q?feedback=20#step2=20-=20InputView?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20CarRace=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EC=9D=B4=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 2 +- src/main/java/step2/domain/CarRace.java | 17 ++++++++++++++++- src/main/java/step2/view/InputView.java | 15 ++++----------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 480bcaad102..25beecda4d7 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -14,7 +14,7 @@ public static void main(String[] args) { final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - carRace.raceStart(numberOfCars); + carRace.raceStart(numberOfCars, numberOfTrials); OutputView outputView = new OutputView(); outputView.showResultTitle(); diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index 82a6a10bf8f..729eca65d8c 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -4,6 +4,7 @@ public class CarRace { + private final static int MINIMUM_NUMBER_CAN_BE_INPUT = 1; private Cars cars; private NumberGenerator numberGenerator; @@ -11,7 +12,9 @@ private CarRace(Cars cars) { this.cars = cars; } - public CarRace raceStart(int numberOfCars) { + public CarRace raceStart(int numberOfCars, int numberOfTrials) { + numberOfCarsValidation(numberOfCars); + numberOfTrialsValidation(numberOfTrials); return new CarRace(Cars.makeCars(numberOfCars)); } @@ -20,4 +23,16 @@ public Cars executeTrials() { return cars.moveCars(randomNumber); } + private void numberOfCarsValidation(int numberOfCars) { + if (numberOfCars < MINIMUM_NUMBER_CAN_BE_INPUT) { + throw new IllegalArgumentException("최소 1대의 자동차가 필요합니다."); + } + } + + private void numberOfTrialsValidation(int numberOfTrials) { + if (numberOfTrials < MINIMUM_NUMBER_CAN_BE_INPUT) { + throw new IllegalArgumentException("최소 1번의 시행 횟수가 필요합니다."); + } + } + } diff --git a/src/main/java/step2/view/InputView.java b/src/main/java/step2/view/InputView.java index ff3edff8845..16c7c413efe 100644 --- a/src/main/java/step2/view/InputView.java +++ b/src/main/java/step2/view/InputView.java @@ -5,7 +5,6 @@ public class InputView { private final static String ASK_NUMBER_OF_CARS = "자동차 대수는 몇 대 인가요?"; private final static String ASK_NUMBER_OF_TRIALS = "시도할 횟수는 몇 회 인가요?"; - private final static int MINIMUM_NUMBER_CAN_BE_INPUT = 1; private Scanner scanner; public InputView() { @@ -14,25 +13,19 @@ public InputView() { public int getNumberOfCars() { System.out.println(ASK_NUMBER_OF_CARS); - final int numberOfCars = scanner.nextInt(); - inputNumberValidation(numberOfCars); - return numberOfCars; + return scanner.nextInt(); } public int getNumberOfTrials() { System.out.println(ASK_NUMBER_OF_TRIALS); final int numberOfTrials = scanner.nextInt(); - inputNumberValidation(numberOfTrials); scanner.close(); - System.out.println(); + printEmptyLine(); return numberOfTrials; } - private void inputNumberValidation(int number) { - if (number < MINIMUM_NUMBER_CAN_BE_INPUT) { - scanner.close(); - throw new IllegalArgumentException("최소 1대의 자동차와 최소 1번의 시도횟수가 필요합니다."); - } + private void printEmptyLine() { + System.out.println(); } } From 7928fad1b6df4bf94802caf2367a64c1f51829e5 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 04:49:39 +0900 Subject: [PATCH 26/27] =?UTF-8?q?feedback=20#step2=20-=20(=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95)=20numberGenerator=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=B0=8F=20=EC=A0=84=EB=8B=AC=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/step2/CarRaceApplication.java | 2 +- src/main/java/step2/domain/CarRace.java | 11 +++--- src/main/java/step2/domain/Cars.java | 6 ++- src/main/java/step2/domain/RaceExecutor.java | 39 -------------------- src/main/java/step2/utils/MoveIndicator.java | 13 ------- 5 files changed, 11 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/step2/domain/RaceExecutor.java delete mode 100644 src/main/java/step2/utils/MoveIndicator.java diff --git a/src/main/java/step2/CarRaceApplication.java b/src/main/java/step2/CarRaceApplication.java index 25beecda4d7..2f57d41f504 100644 --- a/src/main/java/step2/CarRaceApplication.java +++ b/src/main/java/step2/CarRaceApplication.java @@ -14,7 +14,7 @@ public static void main(String[] args) { final int numberOfCars = inputView.getNumberOfCars(); final int numberOfTrials = inputView.getNumberOfTrials(); - carRace.raceStart(numberOfCars, numberOfTrials); + carRace = CarRace.raceStart(numberOfCars, numberOfTrials); OutputView outputView = new OutputView(); outputView.showResultTitle(); diff --git a/src/main/java/step2/domain/CarRace.java b/src/main/java/step2/domain/CarRace.java index 729eca65d8c..2ca27005a58 100644 --- a/src/main/java/step2/domain/CarRace.java +++ b/src/main/java/step2/domain/CarRace.java @@ -1,6 +1,7 @@ package step2.domain; import step2.utils.NumberGenerator; +import step2.utils.RandomNumberGenerator; public class CarRace { @@ -10,26 +11,26 @@ public class CarRace { private CarRace(Cars cars) { this.cars = cars; + numberGenerator = new RandomNumberGenerator(); } - public CarRace raceStart(int numberOfCars, int numberOfTrials) { + public static CarRace raceStart(int numberOfCars, int numberOfTrials) { numberOfCarsValidation(numberOfCars); numberOfTrialsValidation(numberOfTrials); return new CarRace(Cars.makeCars(numberOfCars)); } public Cars executeTrials() { - int randomNumber = this.numberGenerator.getRandomNumber(); - return cars.moveCars(randomNumber); + return cars.moveCars(numberGenerator); } - private void numberOfCarsValidation(int numberOfCars) { + private static void numberOfCarsValidation(int numberOfCars) { if (numberOfCars < MINIMUM_NUMBER_CAN_BE_INPUT) { throw new IllegalArgumentException("최소 1대의 자동차가 필요합니다."); } } - private void numberOfTrialsValidation(int numberOfTrials) { + private static void numberOfTrialsValidation(int numberOfTrials) { if (numberOfTrials < MINIMUM_NUMBER_CAN_BE_INPUT) { throw new IllegalArgumentException("최소 1번의 시행 횟수가 필요합니다."); } diff --git a/src/main/java/step2/domain/Cars.java b/src/main/java/step2/domain/Cars.java index e400590cae8..3f8f60ddaa9 100644 --- a/src/main/java/step2/domain/Cars.java +++ b/src/main/java/step2/domain/Cars.java @@ -1,5 +1,7 @@ package step2.domain; +import step2.utils.NumberGenerator; + import java.util.ArrayList; import java.util.List; @@ -23,9 +25,9 @@ public static Cars makeCars(int numberOfCars) { return new Cars(cars); } - public Cars moveCars(int randomNumber) { + public Cars moveCars(NumberGenerator numberGenerator) { for (Car car : cars) { - car.move(randomNumber); + car.move(numberGenerator.getRandomNumber()); } return this; } diff --git a/src/main/java/step2/domain/RaceExecutor.java b/src/main/java/step2/domain/RaceExecutor.java deleted file mode 100644 index 0b407ebb98d..00000000000 --- a/src/main/java/step2/domain/RaceExecutor.java +++ /dev/null @@ -1,39 +0,0 @@ -package step2.domain; - -import step2.utils.MoveIndicator; -import step2.utils.RandomNumberGenerator; -import step2.view.OutputView; - -import java.util.List; - -public class RaceExecutor { - - private List cars; - private RandomNumberGenerator randomNumberGenerator; - private MoveIndicator moveIndicator; - - public RaceExecutor(List cars) { - this.cars = cars; - this.randomNumberGenerator = new RandomNumberGenerator(); - this.moveIndicator = new MoveIndicator(); - } - - public void executeTrials(int numberOfTrials) { - for (int i = 0; i < numberOfTrials; i++) { - moveCars(); - } - } - - private void moveCars() { - for (Car car : this.cars) { - moveIfPossible(car); - } - new OutputView(this.cars); // TODO: 결과화면을 여기서 생성하는 것이 어색한데 문제 없을지 궁금합니다. - } - - private void moveIfPossible(Car car) { - if (moveIndicator.canMove(randomNumberGenerator)) { - car.move(); - } - } -} diff --git a/src/main/java/step2/utils/MoveIndicator.java b/src/main/java/step2/utils/MoveIndicator.java deleted file mode 100644 index 28386e49a78..00000000000 --- a/src/main/java/step2/utils/MoveIndicator.java +++ /dev/null @@ -1,13 +0,0 @@ -package step2.utils; - -public class MoveIndicator { - private final static int MOVE_CRITERION = 4; - - public boolean canMove(RandomNumberGenerator generator) { - final int randomNumber = generator.getRandomNumber(); - if (randomNumber >= MOVE_CRITERION) { - return true; - } - return false; - } -} From 48612a79b236b6ce8843ef654fce322bdec94f5b Mon Sep 17 00:00:00 2001 From: 1nteger Date: Wed, 19 Jun 2019 05:01:33 +0900 Subject: [PATCH 27/27] =?UTF-8?q?feedback=20#step2=20-=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20//TODO=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/step2/CarRaceTest.java | 11 +++++++++++ src/test/java/step2/CarTest.java | 9 +++++---- 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 src/test/java/step2/CarRaceTest.java diff --git a/src/test/java/step2/CarRaceTest.java b/src/test/java/step2/CarRaceTest.java new file mode 100644 index 00000000000..3db65921ef5 --- /dev/null +++ b/src/test/java/step2/CarRaceTest.java @@ -0,0 +1,11 @@ +package step2; + +import org.junit.jupiter.api.Test; + +public class CarRaceTest { + + @Test + void 입력된_값의_유효성검증이_유효하다() { + // TODO + } +} diff --git a/src/test/java/step2/CarTest.java b/src/test/java/step2/CarTest.java index ba6dcda663e..ba649b73b7a 100644 --- a/src/test/java/step2/CarTest.java +++ b/src/test/java/step2/CarTest.java @@ -23,19 +23,20 @@ public class CarTest { @Test void 입력된_숫자만큼_자동차가_생성된다() { - // TODO + //TODO } @Test void 자동차는_랜덤숫자가_4이상인_경우만_이동한다() { - // RaceExecutor 리팩토링 후 작성 예정 + //TODO } @ParameterizedTest @ValueSource(ints = {1, 2, 3, 4, 5}) - void 자동차가_주어진_거리만큼_이동한다(int numberOfMoves) { + void 자동차가_이동기준을_통과한_횟수만큼_이동한다(int numberOfMoves) { + final int aboveMoveCriterionNumber = 5; for (int i = 0; i < numberOfMoves; i++) { - car.move(); + car.move(aboveMoveCriterionNumber); } assertThat(car.getPosition()).isEqualTo(numberOfMoves); }