From 42161ef93750022a1d48c4cf8fac76bef673eb69 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:05:16 +0900 Subject: [PATCH 01/16] =?UTF-8?q?Docs:=20=EA=B8=B0=EB=8A=A5=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- READEME.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 READEME.md diff --git a/READEME.md b/READEME.md new file mode 100644 index 00000000..1da27e19 --- /dev/null +++ b/READEME.md @@ -0,0 +1,24 @@ +# 자동차 경주 게임 + +## 기능 요구사항 +- [ ] 자동차는 이름을 가지고 있다. +- [ ] 자동차는 움직일 수 있다. +- [ ] 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. +- [ ] n대의 자동차가 참여할 수 있다. +- [ ] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. +- [ ] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. + +## 새로운 프로그래밍 요구사항 +- [ ] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. +- [ ] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. + +## 자바 코드 컨벤션(Java Style Guide) +- [ ] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. + - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. + - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다. +- [ ] 3항 연산자를 쓰지 않는다. +- [ ] else 예약어를 쓰지 않는다. +- [ ] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. + - 힌트: if문에서 값을 반환하는 방식으로 구현하면 else 예약어를 사용하지 않아도 된다. +- [ ] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. +- [ ] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file From 4b076bd5692b2d97e9367a51f4ae63710ffcce7b Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:06:32 +0900 Subject: [PATCH 02/16] =?UTF-8?q?Feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingCar.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/RacingCar.java diff --git a/src/main/java/RacingCar.java b/src/main/java/RacingCar.java new file mode 100644 index 00000000..6f20b650 --- /dev/null +++ b/src/main/java/RacingCar.java @@ -0,0 +1,14 @@ +class RacingCar { + public String name; + public int distance; + + public RacingCar(String name) { + this.name = name; + this.distance = 0; + } + + public void move() { + if(( (int) (Math.random() * 10) >= 4)) + distance += 1; + } +} \ No newline at end of file From 71fa8d4fa7d4ef9013997e666cdddcdc28e3b7d2 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:37:23 +0900 Subject: [PATCH 03/16] =?UTF-8?q?Feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EA=B2=BD=EC=A3=BC=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++++++++++++++++++++++ src/main/java/CarRace.java | 26 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 README.md create mode 100644 src/main/java/CarRace.java diff --git a/README.md b/README.md new file mode 100644 index 00000000..edb8f437 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# 자동차 경주 게임 + +## 기능 요구사항 +- [x] 자동차는 이름을 가지고 있다. +- [x] 자동차는 움직일 수 있다. +- [x] 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. +- [x] n대의 자동차가 참여할 수 있다. +- [x] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. +- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. + +## 새로운 프로그래밍 요구사항 +- [ ] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. +- [ ] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. + +## 자바 코드 컨벤션(Java Style Guide) +- [ ] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. + - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. + - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다. +- [ ] 3항 연산자를 쓰지 않는다. +- [ ] else 예약어를 쓰지 않는다. +- [ ] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. + - 힌트: if문에서 값을 반환하는 방식으로 구현하면 else 예약어를 사용하지 않아도 된다. +- [ ] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. +- [ ] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java new file mode 100644 index 00000000..42523827 --- /dev/null +++ b/src/main/java/CarRace.java @@ -0,0 +1,26 @@ +public class CarRace { + public RacingCar[] cars; + private final int rounds; + + public CarRace(int car_num, int round_num) { + rounds = round_num; + cars = new RacingCar[car_num]; + for (int i = 0; i < car_num; i++) { + cars[i] = new RacingCar("자동차" + (i+1)); + } + } + + public void setCarName(int number, String name) { + cars[number].name = name; + } + + public void runRace() { + for(int i = 0; i < rounds; i++) + moveAllCars(); + } + + private void moveAllCars() { + for(RacingCar car : cars) + car.move(); + } +} \ No newline at end of file From 6b51467f06d28e27bc660866425193a8199a0783 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:38:16 +0900 Subject: [PATCH 04/16] =?UTF-8?q?Feat:=20=EA=B2=BD=EC=A3=BC=20=EC=9A=B0?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=20=EC=B0=BE=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=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 --- README.md | 2 +- src/main/java/CarRace.java | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index edb8f437..c8040eba 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - [x] 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. - [x] n대의 자동차가 참여할 수 있다. - [x] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. -- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. +- [x] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. ## 새로운 프로그래밍 요구사항 - [ ] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index 42523827..44428c97 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -1,6 +1,10 @@ +import java.util.ArrayList; + public class CarRace { public RacingCar[] cars; private final int rounds; + private int winnerIndex; + private final ArrayList coWinners = new ArrayList<>(); public CarRace(int car_num, int round_num) { rounds = round_num; @@ -23,4 +27,32 @@ private void moveAllCars() { for(RacingCar car : cars) car.move(); } + + private int findWinningDistance() { + winnerIndex = 0; + for(int i = 0; i < cars.length; i++) + updateWinner(i); + return cars[winnerIndex].distance; + } + + private void updateWinner(int number) { + if (number < cars.length - 1 && cars[number].distance < cars[number + 1].distance) + winnerIndex = number + 1; + } + + private void findAllWinners(int number, int winning_distance) { + if(cars[number].distance == winning_distance) + coWinners.add(number); + } + + public void displayAllWinners() { + int winning_distance = findWinningDistance(); + + for(int i = 0; i < cars.length; i++) + findAllWinners(i, winning_distance); + + System.out.println("Winner:"); + for(int coWinnerIndex : coWinners) + System.out.println(cars[coWinnerIndex].name); + } } \ No newline at end of file From b59021e1bae8eccff7af6793c761798c7b966473 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:39:02 +0900 Subject: [PATCH 05/16] =?UTF-8?q?Test:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EA=B2=BD=EC=A3=BC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- READEME.md | 24 -------------------- README.md | 4 ++-- src/test/java/CarRaceTest.java | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 26 deletions(-) delete mode 100644 READEME.md create mode 100644 src/test/java/CarRaceTest.java diff --git a/READEME.md b/READEME.md deleted file mode 100644 index 1da27e19..00000000 --- a/READEME.md +++ /dev/null @@ -1,24 +0,0 @@ -# 자동차 경주 게임 - -## 기능 요구사항 -- [ ] 자동차는 이름을 가지고 있다. -- [ ] 자동차는 움직일 수 있다. -- [ ] 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. -- [ ] n대의 자동차가 참여할 수 있다. -- [ ] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. -- [ ] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. - -## 새로운 프로그래밍 요구사항 -- [ ] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. -- [ ] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. - -## 자바 코드 컨벤션(Java Style Guide) -- [ ] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. - - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. - - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다. -- [ ] 3항 연산자를 쓰지 않는다. -- [ ] else 예약어를 쓰지 않는다. -- [ ] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. - - 힌트: if문에서 값을 반환하는 방식으로 구현하면 else 예약어를 사용하지 않아도 된다. -- [ ] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. -- [ ] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file diff --git a/README.md b/README.md index c8040eba..160207eb 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ - [x] 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다. ## 새로운 프로그래밍 요구사항 -- [ ] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. -- [ ] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. +- [x] 자동차가 움직이는 기능이 의도대로 동작하는지 테스트한다. +- [x] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. ## 자바 코드 컨벤션(Java Style Guide) - [ ] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java new file mode 100644 index 00000000..9ce0ab7f --- /dev/null +++ b/src/test/java/CarRaceTest.java @@ -0,0 +1,41 @@ +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class CarRaceTest { + int car_num = 15; + int round_num = 10; + CarRace carRace = new CarRace(car_num, round_num); + + @Test + @DisplayName("자동차_이름_정하기") + public void 자동차_이름_정하기() { + for(int i = 0; i < car_num; i++) { + carRace.setCarName(i, "푸앙이차" + (i+1)); + + String actual = carRace.cars[i].name; + String expected = "푸앙이차" + (i+1); + + assertThat(actual) + .isEqualTo(expected); + } + } + + @Test + @DisplayName("자동차_경주_시작하고_우승자_찾기") + public void 자동차_경주_시작하고_우승자_찾기() { + carRace.runRace(); + carRace.displayAllWinners(); + } + + @Test + @DisplayName("자동차_이름_직접_정해서_경주하고_우승자_찾기") + public void 자동차_이름_직접_정해서_경주하고_우승자_찾기() { + for(int i = 0; i < car_num; i++) { + carRace.setCarName(i, "푸앙이차" + (i + 1)); + } + carRace.runRace(); + carRace.displayAllWinners(); + } +} \ No newline at end of file From e5907b1771fa88ecfd371df01249f848163ab649 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Thu, 3 Oct 2024 14:39:57 +0900 Subject: [PATCH 06/16] =?UTF-8?q?Docs:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 160207eb..b015cc73 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,12 @@ - [x] 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다. ## 자바 코드 컨벤션(Java Style Guide) -- [ ] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. +- [x] indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다. - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다. -- [ ] 3항 연산자를 쓰지 않는다. -- [ ] else 예약어를 쓰지 않는다. -- [ ] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. +- [x] 3항 연산자를 쓰지 않는다. +- [x] else 예약어를 쓰지 않는다. +- [x] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. - 힌트: if문에서 값을 반환하는 방식으로 구현하면 else 예약어를 사용하지 않아도 된다. -- [ ] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. -- [ ] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file +- [x] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. +- [x] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file From 5173d2e869e56d1c4205380746eb3a94d215c91a Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sun, 6 Oct 2024 16:10:44 +0900 Subject: [PATCH 07/16] =?UTF-8?q?Refactor:=20camelCase=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CarRace.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index 44428c97..5ec3799f 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -6,10 +6,10 @@ public class CarRace { private int winnerIndex; private final ArrayList coWinners = new ArrayList<>(); - public CarRace(int car_num, int round_num) { - rounds = round_num; - cars = new RacingCar[car_num]; - for (int i = 0; i < car_num; i++) { + public CarRace(int carNum, int roundNum) { + rounds = roundNum; + cars = new RacingCar[carNum]; + for (int i = 0; i < carNum; i++) { cars[i] = new RacingCar("자동차" + (i+1)); } } @@ -40,16 +40,16 @@ private void updateWinner(int number) { winnerIndex = number + 1; } - private void findAllWinners(int number, int winning_distance) { - if(cars[number].distance == winning_distance) + private void findAllWinners(int number, int winningDistance) { + if(cars[number].distance == winningDistance) coWinners.add(number); } public void displayAllWinners() { - int winning_distance = findWinningDistance(); + int winningDistance = findWinningDistance(); for(int i = 0; i < cars.length; i++) - findAllWinners(i, winning_distance); + findAllWinners(i, winningDistance); System.out.println("Winner:"); for(int coWinnerIndex : coWinners) From b25e0ea4b5294313092063194d13051e0b48e4c9 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 12 Oct 2024 15:05:06 +0900 Subject: [PATCH 08/16] =?UTF-8?q?Refactor:=20=ED=94=BC=EB=93=9C=EB=B0=B1?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 47 +++++++++++++++++++++++++++++++++- src/main/java/CarRace.java | 32 ++++++++++------------- src/main/java/RacingCar.java | 15 ++++++++--- src/test/java/CarRaceTest.java | 25 +----------------- 4 files changed, 73 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index b015cc73..d64d1377 100644 --- a/README.md +++ b/README.md @@ -21,4 +21,49 @@ - [x] else 예약어를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. - 힌트: if문에서 값을 반환하는 방식으로 구현하면 else 예약어를 사용하지 않아도 된다. - [x] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. -- [x] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. \ No newline at end of file +- [x] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. + +## 기능 요구사항 +- [] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. +- [] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +- [] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. +- [] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- [] 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. +- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. + +- 실행 결과 + +위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. +경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). +neo,brie,brown +시도할 회수는 몇회인가요? +5 + +실행 결과 +neo : - +brie : - +brown : - + +neo : -- +brie : - +brown : -- + +neo : --- +brie : -- +brown : --- + +neo : ---- +brie : --- +brown : ---- + +neo : ----- +brie : ---- +brown : ----- + +neo : ----- +brie : ---- +brown : ----- + +neo, brown가 최종 우승했습니다. + +- [] 메인 메서드를 추가하여 실행 가능한 애플리케이션으로 만든다. \ No newline at end of file diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index 5ec3799f..65cbae52 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -1,23 +1,19 @@ import java.util.ArrayList; +import java.util.List; public class CarRace { - public RacingCar[] cars; + public List cars = new ArrayList<>(); private final int rounds; private int winnerIndex; - private final ArrayList coWinners = new ArrayList<>(); + private final List coWinners = new ArrayList<>(); - public CarRace(int carNum, int roundNum) { - rounds = roundNum; - cars = new RacingCar[carNum]; + public CarRace(int carNum, final int rounds) { + this.rounds = rounds; for (int i = 0; i < carNum; i++) { - cars[i] = new RacingCar("자동차" + (i+1)); + cars.add(new RacingCar("자동차" + (i+1))); } } - public void setCarName(int number, String name) { - cars[number].name = name; - } - public void runRace() { for(int i = 0; i < rounds; i++) moveAllCars(); @@ -30,29 +26,29 @@ private void moveAllCars() { private int findWinningDistance() { winnerIndex = 0; - for(int i = 0; i < cars.length; i++) + for(int i = 0; i < cars.size(); i++) updateWinner(i); - return cars[winnerIndex].distance; + return cars.get(winnerIndex).getDistance(); } private void updateWinner(int number) { - if (number < cars.length - 1 && cars[number].distance < cars[number + 1].distance) + if (number < cars.size() - 1 && cars.get(number).getDistance() < cars.get(number+1).getDistance()) winnerIndex = number + 1; } - private void findAllWinners(int number, int winningDistance) { - if(cars[number].distance == winningDistance) + private void updateAllWinners(int number, int winningDistance) { + if(cars.get(number).getDistance() == winningDistance) coWinners.add(number); } public void displayAllWinners() { int winningDistance = findWinningDistance(); - for(int i = 0; i < cars.length; i++) - findAllWinners(i, winningDistance); + for(int i = 0; i < cars.size(); i++) + updateAllWinners(i, winningDistance); System.out.println("Winner:"); for(int coWinnerIndex : coWinners) - System.out.println(cars[coWinnerIndex].name); + System.out.println(cars.get(coWinnerIndex).getName()); } } \ No newline at end of file diff --git a/src/main/java/RacingCar.java b/src/main/java/RacingCar.java index 6f20b650..37fa7607 100644 --- a/src/main/java/RacingCar.java +++ b/src/main/java/RacingCar.java @@ -1,12 +1,21 @@ -class RacingCar { - public String name; - public int distance; +public class RacingCar { + + private final String name; + private int distance; public RacingCar(String name) { this.name = name; this.distance = 0; } + public String getName() { + return name; + } + + public int getDistance() { + return distance; + } + public void move() { if(( (int) (Math.random() * 10) >= 4)) distance += 1; diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index 9ce0ab7f..14918a1e 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -4,38 +4,15 @@ import org.junit.jupiter.api.Test; public class CarRaceTest { + int car_num = 15; int round_num = 10; CarRace carRace = new CarRace(car_num, round_num); - @Test - @DisplayName("자동차_이름_정하기") - public void 자동차_이름_정하기() { - for(int i = 0; i < car_num; i++) { - carRace.setCarName(i, "푸앙이차" + (i+1)); - - String actual = carRace.cars[i].name; - String expected = "푸앙이차" + (i+1); - - assertThat(actual) - .isEqualTo(expected); - } - } - @Test @DisplayName("자동차_경주_시작하고_우승자_찾기") public void 자동차_경주_시작하고_우승자_찾기() { carRace.runRace(); carRace.displayAllWinners(); } - - @Test - @DisplayName("자동차_이름_직접_정해서_경주하고_우승자_찾기") - public void 자동차_이름_직접_정해서_경주하고_우승자_찾기() { - for(int i = 0; i < car_num; i++) { - carRace.setCarName(i, "푸앙이차" + (i + 1)); - } - carRace.runRace(); - carRace.displayAllWinners(); - } } \ No newline at end of file From c2a2a4df012d22fe4204ef89c7a2385d50aeba4e Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 03:06:16 +0900 Subject: [PATCH 09/16] =?UTF-8?q?Refactor:=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 --- src/main/java/CarRace.java | 9 +++++---- src/main/java/RacingCar.java | 1 - src/main/java/main.java | 13 +++++++++++++ src/test/java/CarRaceTest.java | 7 ++++--- 5 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 src/main/java/main.java diff --git a/README.md b/README.md index d64d1377..46bda2ae 100644 --- a/README.md +++ b/README.md @@ -24,12 +24,9 @@ - [x] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. ## 기능 요구사항 -- [] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. - [] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. - [] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. - [] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. -- [] 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다. -- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. - 실행 결과 diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index 65cbae52..3ea7efe9 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -1,4 +1,5 @@ import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class CarRace { @@ -7,11 +8,11 @@ public class CarRace { private int winnerIndex; private final List coWinners = new ArrayList<>(); - public CarRace(int carNum, final int rounds) { + public CarRace(final int rounds, String carNames) { this.rounds = rounds; - for (int i = 0; i < carNum; i++) { - cars.add(new RacingCar("자동차" + (i+1))); - } + Arrays.stream(carNames.split(",")) + .map(RacingCar::new) + .forEach(cars::add); } public void runRace() { diff --git a/src/main/java/RacingCar.java b/src/main/java/RacingCar.java index 37fa7607..55b884a3 100644 --- a/src/main/java/RacingCar.java +++ b/src/main/java/RacingCar.java @@ -1,5 +1,4 @@ public class RacingCar { - private final String name; private int distance; diff --git a/src/main/java/main.java b/src/main/java/main.java new file mode 100644 index 00000000..f5a03dbc --- /dev/null +++ b/src/main/java/main.java @@ -0,0 +1,13 @@ +import java.util.Scanner; + +public class main { + public static void main(String[] args) { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"); + Scanner carNames = new Scanner(System.in); + + System.out.println("시도할 회수는 몇회인가요?"); + Scanner rounds = new Scanner(System.in); + + } + +} diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index 14918a1e..25f6d628 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -5,9 +5,10 @@ public class CarRaceTest { - int car_num = 15; - int round_num = 10; - CarRace carRace = new CarRace(car_num, round_num); + int carNum = 15; + int roundNum = 10; + String carNames = "neo,brie,brown"; + CarRace carRace = new CarRace(roundNum, carNames); @Test @DisplayName("자동차_경주_시작하고_우승자_찾기") From a83f8049833d6f493a655e45f09568c59d4b693c Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 03:44:07 +0900 Subject: [PATCH 10/16] =?UTF-8?q?Refactor:=20WinningIndex=20=ED=83=90?= =?UTF-8?q?=EC=83=89=20=EB=A1=9C=EC=A7=81=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/CarRace.java | 16 +++++----------- src/test/java/CarRaceTest.java | 1 - 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index 3ea7efe9..a4b1b2e2 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -3,9 +3,8 @@ import java.util.List; public class CarRace { - public List cars = new ArrayList<>(); + private final List cars = new ArrayList<>(); private final int rounds; - private int winnerIndex; private final List coWinners = new ArrayList<>(); public CarRace(final int rounds, String carNames) { @@ -26,15 +25,10 @@ private void moveAllCars() { } private int findWinningDistance() { - winnerIndex = 0; - for(int i = 0; i < cars.size(); i++) - updateWinner(i); - return cars.get(winnerIndex).getDistance(); - } - - private void updateWinner(int number) { - if (number < cars.size() - 1 && cars.get(number).getDistance() < cars.get(number+1).getDistance()) - winnerIndex = number + 1; + return cars.stream() + .mapToInt(RacingCar::getDistance) + .max() + .orElse(0); } private void updateAllWinners(int number, int winningDistance) { diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index 25f6d628..ceec5227 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -5,7 +5,6 @@ public class CarRaceTest { - int carNum = 15; int roundNum = 10; String carNames = "neo,brie,brown"; CarRace carRace = new CarRace(roundNum, carNames); From 07f804be4f6e5aba14e571b0009ef0a61e349a24 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 04:14:42 +0900 Subject: [PATCH 11/16] =?UTF-8?q?Refactor:=20findWinner=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=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/CarRace.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index a4b1b2e2..ad6e9f27 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -5,7 +5,7 @@ public class CarRace { private final List cars = new ArrayList<>(); private final int rounds; - private final List coWinners = new ArrayList<>(); + private final List coWinners = new ArrayList<>(); public CarRace(final int rounds, String carNames) { this.rounds = rounds; @@ -31,19 +31,17 @@ private int findWinningDistance() { .orElse(0); } - private void updateAllWinners(int number, int winningDistance) { - if(cars.get(number).getDistance() == winningDistance) - coWinners.add(number); + private void updateAllWinners(int winningDistance) { + cars.stream() + .filter(c -> c.getDistance() == winningDistance) + .forEach(c -> coWinners.add(c.getName())); } public void displayAllWinners() { int winningDistance = findWinningDistance(); - - for(int i = 0; i < cars.size(); i++) - updateAllWinners(i, winningDistance); + updateAllWinners(winningDistance); System.out.println("Winner:"); - for(int coWinnerIndex : coWinners) - System.out.println(cars.get(coWinnerIndex).getName()); + coWinners.forEach(System.out::println); } } \ No newline at end of file From ac1c7586edf40c83622babb8963a121f5c00ebea Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 05:02:52 +0900 Subject: [PATCH 12/16] =?UTF-8?q?Test:=20coWinner=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A1=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/CarRace.java | 27 +++++++++++++++++++++------ src/main/java/RacingCar.java | 4 ++-- src/test/java/CarRaceTest.java | 19 +++++++++++++------ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index ad6e9f27..a2517ab0 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -1,10 +1,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Random; public class CarRace { - private final List cars = new ArrayList<>(); private final int rounds; + private final List cars = new ArrayList<>(); private final List coWinners = new ArrayList<>(); public CarRace(final int rounds, String carNames) { @@ -14,14 +15,19 @@ public CarRace(final int rounds, String carNames) { .forEach(cars::add); } - public void runRace() { + int getRandNum() { + Random random = new Random(); + return random.nextInt(1, 11); + } + + public void runRace(int randNum) { for(int i = 0; i < rounds; i++) - moveAllCars(); + moveAllCars(randNum); } - private void moveAllCars() { + private void moveAllCars(int randNum) { for(RacingCar car : cars) - car.move(); + car.move(randNum); } private int findWinningDistance() { @@ -31,10 +37,19 @@ private int findWinningDistance() { .orElse(0); } - private void updateAllWinners(int winningDistance) { + public List getWinnersName() { + return updateAllWinners(findWinningDistance()); + } + + private List updateAllWinners(int winningDistance) { cars.stream() .filter(c -> c.getDistance() == winningDistance) .forEach(c -> coWinners.add(c.getName())); + return coWinners; + } + + public List getCoWinners() { + return coWinners; } public void displayAllWinners() { diff --git a/src/main/java/RacingCar.java b/src/main/java/RacingCar.java index 55b884a3..e5d57667 100644 --- a/src/main/java/RacingCar.java +++ b/src/main/java/RacingCar.java @@ -15,8 +15,8 @@ public int getDistance() { return distance; } - public void move() { - if(( (int) (Math.random() * 10) >= 4)) + public void move(int randNum) { + if(randNum >= 4) distance += 1; } } \ No newline at end of file diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index ceec5227..6dc38d64 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -1,18 +1,25 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class CarRaceTest { - int roundNum = 10; - String carNames = "neo,brie,brown"; - CarRace carRace = new CarRace(roundNum, carNames); + final int roundNum = 10; + final String carNames = "neo,brie,brown"; + final CarRace carRace = new CarRace(roundNum, carNames); @Test - @DisplayName("자동차_경주_시작하고_우승자_찾기") - public void 자동차_경주_시작하고_우승자_찾기() { - carRace.runRace(); + @DisplayName("자동차_경주_우승자_찾기") + public void 자동차_경주_우승자_찾기() { + carRace.runRace(carRace.getRandNum()); carRace.displayAllWinners(); + + String expected = carRace.getWinnersName().toString(); + String actual = carRace.getCoWinners().toString(); + + assertThat(actual) + .isEqualTo(expected); } } \ No newline at end of file From b6fd5039fff6944991b97ae270c0f768e3e66dc3 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 05:44:51 +0900 Subject: [PATCH 13/16] =?UTF-8?q?Test:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- src/main/java/CarRace.java | 38 ++++++++++++++++++++-------------- src/test/java/CarRaceTest.java | 35 +++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index a2517ab0..b062fd48 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -15,19 +15,35 @@ public CarRace(final int rounds, String carNames) { .forEach(cars::add); } - int getRandNum() { - Random random = new Random(); - return random.nextInt(1, 11); + public int getDistance(int index) { + return cars.get(index).getDistance(); + } + + public List getWinnersName() { + return updateAllWinners(findWinningDistance()); } - public void runRace(int randNum) { - for(int i = 0; i < rounds; i++) - moveAllCars(randNum); + public List getCoWinners() { + return coWinners; } - private void moveAllCars(int randNum) { + public void carMove(int number) { for(RacingCar car : cars) + car.move(number); + } + + public void runRace() { + for (int i = 0; i < rounds; i++) { + moveAllCars(); + } + } + + private void moveAllCars() { + Random random = new Random(); + for(RacingCar car : cars) { + int randNum = random.nextInt(1, 11); car.move(randNum); + } } private int findWinningDistance() { @@ -37,10 +53,6 @@ private int findWinningDistance() { .orElse(0); } - public List getWinnersName() { - return updateAllWinners(findWinningDistance()); - } - private List updateAllWinners(int winningDistance) { cars.stream() .filter(c -> c.getDistance() == winningDistance) @@ -48,10 +60,6 @@ private List updateAllWinners(int winningDistance) { return coWinners; } - public List getCoWinners() { - return coWinners; - } - public void displayAllWinners() { int winningDistance = findWinningDistance(); updateAllWinners(winningDistance); diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index 6dc38d64..64ebe54b 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -1,19 +1,18 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class CarRaceTest { - final int roundNum = 10; final String carNames = "neo,brie,brown"; - final CarRace carRace = new CarRace(roundNum, carNames); @Test @DisplayName("자동차_경주_우승자_찾기") public void 자동차_경주_우승자_찾기() { - carRace.runRace(carRace.getRandNum()); + final int roundNum = 10; + final CarRace carRace = new CarRace(roundNum, carNames); + carRace.runRace(); carRace.displayAllWinners(); String expected = carRace.getWinnersName().toString(); @@ -22,4 +21,32 @@ public class CarRaceTest { assertThat(actual) .isEqualTo(expected); } + + @Test + @DisplayName("숫자_4이상일_때_자동차_경주_테스트") + public void 숫자_4이상일_때_자동차_경주_테스트() { + final int roundNum = 1; + final CarRace carRace = new CarRace(roundNum, carNames); + carRace.carMove(4); + + int expected = 1; + int actual = carRace.getDistance(2); + + assertThat(actual) + .isEqualTo(expected); + } + + @Test + @DisplayName("숫자_3이하일_때_자동차_경주_테스트") + public void 숫자_3이하일_때_자동차_경주_테스트() { + final int roundNum = 1; + final CarRace carRace = new CarRace(roundNum, carNames); + carRace.carMove(3); + + int expected = 0; + int actual = carRace.getDistance(2); + + assertThat(actual) + .isEqualTo(expected); + } } \ No newline at end of file From 46499162938bfd27f7b984dc6756e2c7c7cc12ec Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 06:16:51 +0900 Subject: [PATCH 14/16] =?UTF-8?q?Feat:=20main=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EA=B2=BD=EC=A3=BC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/CarRace.java | 13 +++++-------- src/main/java/main.java | 15 +++++++++++++-- src/test/java/CarRaceTest.java | 1 - 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 46bda2ae..d905f683 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ - [x] 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. ## 기능 요구사항 -- [] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +- [x] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. - [] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. -- [] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- [x] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. - 실행 결과 diff --git a/src/main/java/CarRace.java b/src/main/java/CarRace.java index b062fd48..01cbdb23 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/CarRace.java @@ -33,9 +33,12 @@ public void carMove(int number) { } public void runRace() { + System.out.println("실행 결과"); for (int i = 0; i < rounds; i++) { moveAllCars(); } + int winningDistance = findWinningDistance(); + updateAllWinners(winningDistance); } private void moveAllCars() { @@ -43,7 +46,9 @@ private void moveAllCars() { for(RacingCar car : cars) { int randNum = random.nextInt(1, 11); car.move(randNum); + System.out.println(car.getName() + " : " + "-".repeat(car.getDistance())); } + System.out.println(" "); } private int findWinningDistance() { @@ -59,12 +64,4 @@ private List updateAllWinners(int winningDistance) { .forEach(c -> coWinners.add(c.getName())); return coWinners; } - - public void displayAllWinners() { - int winningDistance = findWinningDistance(); - updateAllWinners(winningDistance); - - System.out.println("Winner:"); - coWinners.forEach(System.out::println); - } } \ No newline at end of file diff --git a/src/main/java/main.java b/src/main/java/main.java index f5a03dbc..94889ed6 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,12 +1,23 @@ +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class main { public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"); - Scanner carNames = new Scanner(System.in); + String carNames = scanner.nextLine(); System.out.println("시도할 회수는 몇회인가요?"); - Scanner rounds = new Scanner(System.in); + int roundNum = scanner.nextInt(); + + final CarRace carRace = new CarRace(roundNum, carNames); + carRace.runRace(); + + List winners = carRace.getCoWinners(); + String result = String.join(", ", winners); + System.out.println(result + "가 최종 우승했습니다."); } diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index 64ebe54b..bdd1a238 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -13,7 +13,6 @@ public class CarRaceTest { final int roundNum = 10; final CarRace carRace = new CarRace(roundNum, carNames); carRace.runRace(); - carRace.displayAllWinners(); String expected = carRace.getWinnersName().toString(); String actual = carRace.getCoWinners().toString(); From 4050ec36a019a14335e67855ef40802f26f74a44 Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 06:43:13 +0900 Subject: [PATCH 15/16] =?UTF-8?q?Feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EA=B8=B8=EC=9D=B4=20=EC=A0=9C=ED=95=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/main.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d905f683..8da45ce1 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ ## 기능 요구사항 - [x] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. -- [] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. +- [x] 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다. - [x] 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. - 실행 결과 @@ -63,4 +63,4 @@ brown : ----- neo, brown가 최종 우승했습니다. -- [] 메인 메서드를 추가하여 실행 가능한 애플리케이션으로 만든다. \ No newline at end of file +- [x] 메인 메서드를 추가하여 실행 가능한 애플리케이션으로 만든다. \ No newline at end of file diff --git a/src/main/java/main.java b/src/main/java/main.java index 94889ed6..5f9b5ab9 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,4 +1,4 @@ -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -6,8 +6,14 @@ public class main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분"); + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분): "); String carNames = scanner.nextLine(); + while (Arrays.stream(carNames.split(",")) + .anyMatch(s -> s.length() >= 6)) + { + System.out.println("이름은 5자 이하만 가능합니다."); + carNames = scanner.nextLine(); + } System.out.println("시도할 회수는 몇회인가요?"); int roundNum = scanner.nextInt(); From 1f7935599324e91bac735fd7c6f4c3d7e42da9be Mon Sep 17 00:00:00 2001 From: csh3424 Date: Sat, 26 Oct 2024 07:12:51 +0900 Subject: [PATCH 16/16] =?UTF-8?q?Refactor:=20MVC=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 15 ++++++++++++ src/main/java/{ => domain}/CarRace.java | 4 ++- src/main/java/{ => domain}/RacingCar.java | 2 ++ src/main/java/main.java | 30 ----------------------- src/main/java/view/InputView.java | 27 ++++++++++++++++++++ src/main/java/view/ResultView.java | 11 +++++++++ src/test/java/CarRaceTest.java | 3 ++- 7 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 src/main/java/Application.java rename src/main/java/{ => domain}/CarRace.java (96%) rename src/main/java/{ => domain}/RacingCar.java (95%) delete mode 100644 src/main/java/main.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/ResultView.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..3d42d57b --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,15 @@ +import view.InputView; +import view.ResultView; +import domain.CarRace; + +public class Application { + public static void main(String[] args) { + final var carNames = InputView.getCarNames(); + final var tryCount = InputView.getTryCount(); + + final var racingGame = new CarRace(tryCount, carNames); + racingGame.runRace(); + + ResultView.printWinners(racingGame.getWinners()); + } +} diff --git a/src/main/java/CarRace.java b/src/main/java/domain/CarRace.java similarity index 96% rename from src/main/java/CarRace.java rename to src/main/java/domain/CarRace.java index 01cbdb23..4a5bb94f 100644 --- a/src/main/java/CarRace.java +++ b/src/main/java/domain/CarRace.java @@ -1,3 +1,5 @@ +package domain; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -23,7 +25,7 @@ public List getWinnersName() { return updateAllWinners(findWinningDistance()); } - public List getCoWinners() { + public List getWinners() { return coWinners; } diff --git a/src/main/java/RacingCar.java b/src/main/java/domain/RacingCar.java similarity index 95% rename from src/main/java/RacingCar.java rename to src/main/java/domain/RacingCar.java index e5d57667..04d5e0f0 100644 --- a/src/main/java/RacingCar.java +++ b/src/main/java/domain/RacingCar.java @@ -1,3 +1,5 @@ +package domain; + public class RacingCar { private final String name; private int distance; diff --git a/src/main/java/main.java b/src/main/java/main.java deleted file mode 100644 index 5f9b5ab9..00000000 --- a/src/main/java/main.java +++ /dev/null @@ -1,30 +0,0 @@ -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -public class main { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - - System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분): "); - String carNames = scanner.nextLine(); - while (Arrays.stream(carNames.split(",")) - .anyMatch(s -> s.length() >= 6)) - { - System.out.println("이름은 5자 이하만 가능합니다."); - carNames = scanner.nextLine(); - } - - System.out.println("시도할 회수는 몇회인가요?"); - int roundNum = scanner.nextInt(); - - final CarRace carRace = new CarRace(roundNum, carNames); - carRace.runRace(); - - List winners = carRace.getCoWinners(); - String result = String.join(", ", winners); - System.out.println(result + "가 최종 우승했습니다."); - - } - -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..b5d458ff --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,27 @@ +package view; + +import domain.CarRace; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class InputView { + static Scanner scanner = new Scanner(System.in); + + public static String getCarNames() { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분): "); + String carNames = scanner.nextLine(); + while (Arrays.stream(carNames.split(",")) + .anyMatch(s -> s.length() >= 6)) + { + System.out.println("이름은 5자 이하만 가능합니다."); + carNames = scanner.nextLine(); + } + return carNames; + } + + public static int getTryCount() { + System.out.println("시도할 회수는 몇회인가요?"); + return scanner.nextInt(); + } +} diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java new file mode 100644 index 00000000..9ad601e9 --- /dev/null +++ b/src/main/java/view/ResultView.java @@ -0,0 +1,11 @@ +package view; + +import java.util.List; + +public class ResultView { + public static void printWinners(List winners) { + String result = String.join(", ", winners); + System.out.println(result + "가 최종 우승했습니다."); + } + +} diff --git a/src/test/java/CarRaceTest.java b/src/test/java/CarRaceTest.java index bdd1a238..ca2c79bd 100644 --- a/src/test/java/CarRaceTest.java +++ b/src/test/java/CarRaceTest.java @@ -1,5 +1,6 @@ import static org.assertj.core.api.Assertions.assertThat; +import domain.CarRace; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -15,7 +16,7 @@ public class CarRaceTest { carRace.runRace(); String expected = carRace.getWinnersName().toString(); - String actual = carRace.getCoWinners().toString(); + String actual = carRace.getWinners().toString(); assertThat(actual) .isEqualTo(expected);