From 2582cec307554d1cd318e15d23e6ad11db432f44 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:17:32 +0900 Subject: [PATCH 01/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..dbb508b1e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,15 @@ +## ๐Ÿš€ ๊ธฐ๋Šฅ๋ชฉ๋ก + + +## CAR +- [ ] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ +- [ ] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ +- [ ] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ +- [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, + +## CAR VENUE +- [ ] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜ ๊ด€๋ฆฌ +- [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ + +## RANDOM NUMBER GENERATE +- [ ] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ \ No newline at end of file From 8ab640b91525d39cfaf16b97b35035a41895efdd Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:20:27 +0900 Subject: [PATCH 02/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..e67d5d184 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,18 @@ +## ๐Ÿš€ ๊ธฐ๋Šฅ๋ชฉ๋ก + + +## CAR +- [ ] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ +- [ ] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ +- [ ] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ +- [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, + +## CAR VENUE +- [ ] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜ ๊ด€๋ฆฌ +- [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ + +## RANDOM NUMBER GENERATE +- [ ] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ + +## NUMBER +- [ ] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ From 3533fae34968882e2317493ad71f0df1173c6cd5 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:23:31 +0900 Subject: [PATCH 03/28] feat: create Random Numbber Generate Class --- src/main/java/racingcar/Car.java | 3 +++ src/main/java/racingcar/util/Number.java | 15 +++++++++++++++ src/main/java/racingcar/util/NumberGenerate.java | 6 ++++++ .../java/racingcar/util/RandomNumberGenerate.java | 13 +++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 src/main/java/racingcar/util/Number.java create mode 100644 src/main/java/racingcar/util/NumberGenerate.java create mode 100644 src/main/java/racingcar/util/RandomNumberGenerate.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df9492..502416b7b 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -9,4 +9,7 @@ public Car(String name) { } // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + private void move(int moveInput){ + + } } diff --git a/src/main/java/racingcar/util/Number.java b/src/main/java/racingcar/util/Number.java new file mode 100644 index 000000000..c7fdf79a7 --- /dev/null +++ b/src/main/java/racingcar/util/Number.java @@ -0,0 +1,15 @@ +package racingcar.util; + +public enum Number { + START_NUMBER(0), + LAST_NUMBER(9); + private int number; + + Number(int number) { + this.number = number; + } + + public int getNumber() { + return number; + } +} diff --git a/src/main/java/racingcar/util/NumberGenerate.java b/src/main/java/racingcar/util/NumberGenerate.java new file mode 100644 index 000000000..17dedcbd5 --- /dev/null +++ b/src/main/java/racingcar/util/NumberGenerate.java @@ -0,0 +1,6 @@ +package racingcar.util; + +@FunctionalInterface +public interface NumberGenerate { + int generate(); +} diff --git a/src/main/java/racingcar/util/RandomNumberGenerate.java b/src/main/java/racingcar/util/RandomNumberGenerate.java new file mode 100644 index 000000000..bd55b84ce --- /dev/null +++ b/src/main/java/racingcar/util/RandomNumberGenerate.java @@ -0,0 +1,13 @@ +package racingcar.util; + +import camp.nextstep.edu.missionutils.Randoms; + +import static racingcar.util.Number.*; + +public class RandomNumberGenerate implements NumberGenerate { + + @Override + public int generate() { + return Randoms.pickNumberInRange(START_NUMBER.getNumber(), LAST_NUMBER.getNumber()); + } +} From b2cd25d9e3dcca72303877863b020532290b725d Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:24:57 +0900 Subject: [PATCH 04/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index e67d5d184..6fa0d7ff5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,3 +16,4 @@ ## NUMBER - [ ] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ +- [ ] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ \ No newline at end of file From 2140df27517d9f724f73e34d3dd1d15c07723afc Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:26:09 +0900 Subject: [PATCH 05/28] feat: create Car move method --- docs/README.md | 10 +++++----- src/main/java/racingcar/Car.java | 4 +++- src/main/java/racingcar/util/Number.java | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index 6fa0d7ff5..aaad67228 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,8 +2,8 @@ ## CAR -- [ ] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ -- [ ] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ +- [x] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ +- [x] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ - [ ] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ - [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, @@ -12,8 +12,8 @@ - [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ ## RANDOM NUMBER GENERATE -- [ ] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ +- [x] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ ## NUMBER -- [ ] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ -- [ ] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ \ No newline at end of file +- [x] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ +- [x] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 502416b7b..86af98b3d 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,5 +1,7 @@ package racingcar; +import racingcar.util.Number; + public class Car { private final String name; private int position = 0; @@ -10,6 +12,6 @@ public Car(String name) { // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ private void move(int moveInput){ - + if(moveInput >= Number.STANDARD_NUMBER.getNumber())position++; } } diff --git a/src/main/java/racingcar/util/Number.java b/src/main/java/racingcar/util/Number.java index c7fdf79a7..30b18443c 100644 --- a/src/main/java/racingcar/util/Number.java +++ b/src/main/java/racingcar/util/Number.java @@ -2,7 +2,8 @@ public enum Number { START_NUMBER(0), - LAST_NUMBER(9); + LAST_NUMBER(9), + STANDARD_NUMBER(4); private int number; Number(int number) { From 60daeedf49b9ae371595e9a8088f6c3bfb046a5f Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:28:31 +0900 Subject: [PATCH 06/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index aaad67228..e726752d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,4 +16,10 @@ ## NUMBER - [x] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ -- [x] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ \ No newline at end of file +- [x] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ + +## Message +- [ ] ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ + +## ErrorMessage +- [ ] ์—๋Ÿฌ ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ \ No newline at end of file From 89f1d4e1dbf00797fb8c86064552579b27b5b0a1 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:30:53 +0900 Subject: [PATCH 07/28] feat: create Message Class --- src/main/java/racingcar/Car.java | 9 +++++++++ src/main/java/racingcar/message/Message.java | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/racingcar/message/Message.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 86af98b3d..8ccd7ceea 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -14,4 +14,13 @@ public Car(String name) { private void move(int moveInput){ if(moveInput >= Number.STANDARD_NUMBER.getNumber())position++; } + + @Override + public String toString() { + StringBuilder print = new StringBuilder(name); + return "Car{" + + "name='" + name + '\'' + + ", position=" + position + + '}'; + } } diff --git a/src/main/java/racingcar/message/Message.java b/src/main/java/racingcar/message/Message.java new file mode 100644 index 000000000..fed8ed635 --- /dev/null +++ b/src/main/java/racingcar/message/Message.java @@ -0,0 +1,14 @@ +package racingcar.message; + +public enum Message { + DELIMITER(","), + INFIX(" : "); + private String message; + + Message(String message) { + this.message = message; + } + public String getMessage(){ + return message; + } +} From 341f881bdd289d6428c2ce6f3f7f0ab52bcd6ae5 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:36:30 +0900 Subject: [PATCH 08/28] feat: create Car toString method --- docs/README.md | 2 +- src/main/java/racingcar/Car.java | 17 +++++++++++++---- src/main/java/racingcar/message/Message.java | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index e726752d8..1df014758 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,7 @@ ## CAR - [x] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ - [x] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ -- [ ] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ +- [x] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ - [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, ## CAR VENUE diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 8ccd7ceea..1eada0475 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,7 +1,13 @@ package racingcar; +import racingcar.message.Message; import racingcar.util.Number; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static racingcar.message.Message.*; + public class Car { private final String name; private int position = 0; @@ -18,9 +24,12 @@ private void move(int moveInput){ @Override public String toString() { StringBuilder print = new StringBuilder(name); - return "Car{" + - "name='" + name + '\'' + - ", position=" + position + - '}'; + print.append(INFIX.getMessage()); + appendPosition(print); + return print.toString(); + } + + private void appendPosition(StringBuilder print) { + print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } } diff --git a/src/main/java/racingcar/message/Message.java b/src/main/java/racingcar/message/Message.java index fed8ed635..61e573a06 100644 --- a/src/main/java/racingcar/message/Message.java +++ b/src/main/java/racingcar/message/Message.java @@ -2,7 +2,8 @@ public enum Message { DELIMITER(","), - INFIX(" : "); + INFIX(" : "), + POSITION("-"); private String message; Message(String message) { From 985255eaebe9319e5740394291f214cdbd52761c Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:39:35 +0900 Subject: [PATCH 09/28] feat: test Car toString method --- src/main/java/racingcar/Car.java | 2 +- src/test/java/racingcar/CarTest.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/test/java/racingcar/CarTest.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1eada0475..f229d4856 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -17,7 +17,7 @@ public Car(String name) { } // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - private void move(int moveInput){ + public void move(int moveInput){ if(moveInput >= Number.STANDARD_NUMBER.getNumber())position++; } diff --git a/src/test/java/racingcar/CarTest.java b/src/test/java/racingcar/CarTest.java new file mode 100644 index 000000000..08f53c44b --- /dev/null +++ b/src/test/java/racingcar/CarTest.java @@ -0,0 +1,17 @@ +package racingcar; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CarTest { + @Test + public void printCarPositionTest() throws Exception{ + Car car = new Car("bebe"); + car.move(5); + car.move(4); + car.move(1); + Assertions.assertEquals(car.toString(),"bebe : --"); + } +} \ No newline at end of file From 3379a80ae5062f703e789b9afbb17b8542f7cfe3 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:40:42 +0900 Subject: [PATCH 10/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 1df014758..96695387f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,6 +5,7 @@ - [x] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ - [x] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ - [x] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ +- [ ] 5๊ธ€์ž๋ณด๋‹ค ํฌ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ - [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, ## CAR VENUE From 96466cc3d6c4113c14fa82fd4a3fc74044420157 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:43:57 +0900 Subject: [PATCH 11/28] feat: create ErrorMessage class --- src/main/java/racingcar/Car.java | 8 ++++++++ src/main/java/racingcar/message/ErrorMessage.java | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/racingcar/message/ErrorMessage.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index f229d4856..62f9dcdcd 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -9,13 +9,21 @@ import static racingcar.message.Message.*; public class Car { + private final int maxNameSize = 5; private final String name; private int position = 0; public Car(String name) { + validate(name); this.name = name; } + private void validate(String name) { + if(name.length() > maxNameSize){ + throw new IllegalArgumentException() + } + } + // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ public void move(int moveInput){ if(moveInput >= Number.STANDARD_NUMBER.getNumber())position++; diff --git a/src/main/java/racingcar/message/ErrorMessage.java b/src/main/java/racingcar/message/ErrorMessage.java new file mode 100644 index 000000000..3cd392e52 --- /dev/null +++ b/src/main/java/racingcar/message/ErrorMessage.java @@ -0,0 +1,15 @@ +package racingcar.message; + +public enum ErrorMessage { + CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."); + private final String prefix = "[ERROR]"; + private String message; + + private ErrorMessage(String message) { + this.message = message; + } + + public String getMessage(){ + return prefix + message; + } +} From a46a55366ec2e707a4778bf662a6e71570c28a21 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:46:33 +0900 Subject: [PATCH 12/28] feat: create Car validate method and test --- src/main/java/racingcar/Car.java | 4 +++- src/test/java/racingcar/CarTest.java | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 62f9dcdcd..1437a1849 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,11 +1,13 @@ package racingcar; +import racingcar.message.ErrorMessage; import racingcar.message.Message; import racingcar.util.Number; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static racingcar.message.ErrorMessage.*; import static racingcar.message.Message.*; public class Car { @@ -20,7 +22,7 @@ public Car(String name) { private void validate(String name) { if(name.length() > maxNameSize){ - throw new IllegalArgumentException() + throw new IllegalArgumentException(CAR_NAME_TOO_LONG.getMessage()); } } diff --git a/src/test/java/racingcar/CarTest.java b/src/test/java/racingcar/CarTest.java index 08f53c44b..85dfd6a67 100644 --- a/src/test/java/racingcar/CarTest.java +++ b/src/test/java/racingcar/CarTest.java @@ -14,4 +14,10 @@ public void printCarPositionTest() throws Exception{ car.move(1); Assertions.assertEquals(car.toString(),"bebe : --"); } + + @Test + public void carNameTest() throws Exception{ + org.assertj.core.api.Assertions.assertThatThrownBy(()-> + new Car("ffffff")).isInstanceOf(IllegalArgumentException.class); + } } \ No newline at end of file From 8be95727a6ef5c7a229252b7e21b992f650a54d7 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:53:08 +0900 Subject: [PATCH 13/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index 96695387f..428caa11a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,9 @@ - [ ] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜ ๊ด€๋ฆฌ - [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ +## CAR POSITION OPERATOR +- [ ] ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค์˜ ํ•œ ํ„ด๋‹น ํฌ์ง€์…˜ ๊ฐ’๋“ค ๊ด€๋ฆฌ + ## RANDOM NUMBER GENERATE - [x] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ From a625905609d79951d3627d12f079ae5fc1de8478 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 13:54:33 +0900 Subject: [PATCH 14/28] feat: create CarOperator class --- docs/README.md | 2 +- src/main/java/racingcar/{ => domain}/Car.java | 15 +++++++-------- src/main/java/racingcar/util/CarOperator.java | 19 +++++++++++++++++++ src/test/java/racingcar/CarTest.java | 3 +-- 4 files changed, 28 insertions(+), 11 deletions(-) rename src/main/java/racingcar/{ => domain}/Car.java (72%) create mode 100644 src/main/java/racingcar/util/CarOperator.java diff --git a/docs/README.md b/docs/README.md index 428caa11a..b6613cb48 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,7 +13,7 @@ - [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ ## CAR POSITION OPERATOR -- [ ] ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค์˜ ํ•œ ํ„ด๋‹น ํฌ์ง€์…˜ ๊ฐ’๋“ค ๊ด€๋ฆฌ +- [x] ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค์˜ ํ•œ ํ„ด๋‹น ํฌ์ง€์…˜ ๊ฐ’๋“ค ๊ด€๋ฆฌ ## RANDOM NUMBER GENERATE - [x] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/domain/Car.java similarity index 72% rename from src/main/java/racingcar/Car.java rename to src/main/java/racingcar/domain/Car.java index 1437a1849..b85436a3f 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -1,14 +1,13 @@ -package racingcar; +package racingcar.domain; -import racingcar.message.ErrorMessage; -import racingcar.message.Message; import racingcar.util.Number; import java.util.stream.Collectors; import java.util.stream.IntStream; -import static racingcar.message.ErrorMessage.*; -import static racingcar.message.Message.*; +import static racingcar.message.ErrorMessage.CAR_NAME_TOO_LONG; +import static racingcar.message.Message.INFIX; +import static racingcar.message.Message.POSITION; public class Car { private final int maxNameSize = 5; @@ -21,14 +20,14 @@ public Car(String name) { } private void validate(String name) { - if(name.length() > maxNameSize){ + if (name.length() > maxNameSize) { throw new IllegalArgumentException(CAR_NAME_TOO_LONG.getMessage()); } } // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - public void move(int moveInput){ - if(moveInput >= Number.STANDARD_NUMBER.getNumber())position++; + public void move(int moveInput) { + if (moveInput >= Number.STANDARD_NUMBER.getNumber()) position++; } @Override diff --git a/src/main/java/racingcar/util/CarOperator.java b/src/main/java/racingcar/util/CarOperator.java new file mode 100644 index 000000000..03894577f --- /dev/null +++ b/src/main/java/racingcar/util/CarOperator.java @@ -0,0 +1,19 @@ +package racingcar.util; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class CarOperator { + private final NumberGenerate numberGenerate; + private final int carAmount; + + public CarOperator(NumberGenerate numberGenerate, int carAmount) { + this.numberGenerate = numberGenerate; + this.carAmount = carAmount; + } + + public List tempPosition() { + return IntStream.range(0, carAmount).mapToObj(index -> numberGenerate.generate()).collect(Collectors.toList()); + } +} diff --git a/src/test/java/racingcar/CarTest.java b/src/test/java/racingcar/CarTest.java index 85dfd6a67..b2ee9c307 100644 --- a/src/test/java/racingcar/CarTest.java +++ b/src/test/java/racingcar/CarTest.java @@ -2,8 +2,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import racingcar.domain.Car; class CarTest { @Test From 230b18f3d3a40b1927e6b8f7de63b249b06cabef Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:05:24 +0900 Subject: [PATCH 15/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index b6613cb48..d6448d7ba 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,6 +14,8 @@ ## CAR POSITION OPERATOR - [x] ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค์˜ ํ•œ ํ„ด๋‹น ํฌ์ง€์…˜ ๊ฐ’๋“ค ๊ด€๋ฆฌ +## ROUND +- [ ] ์šฐ์Šน ๋ผ์šด๋“œ์™€ ํ˜„์žฌ ๋ผ์šด๋“œ ๊ด€๋ฆฌ ## RANDOM NUMBER GENERATE - [x] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ From 71754a95dbaf1e57d3787132a1b9ec8c86df2bc4 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:07:31 +0900 Subject: [PATCH 16/28] feat: create Round Class --- src/main/java/racingcar/domain/CarVenue.java | 30 ++++++++++++++++++++ src/main/java/racingcar/domain/Round.java | 21 ++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/racingcar/domain/CarVenue.java create mode 100644 src/main/java/racingcar/domain/Round.java diff --git a/src/main/java/racingcar/domain/CarVenue.java b/src/main/java/racingcar/domain/CarVenue.java new file mode 100644 index 000000000..852d3d9e6 --- /dev/null +++ b/src/main/java/racingcar/domain/CarVenue.java @@ -0,0 +1,30 @@ +package racingcar.domain; + +import racingcar.util.CarOperator; +import racingcar.util.RandomNumberGenerate; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class CarVenue { + private final List cars; + private final CarOperator carOperator; + private final int finalRound; + + + public CarVenue(List cars, int finalRound) { + this.cars = cars; + this.carOperator = new CarOperator(new RandomNumberGenerate(), cars.size()); + this.finalRound = finalRound; + } + + public void moveTurn(){ + List nowMove = carOperator.tempPosition(); + IntStream.range(0, cars.size()).forEach(index -> cars.get(index).move(nowMove.get(index))); + } + public String printTurn(){ + return cars.stream().map(car -> car.toString() + "\n").collect(Collectors.joining()); + } + +} diff --git a/src/main/java/racingcar/domain/Round.java b/src/main/java/racingcar/domain/Round.java new file mode 100644 index 000000000..ee138d214 --- /dev/null +++ b/src/main/java/racingcar/domain/Round.java @@ -0,0 +1,21 @@ +package racingcar.domain; + +public class Round { + private final int finalRound; + private int tempRound = 1; + + public Round(int finalRound) { + this.finalRound = finalRound; + } + + public void next(){ + tempRound++; + } + public void clean(){ + tempRound = 1; + } + public boolean isReachedEnd(){ + if(tempRound == finalRound)return true; + return false; + } +} From 5eac4e96de2ad7a290ea8abb6914b66b75daabd1 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:36:30 +0900 Subject: [PATCH 17/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index d6448d7ba..073abd19f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,4 +28,10 @@ - [ ] ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ ## ErrorMessage -- [ ] ์—๋Ÿฌ ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ \ No newline at end of file +- [ ] ์—๋Ÿฌ ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ + +## View +- [ ] ์ž๋™์ฐจ ์ด๋ฆ„ ์ž…๋ ฅ +- [ ] ์‹œ๋„ํ•  ํšŸ์ˆ˜ ์ž…๋ ฅ +- [ ] ํ•œํ„ด๋‹น ๊ฒฐ๊ณผ ์ถœ๋ ฅ +- [ ] ์šฐ์Šน์ž ์ถœ๋ ฅ \ No newline at end of file From 4e5db3e51367149d37c3556f89bf9e549be677ed Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:40:02 +0900 Subject: [PATCH 18/28] feat: create OutputView, inputView class --- src/main/java/racingcar/domain/Car.java | 8 ++- src/main/java/racingcar/domain/CarVenue.java | 21 ++++++- src/main/java/racingcar/domain/Round.java | 16 +++--- .../java/racingcar/message/ErrorMessage.java | 3 +- src/main/java/racingcar/message/Message.java | 8 ++- src/main/java/racingcar/view/InputView.java | 55 +++++++++++++++++++ src/main/java/racingcar/view/OutputView.java | 19 +++++++ 7 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 src/main/java/racingcar/view/InputView.java create mode 100644 src/main/java/racingcar/view/OutputView.java diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index b85436a3f..b18cafd9e 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -6,8 +6,7 @@ import java.util.stream.IntStream; import static racingcar.message.ErrorMessage.CAR_NAME_TOO_LONG; -import static racingcar.message.Message.INFIX; -import static racingcar.message.Message.POSITION; +import static racingcar.message.Message.*; public class Car { private final int maxNameSize = 5; @@ -41,4 +40,9 @@ public String toString() { private void appendPosition(StringBuilder print) { print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } + + public String getWinnerName(int finalPosition){ + if(finalPosition == position)return name; + return LOSER.getMessage(); + } } diff --git a/src/main/java/racingcar/domain/CarVenue.java b/src/main/java/racingcar/domain/CarVenue.java index 852d3d9e6..f9d05d99d 100644 --- a/src/main/java/racingcar/domain/CarVenue.java +++ b/src/main/java/racingcar/domain/CarVenue.java @@ -1,25 +1,30 @@ package racingcar.domain; +import racingcar.message.Message; import racingcar.util.CarOperator; import racingcar.util.RandomNumberGenerate; import java.util.List; +import java.util.StringJoiner; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static racingcar.message.Message.*; + public class CarVenue { private final List cars; private final CarOperator carOperator; - private final int finalRound; + private final Round round; public CarVenue(List cars, int finalRound) { this.cars = cars; this.carOperator = new CarOperator(new RandomNumberGenerate(), cars.size()); - this.finalRound = finalRound; + this.round = new Round(finalRound); } public void moveTurn(){ + round.next(); List nowMove = carOperator.tempPosition(); IntStream.range(0, cars.size()).forEach(index -> cars.get(index).move(nowMove.get(index))); } @@ -27,4 +32,16 @@ public String printTurn(){ return cars.stream().map(car -> car.toString() + "\n").collect(Collectors.joining()); } + public boolean isEnd(){ + if(round.isFinish()) return true; + return false; + } + public String printWinner(){ + StringBuilder print = new StringBuilder(WINNER.getMessage()); + StringJoiner joiner = new StringJoiner(", "); + cars.stream().map(car -> car.getWinnerName(round.getFinalRound())) + .filter(winOrLose -> !winOrLose.equals(LOSER.getMessage())) + .forEach(joiner::add); + return print.append(joiner).toString(); + } } diff --git a/src/main/java/racingcar/domain/Round.java b/src/main/java/racingcar/domain/Round.java index ee138d214..99915fb5a 100644 --- a/src/main/java/racingcar/domain/Round.java +++ b/src/main/java/racingcar/domain/Round.java @@ -2,20 +2,22 @@ public class Round { private final int finalRound; - private int tempRound = 1; + private int tempRound = 0; public Round(int finalRound) { this.finalRound = finalRound; } - public void next(){ + public void next() { tempRound++; } - public void clean(){ - tempRound = 1; - } - public boolean isReachedEnd(){ - if(tempRound == finalRound)return true; + + public boolean isFinish() { + if (tempRound == finalRound) return true; return false; } + + public int getFinalRound() { + return finalRound; + } } diff --git a/src/main/java/racingcar/message/ErrorMessage.java b/src/main/java/racingcar/message/ErrorMessage.java index 3cd392e52..96a98b361 100644 --- a/src/main/java/racingcar/message/ErrorMessage.java +++ b/src/main/java/racingcar/message/ErrorMessage.java @@ -1,7 +1,8 @@ package racingcar.message; public enum ErrorMessage { - CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."); + CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."), + ROUND_IS_DIGIT("์‹œ๋„ ํšŸ์ˆ˜๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); private final String prefix = "[ERROR]"; private String message; diff --git a/src/main/java/racingcar/message/Message.java b/src/main/java/racingcar/message/Message.java index 61e573a06..6b6ea5c7b 100644 --- a/src/main/java/racingcar/message/Message.java +++ b/src/main/java/racingcar/message/Message.java @@ -3,7 +3,13 @@ public enum Message { DELIMITER(","), INFIX(" : "), - POSITION("-"); + POSITION("-"), + WINNER("์ตœ์ข… ์šฐ์Šน์ž : "), + LOSER(""), + PRINT_INPUT_NAMES("๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.(์ด๋ฆ„์€ ์‰ผํ‘œ(,) ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)"), + PRINT_INPUT_FINAL_ROUND("์‹œ๋„ํ•  ํšŒ์ˆ˜๋Š” ๋ช‡ํšŒ์ธ๊ฐ€์š”?"), + PRINT_OUTPUT("์‹คํ–‰ ๊ฒฐ๊ณผ"); + private String message; Message(String message) { diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 000000000..8b0cb0e37 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,55 @@ +package racingcar.view; + +import camp.nextstep.edu.missionutils.Console; +import racingcar.domain.Car; +import racingcar.message.ErrorMessage; +import racingcar.message.Message; + +import java.util.ArrayList; +import java.util.List; + +import static racingcar.message.ErrorMessage.*; +import static racingcar.message.Message.*; + +public class InputView extends OutputView{ + public List inputCar(){ + printCarsName(); + String input = Console.readLine(); + String[] splitInput = input.split(DELIMITER.getMessage()); + List cars = new ArrayList<>(); + makeCars(splitInput, cars); + return cars; + } + + private void makeCars(String[] splitInput, List cars) { + try{ + for(String car : splitInput){ + cars.add(new Car(car)); + } + }catch (IllegalArgumentException exception){ + System.out.println(exception.getMessage()); + inputCar(); + } + } + + public int inputRound(){ + printInputFinalRound(); + String inputRound = Console.readLine(); + try{ + validateRound(inputRound); + }catch (IllegalArgumentException exception){ + System.out.println(exception); + inputRound(); + } + return Integer.parseInt(inputRound); + } + + private void validateRound(String inputRound) { + try{ + Integer.parseInt(inputRound); + }catch (NumberFormatException exception){ + throw new IllegalArgumentException(ROUND_IS_DIGIT.getMessage()); + } + } + +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 000000000..69fb923ea --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,19 @@ +package racingcar.view; + +import racingcar.message.Message; + +import static racingcar.message.Message.*; + +public class OutputView { + public void printCarsName() { + System.out.println(PRINT_INPUT_NAMES); + } + + public void printInputFinalRound() { + System.out.println(PRINT_INPUT_FINAL_ROUND); + } + + public void printResult() { + System.out.println(PRINT_OUTPUT); + } +} From 6c8e7148efb632fffa29c9dbaa65406eff462750 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:41:39 +0900 Subject: [PATCH 19/28] feat: create printWinner method --- src/main/java/racingcar/view/InputView.java | 1 - src/main/java/racingcar/view/OutputView.java | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 8b0cb0e37..6211ca1c8 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -51,5 +51,4 @@ private void validateRound(String inputRound) { throw new IllegalArgumentException(ROUND_IS_DIGIT.getMessage()); } } - } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 69fb923ea..b418c8bf7 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -13,7 +13,12 @@ public void printInputFinalRound() { System.out.println(PRINT_INPUT_FINAL_ROUND); } - public void printResult() { + public void printResult(String result) { System.out.println(PRINT_OUTPUT); + System.out.println(result); + } + + public void printWinner(String winner){ + System.out.println(winner); } } From 588c1b43dc00c2259112adaf328824a4c329fba3 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:53:36 +0900 Subject: [PATCH 20/28] feat: create Controller Class --- src/main/java/racingcar/Application.java | 3 ++ .../controller/RacingCarController.java | 31 +++++++++++++++++++ src/main/java/racingcar/view/OutputView.java | 6 ++-- .../view/{InputView.java => View.java} | 4 +-- 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 src/main/java/racingcar/controller/RacingCarController.java rename src/main/java/racingcar/view/{InputView.java => View.java} (92%) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed0456a..525b3469b 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,10 @@ package racingcar; +import racingcar.controller.RacingCarController; + public class Application { public static void main(String[] args) { // TODO ๊ตฌํ˜„ ์ง„ํ–‰ + new RacingCarController().play(); } } diff --git a/src/main/java/racingcar/controller/RacingCarController.java b/src/main/java/racingcar/controller/RacingCarController.java new file mode 100644 index 000000000..53daed431 --- /dev/null +++ b/src/main/java/racingcar/controller/RacingCarController.java @@ -0,0 +1,31 @@ +package racingcar.controller; + +import racingcar.domain.Car; +import racingcar.domain.CarVenue; +import racingcar.view.View; + +import java.util.List; + +public class RacingCarController { + private final View view = new View(); + + public void play() { + List cars = view.inputCar(); + int round = view.inputRound(); + CarVenue carVenue = new CarVenue(cars, round); + moveAndPrint(carVenue); + } + + private void moveAndPrint(CarVenue carVenue) { + StringBuilder print = new StringBuilder(); + while (!carVenue.isEnd()) { + carVenue.moveTurn(); + print.append(carVenue.printTurn() + "\n"); + } + view.printResult(print.toString()); + whoIsWinner(carVenue); + } + private void whoIsWinner(CarVenue carVenue){ + view.printWinner(carVenue.printWinner()); + } +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index b418c8bf7..9ca977ada 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -6,15 +6,15 @@ public class OutputView { public void printCarsName() { - System.out.println(PRINT_INPUT_NAMES); + System.out.println(PRINT_INPUT_NAMES.getMessage()); } public void printInputFinalRound() { - System.out.println(PRINT_INPUT_FINAL_ROUND); + System.out.println(PRINT_INPUT_FINAL_ROUND.getMessage()); } public void printResult(String result) { - System.out.println(PRINT_OUTPUT); + System.out.println(PRINT_OUTPUT.getMessage()); System.out.println(result); } diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/View.java similarity index 92% rename from src/main/java/racingcar/view/InputView.java rename to src/main/java/racingcar/view/View.java index 6211ca1c8..f7fe60f46 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/View.java @@ -2,8 +2,6 @@ import camp.nextstep.edu.missionutils.Console; import racingcar.domain.Car; -import racingcar.message.ErrorMessage; -import racingcar.message.Message; import java.util.ArrayList; import java.util.List; @@ -11,7 +9,7 @@ import static racingcar.message.ErrorMessage.*; import static racingcar.message.Message.*; -public class InputView extends OutputView{ +public class View extends OutputView{ public List inputCar(){ printCarsName(); String input = Console.readLine(); From 11b36ebe2516a9c96ea28e610f4f3a18044df527 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 15:16:35 +0900 Subject: [PATCH 21/28] =?UTF-8?q?refactor:=20=EC=9A=B0=EC=8A=B9=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=B5=9C=EB=8C=80=20=EB=9D=BC=EC=9A=B4?= =?UTF-8?q?=EB=93=9C=20->=20=EC=B9=B4=ED=8A=B8=EA=B0=80=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=ED=95=9C=20=EC=B5=9C=EB=8C=80=20=ED=8F=AC=EC=A7=80?= =?UTF-8?q?=EC=85=98=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RacingCarController.java | 4 ++- src/main/java/racingcar/domain/Car.java | 13 ++++++--- src/main/java/racingcar/domain/CarVenue.java | 27 +++++++++++-------- src/main/java/racingcar/message/Message.java | 1 + src/main/java/racingcar/view/OutputView.java | 2 +- src/main/java/racingcar/view/View.java | 20 +++++++------- .../java/racingcar/domain/CarVenueTest.java | 20 ++++++++++++++ 7 files changed, 61 insertions(+), 26 deletions(-) create mode 100644 src/test/java/racingcar/domain/CarVenueTest.java diff --git a/src/main/java/racingcar/controller/RacingCarController.java b/src/main/java/racingcar/controller/RacingCarController.java index 53daed431..67525b872 100644 --- a/src/main/java/racingcar/controller/RacingCarController.java +++ b/src/main/java/racingcar/controller/RacingCarController.java @@ -6,6 +6,8 @@ import java.util.List; +import static racingcar.message.Message.ESCAPE_SEQUENCE; + public class RacingCarController { private final View view = new View(); @@ -20,7 +22,7 @@ private void moveAndPrint(CarVenue carVenue) { StringBuilder print = new StringBuilder(); while (!carVenue.isEnd()) { carVenue.moveTurn(); - print.append(carVenue.printTurn() + "\n"); + print.append(carVenue.printTurn() + ESCAPE_SEQUENCE.getMessage()); } view.printResult(print.toString()); whoIsWinner(carVenue); diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index b18cafd9e..090a8a028 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -7,12 +7,15 @@ import static racingcar.message.ErrorMessage.CAR_NAME_TOO_LONG; import static racingcar.message.Message.*; +import static racingcar.util.Number.*; public class Car { private final int maxNameSize = 5; private final String name; private int position = 0; + + public Car(String name) { validate(name); this.name = name; @@ -26,7 +29,11 @@ private void validate(String name) { // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ public void move(int moveInput) { - if (moveInput >= Number.STANDARD_NUMBER.getNumber()) position++; + if (moveInput >= STANDARD_NUMBER.getNumber()) position++; + } + + public int getPosition() { + return position; } @Override @@ -41,8 +48,8 @@ private void appendPosition(StringBuilder print) { print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } - public String getWinnerName(int finalPosition){ - if(finalPosition == position)return name; + public String getWinnerName(int maxPosition){ + if(maxPosition == position)return name; return LOSER.getMessage(); } } diff --git a/src/main/java/racingcar/domain/CarVenue.java b/src/main/java/racingcar/domain/CarVenue.java index f9d05d99d..ad1ba82b2 100644 --- a/src/main/java/racingcar/domain/CarVenue.java +++ b/src/main/java/racingcar/domain/CarVenue.java @@ -1,6 +1,5 @@ package racingcar.domain; -import racingcar.message.Message; import racingcar.util.CarOperator; import racingcar.util.RandomNumberGenerate; @@ -15,6 +14,7 @@ public class CarVenue { private final List cars; private final CarOperator carOperator; private final Round round; + private int maxPosition = 0; public CarVenue(List cars, int finalRound) { @@ -23,24 +23,29 @@ public CarVenue(List cars, int finalRound) { this.round = new Round(finalRound); } - public void moveTurn(){ + public void moveTurn() { round.next(); List nowMove = carOperator.tempPosition(); - IntStream.range(0, cars.size()).forEach(index -> cars.get(index).move(nowMove.get(index))); + IntStream.range(0, cars.size()).forEach(index -> { + cars.get(index).move(nowMove.get(index)); + maxPosition = Math.max(maxPosition, cars.get(index).getPosition()); + }); } - public String printTurn(){ - return cars.stream().map(car -> car.toString() + "\n").collect(Collectors.joining()); + + public String printTurn() { + return cars.stream().map(car -> car.toString() + ESCAPE_SEQUENCE.getMessage()).collect(Collectors.joining()); } - public boolean isEnd(){ - if(round.isFinish()) return true; + public boolean isEnd() { + if (round.isFinish()) return true; return false; } - public String printWinner(){ + + public String printWinner() { StringBuilder print = new StringBuilder(WINNER.getMessage()); - StringJoiner joiner = new StringJoiner(", "); - cars.stream().map(car -> car.getWinnerName(round.getFinalRound())) - .filter(winOrLose -> !winOrLose.equals(LOSER.getMessage())) + StringJoiner joiner = new StringJoiner(DELIMITER.getMessage() + " "); + cars.stream().map(car -> car.getWinnerName(maxPosition)). + filter(winOrLose -> !winOrLose.equals(LOSER.getMessage())) .forEach(joiner::add); return print.append(joiner).toString(); } diff --git a/src/main/java/racingcar/message/Message.java b/src/main/java/racingcar/message/Message.java index 6b6ea5c7b..c736860ac 100644 --- a/src/main/java/racingcar/message/Message.java +++ b/src/main/java/racingcar/message/Message.java @@ -4,6 +4,7 @@ public enum Message { DELIMITER(","), INFIX(" : "), POSITION("-"), + ESCAPE_SEQUENCE("\n"), WINNER("์ตœ์ข… ์šฐ์Šน์ž : "), LOSER(""), PRINT_INPUT_NAMES("๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.(์ด๋ฆ„์€ ์‰ผํ‘œ(,) ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)"), diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 9ca977ada..366e67cc6 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -18,7 +18,7 @@ public void printResult(String result) { System.out.println(result); } - public void printWinner(String winner){ + public void printWinner(String winner) { System.out.println(winner); } } diff --git a/src/main/java/racingcar/view/View.java b/src/main/java/racingcar/view/View.java index f7fe60f46..30bc362e9 100644 --- a/src/main/java/racingcar/view/View.java +++ b/src/main/java/racingcar/view/View.java @@ -9,8 +9,8 @@ import static racingcar.message.ErrorMessage.*; import static racingcar.message.Message.*; -public class View extends OutputView{ - public List inputCar(){ +public class View extends OutputView { + public List inputCar() { printCarsName(); String input = Console.readLine(); String[] splitInput = input.split(DELIMITER.getMessage()); @@ -20,22 +20,22 @@ public List inputCar(){ } private void makeCars(String[] splitInput, List cars) { - try{ - for(String car : splitInput){ + try { + for (String car : splitInput) { cars.add(new Car(car)); } - }catch (IllegalArgumentException exception){ + } catch (IllegalArgumentException exception) { System.out.println(exception.getMessage()); inputCar(); } } - public int inputRound(){ + public int inputRound() { printInputFinalRound(); String inputRound = Console.readLine(); - try{ + try { validateRound(inputRound); - }catch (IllegalArgumentException exception){ + } catch (IllegalArgumentException exception) { System.out.println(exception); inputRound(); } @@ -43,9 +43,9 @@ public int inputRound(){ } private void validateRound(String inputRound) { - try{ + try { Integer.parseInt(inputRound); - }catch (NumberFormatException exception){ + } catch (NumberFormatException exception) { throw new IllegalArgumentException(ROUND_IS_DIGIT.getMessage()); } } diff --git a/src/test/java/racingcar/domain/CarVenueTest.java b/src/test/java/racingcar/domain/CarVenueTest.java new file mode 100644 index 000000000..11ec9b8f6 --- /dev/null +++ b/src/test/java/racingcar/domain/CarVenueTest.java @@ -0,0 +1,20 @@ +package racingcar.domain; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class CarVenueTest { + @Test + public void printTurnTest() throws Exception{ + List cars = new ArrayList<>(); + cars.add(new Car("hi")); + cars.add(new Car("bye")); + cars.add(new Car("hello")); + CarVenue carVenue = new CarVenue(cars, 3); + + } +} \ No newline at end of file From 3ccb9fd4ab7cc404eaa9fdc87e5b40c48e1673a4 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 15:39:22 +0900 Subject: [PATCH 22/28] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 48 +++++++++++++------ .../controller/RacingCarController.java | 20 ++++---- src/main/java/racingcar/domain/Car.java | 2 +- .../CarVenueService.java} | 8 ++-- src/test/java/racingcar/CarTest.java | 9 ++++ .../racingcar/domain/CarVenueServiceTest.java | 28 +++++++++++ .../java/racingcar/domain/CarVenueTest.java | 20 -------- 7 files changed, 86 insertions(+), 49 deletions(-) rename src/main/java/racingcar/{domain/CarVenue.java => service/CarVenueService.java} (89%) create mode 100644 src/test/java/racingcar/domain/CarVenueServiceTest.java delete mode 100644 src/test/java/racingcar/domain/CarVenueTest.java diff --git a/docs/README.md b/docs/README.md index 073abd19f..db0c50d24 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,37 +1,55 @@ ## ๐Ÿš€ ๊ธฐ๋Šฅ๋ชฉ๋ก - ## CAR + - [x] ์ด๋ฆ„, ํฌ์ง€์…˜ ๊ด€๋ฆฌ - [x] 0 ~ 9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  4 ์ด์ƒ์ด๋ฉด ํฌ์ง€์…˜ ์ด๋™ -- [x] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString์œผ๋กœ ๋˜์ ธ์คŒ -- [ ] 5๊ธ€์ž๋ณด๋‹ค ํฌ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ -- [ ] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต, +- [x] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString +- [x] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต -## CAR VENUE -- [ ] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜ ๊ด€๋ฆฌ -- [ ] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ +## CAR VENUE SERVICE + +- [x] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜, ๊ฐ€์žฅ ํฐ ํฌ์ง€์…˜ ๊ด€๋ฆฌ +- [x] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ ## CAR POSITION OPERATOR + - [x] ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค์˜ ํ•œ ํ„ด๋‹น ํฌ์ง€์…˜ ๊ฐ’๋“ค ๊ด€๋ฆฌ + ## ROUND -- [ ] ์šฐ์Šน ๋ผ์šด๋“œ์™€ ํ˜„์žฌ ๋ผ์šด๋“œ ๊ด€๋ฆฌ -## RANDOM NUMBER GENERATE +- [x] ์šฐ์Šน ๋ผ์šด๋“œ์™€ ํ˜„์žฌ ๋ผ์šด๋“œ ๊ด€๋ฆฌ + +## RANDOM NUMBER GENERATE(interface + class) + - [x] 0~9 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑ ## NUMBER + - [x] ๋Œ€ํšŒ์˜ ๋ฌด์ž‘์œ„ ๊ฐ’ ๋ฒ”์œ„ ๊ด€๋ฆฌ - [x] ๊ธฐ์ค€ ๊ฐ’(4) ๊ด€๋ฆฌ ## Message -- [ ] ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ + +- [x] ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ ## ErrorMessage -- [ ] ์—๋Ÿฌ ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ + +- [x] ์—๋Ÿฌ ์ถœ๋ ฅ๋ฌธ์— ํ•„์š”ํ•œ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ ## View -- [ ] ์ž๋™์ฐจ ์ด๋ฆ„ ์ž…๋ ฅ -- [ ] ์‹œ๋„ํ•  ํšŸ์ˆ˜ ์ž…๋ ฅ -- [ ] ํ•œํ„ด๋‹น ๊ฒฐ๊ณผ ์ถœ๋ ฅ -- [ ] ์šฐ์Šน์ž ์ถœ๋ ฅ \ No newline at end of file + +- [x] ์ž๋™์ฐจ ์ด๋ฆ„ ์ž…๋ ฅ +- [x] ์‹œ๋„ํ•  ํšŸ์ˆ˜ ์ž…๋ ฅ +- [x] ํ•œํ„ด๋‹น ๊ฒฐ๊ณผ ์ถœ๋ ฅ +- [x] ์šฐ์Šน์ž ์ถœ๋ ฅ + +## Controller + +- [ ] ์ด๋ฆ„, ํšŸ์ˆ˜, ๊ฒฐ๊ณผ์ถœ๋ ฅ, ์šฐ์Šน์ž ์ถœ๋ ฅ์˜ ํ๋ฆ„ ์ œ์–ด + +## Exception + +- [ ] Car์˜ ์ด๋ฆ„์ด 0๋ณด๋‹ค ์ž‘๊ณ  5๋ณด๋‹ค ํฌ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ +- [ ] ์‹œ๋„ํ•  ํšŸ์ˆ˜๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ +- \ No newline at end of file diff --git a/src/main/java/racingcar/controller/RacingCarController.java b/src/main/java/racingcar/controller/RacingCarController.java index 67525b872..54f80aac3 100644 --- a/src/main/java/racingcar/controller/RacingCarController.java +++ b/src/main/java/racingcar/controller/RacingCarController.java @@ -1,7 +1,7 @@ package racingcar.controller; import racingcar.domain.Car; -import racingcar.domain.CarVenue; +import racingcar.service.CarVenueService; import racingcar.view.View; import java.util.List; @@ -14,20 +14,20 @@ public class RacingCarController { public void play() { List cars = view.inputCar(); int round = view.inputRound(); - CarVenue carVenue = new CarVenue(cars, round); - moveAndPrint(carVenue); + CarVenueService carVenueService = new CarVenueService(cars, round); + moveAndPrint(carVenueService); } - private void moveAndPrint(CarVenue carVenue) { + private void moveAndPrint(CarVenueService carVenueService) { StringBuilder print = new StringBuilder(); - while (!carVenue.isEnd()) { - carVenue.moveTurn(); - print.append(carVenue.printTurn() + ESCAPE_SEQUENCE.getMessage()); + while (!carVenueService.isEnd()) { + carVenueService.moveTurn(); + print.append(carVenueService.printTurn() + ESCAPE_SEQUENCE.getMessage()); } view.printResult(print.toString()); - whoIsWinner(carVenue); + whoIsWinner(carVenueService); } - private void whoIsWinner(CarVenue carVenue){ - view.printWinner(carVenue.printWinner()); + private void whoIsWinner(CarVenueService carVenueService){ + view.printWinner(carVenueService.printWinner()); } } diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index 090a8a028..f693c40ae 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -39,12 +39,12 @@ public int getPosition() { @Override public String toString() { StringBuilder print = new StringBuilder(name); - print.append(INFIX.getMessage()); appendPosition(print); return print.toString(); } private void appendPosition(StringBuilder print) { + print.append(INFIX.getMessage()); print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } diff --git a/src/main/java/racingcar/domain/CarVenue.java b/src/main/java/racingcar/service/CarVenueService.java similarity index 89% rename from src/main/java/racingcar/domain/CarVenue.java rename to src/main/java/racingcar/service/CarVenueService.java index ad1ba82b2..24ec5fa0c 100644 --- a/src/main/java/racingcar/domain/CarVenue.java +++ b/src/main/java/racingcar/service/CarVenueService.java @@ -1,5 +1,7 @@ -package racingcar.domain; +package racingcar.service; +import racingcar.domain.Car; +import racingcar.domain.Round; import racingcar.util.CarOperator; import racingcar.util.RandomNumberGenerate; @@ -10,14 +12,14 @@ import static racingcar.message.Message.*; -public class CarVenue { +public class CarVenueService { private final List cars; private final CarOperator carOperator; private final Round round; private int maxPosition = 0; - public CarVenue(List cars, int finalRound) { + public CarVenueService(List cars, int finalRound) { this.cars = cars; this.carOperator = new CarOperator(new RandomNumberGenerate(), cars.size()); this.round = new Round(finalRound); diff --git a/src/test/java/racingcar/CarTest.java b/src/test/java/racingcar/CarTest.java index b2ee9c307..1e4c6e012 100644 --- a/src/test/java/racingcar/CarTest.java +++ b/src/test/java/racingcar/CarTest.java @@ -19,4 +19,13 @@ public void carNameTest() throws Exception{ org.assertj.core.api.Assertions.assertThatThrownBy(()-> new Car("ffffff")).isInstanceOf(IllegalArgumentException.class); } + @Test + public void $NAME() throws Exception{ + String hello = ",,1"; + String[] split = hello.split(","); + int count = 0; + for(String x : split){ + if(x.equals("")) System.out.println("blank"); + } + } } \ No newline at end of file diff --git a/src/test/java/racingcar/domain/CarVenueServiceTest.java b/src/test/java/racingcar/domain/CarVenueServiceTest.java new file mode 100644 index 000000000..1abed3cd2 --- /dev/null +++ b/src/test/java/racingcar/domain/CarVenueServiceTest.java @@ -0,0 +1,28 @@ +package racingcar.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import racingcar.service.CarVenueService; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +class CarVenueServiceTest { + @Test + @DisplayName("์ตœ์ข… ์šฐ์Šน์ž ํ…Œ์ŠคํŠธ, CarVenue ๋‚ด์˜ ํฌ์ง€์…˜์œผ๋กœ ์šฐ์Šน์ž ๊ด€๋ฆฌ") + public void printTurnTest() throws Exception{ + List cars = new ArrayList<>(); + Car hiCar = new Car("hi"); + Car byeCar = new Car("bye"); + Car helloCar = new Car("hello"); + cars.add(hiCar); + cars.add(byeCar); + cars.add(helloCar); + int round = 3; + CarVenueService carVenueService = new CarVenueService(cars, round); + IntStream.range(0, round).map(i -> 5).forEach(hiCar::move); + Assertions.assertEquals(carVenueService.printWinner(), "์ตœ์ข… ์šฐ์Šน์ž : bye, hello"); + } +} \ No newline at end of file diff --git a/src/test/java/racingcar/domain/CarVenueTest.java b/src/test/java/racingcar/domain/CarVenueTest.java deleted file mode 100644 index 11ec9b8f6..000000000 --- a/src/test/java/racingcar/domain/CarVenueTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package racingcar.domain; - -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -class CarVenueTest { - @Test - public void printTurnTest() throws Exception{ - List cars = new ArrayList<>(); - cars.add(new Car("hi")); - cars.add(new Car("bye")); - cars.add(new Car("hello")); - CarVenue carVenue = new CarVenue(cars, 3); - - } -} \ No newline at end of file From 7d6eaad43fdb3f9d77805c6b251e3df69434d818 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 15:44:11 +0900 Subject: [PATCH 23/28] feat: add Car validate condition --- src/main/java/racingcar/domain/Car.java | 2 +- src/main/java/racingcar/util/Number.java | 1 + src/test/java/racingcar/CarTest.java | 40 +++++++++++------------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index f693c40ae..3b22047f2 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -22,7 +22,7 @@ public Car(String name) { } private void validate(String name) { - if (name.length() > maxNameSize) { + if (name.length() > maxNameSize || name.length() < NAME_MIN_LENGTH.getNumber()) { throw new IllegalArgumentException(CAR_NAME_TOO_LONG.getMessage()); } } diff --git a/src/main/java/racingcar/util/Number.java b/src/main/java/racingcar/util/Number.java index 30b18443c..0ca2635df 100644 --- a/src/main/java/racingcar/util/Number.java +++ b/src/main/java/racingcar/util/Number.java @@ -1,6 +1,7 @@ package racingcar.util; public enum Number { + NAME_MIN_LENGTH(1), START_NUMBER(0), LAST_NUMBER(9), STANDARD_NUMBER(4); diff --git a/src/test/java/racingcar/CarTest.java b/src/test/java/racingcar/CarTest.java index 1e4c6e012..fa3776814 100644 --- a/src/test/java/racingcar/CarTest.java +++ b/src/test/java/racingcar/CarTest.java @@ -4,28 +4,24 @@ import org.junit.jupiter.api.Test; import racingcar.domain.Car; +import static org.assertj.core.api.Assertions.*; + class CarTest { - @Test - public void printCarPositionTest() throws Exception{ - Car car = new Car("bebe"); - car.move(5); - car.move(4); - car.move(1); - Assertions.assertEquals(car.toString(),"bebe : --"); - } + @Test + public void printCarPositionTest() throws Exception { + Car car = new Car("bebe"); + car.move(5); + car.move(4); + car.move(1); + Assertions.assertEquals(car.toString(), "bebe : --"); + } + + @Test + public void carNameTest() throws Exception { + assertThatThrownBy(() -> + new Car("ffffff")).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> + new Car("")).isInstanceOf(IllegalArgumentException.class); + } - @Test - public void carNameTest() throws Exception{ - org.assertj.core.api.Assertions.assertThatThrownBy(()-> - new Car("ffffff")).isInstanceOf(IllegalArgumentException.class); - } - @Test - public void $NAME() throws Exception{ - String hello = ",,1"; - String[] split = hello.split(","); - int count = 0; - for(String x : split){ - if(x.equals("")) System.out.println("blank"); - } - } } \ No newline at end of file From 4daf01bb6cbe70ad0381a28e7fa748c83fd48a7d Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 15:54:25 +0900 Subject: [PATCH 24/28] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/racingcar/domain/Car.java | 10 ++++------ src/main/java/racingcar/domain/Round.java | 4 ---- src/main/java/racingcar/message/ErrorMessage.java | 2 +- src/main/java/racingcar/view/OutputView.java | 2 -- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/docs/README.md b/docs/README.md index db0c50d24..69d1fb15b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -50,6 +50,6 @@ ## Exception -- [ ] Car์˜ ์ด๋ฆ„์ด 0๋ณด๋‹ค ์ž‘๊ณ  5๋ณด๋‹ค ํฌ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ +- [ ] Car์˜ ์ด๋ฆ„์ด 1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ 5๋ณด๋‹ค ํฌ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ - [ ] ์‹œ๋„ํ•  ํšŸ์ˆ˜๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ - \ No newline at end of file diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index 3b22047f2..ec5161cc2 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -1,13 +1,12 @@ package racingcar.domain; -import racingcar.util.Number; - import java.util.stream.Collectors; import java.util.stream.IntStream; import static racingcar.message.ErrorMessage.CAR_NAME_TOO_LONG; import static racingcar.message.Message.*; -import static racingcar.util.Number.*; +import static racingcar.util.Number.NAME_MIN_LENGTH; +import static racingcar.util.Number.STANDARD_NUMBER; public class Car { private final int maxNameSize = 5; @@ -15,7 +14,6 @@ public class Car { private int position = 0; - public Car(String name) { validate(name); this.name = name; @@ -48,8 +46,8 @@ private void appendPosition(StringBuilder print) { print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } - public String getWinnerName(int maxPosition){ - if(maxPosition == position)return name; + public String getWinnerName(int maxPosition) { + if (maxPosition == position) return name; return LOSER.getMessage(); } } diff --git a/src/main/java/racingcar/domain/Round.java b/src/main/java/racingcar/domain/Round.java index 99915fb5a..e6cc33870 100644 --- a/src/main/java/racingcar/domain/Round.java +++ b/src/main/java/racingcar/domain/Round.java @@ -16,8 +16,4 @@ public boolean isFinish() { if (tempRound == finalRound) return true; return false; } - - public int getFinalRound() { - return finalRound; - } } diff --git a/src/main/java/racingcar/message/ErrorMessage.java b/src/main/java/racingcar/message/ErrorMessage.java index 96a98b361..7dcbac3b1 100644 --- a/src/main/java/racingcar/message/ErrorMessage.java +++ b/src/main/java/racingcar/message/ErrorMessage.java @@ -1,7 +1,7 @@ package racingcar.message; public enum ErrorMessage { - CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."), + CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ ๊ณต๋ฐฑ์ด ์•„๋‹ˆ๊ณ , 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."), ROUND_IS_DIGIT("์‹œ๋„ ํšŸ์ˆ˜๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); private final String prefix = "[ERROR]"; private String message; diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 366e67cc6..e1fe3e731 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,7 +1,5 @@ package racingcar.view; -import racingcar.message.Message; - import static racingcar.message.Message.*; public class OutputView { From 597c56456373e9dddf1714d08d986445bf58b320 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 16:16:13 +0900 Subject: [PATCH 25/28] feat: test CarvenueService ending method --- .../java/racingcar/domain/CarVenueServiceTest.java | 11 +++++++++++ src/test/java/racingcar/util/CarOperatorTest.java | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/test/java/racingcar/domain/CarVenueServiceTest.java b/src/test/java/racingcar/domain/CarVenueServiceTest.java index 1abed3cd2..ea8087078 100644 --- a/src/test/java/racingcar/domain/CarVenueServiceTest.java +++ b/src/test/java/racingcar/domain/CarVenueServiceTest.java @@ -25,4 +25,15 @@ public void printTurnTest() throws Exception{ IntStream.range(0, round).map(i -> 5).forEach(hiCar::move); Assertions.assertEquals(carVenueService.printWinner(), "์ตœ์ข… ์šฐ์Šน์ž : bye, hello"); } + + @Test + @DisplayName("๊ฒŒ์ž„ ์—”๋”ฉ ํ™•์ธ ํ…Œ์ŠคํŠธ") + public void endGameTest() throws Exception{ + List cars = new ArrayList<>(); + cars.add(new Car("hi1")); + int round = 3; + CarVenueService carVenueService = new CarVenueService(cars, round); + IntStream.range(0, round).forEach(i -> carVenueService.moveTurn()); + Assertions.assertEquals(carVenueService.isEnd(), true); + } } \ No newline at end of file diff --git a/src/test/java/racingcar/util/CarOperatorTest.java b/src/test/java/racingcar/util/CarOperatorTest.java index 87ac2e3e1..5a2362681 100644 --- a/src/test/java/racingcar/util/CarOperatorTest.java +++ b/src/test/java/racingcar/util/CarOperatorTest.java @@ -1,11 +1,13 @@ package racingcar.util; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; class CarOperatorTest { @Test - public void carOperatorSizeTest() throws Exception{ + @DisplayName("CarOperator๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜„์žฌ ํ„ด์˜ ๋žœ๋ค๊ฐ’ ์‚ฌ์ด์ฆˆ ํ™•์ธ") + public void carOperatorSizeTest(){ CarOperator carOperator = new CarOperator(new RandomNumberGenerate(), 3); Assertions.assertEquals(carOperator.tempPosition().size(), 3); } From ac4002b5a39cc46a7ef7a01247cc0845e2ae1212 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 16:22:08 +0900 Subject: [PATCH 26/28] feat: test round ending method --- src/test/java/racingcar/domain/RoundTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/racingcar/domain/RoundTest.java diff --git a/src/test/java/racingcar/domain/RoundTest.java b/src/test/java/racingcar/domain/RoundTest.java new file mode 100644 index 000000000..9d5fca1db --- /dev/null +++ b/src/test/java/racingcar/domain/RoundTest.java @@ -0,0 +1,20 @@ +package racingcar.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class RoundTest { + @Test + @DisplayName("Round ์—”๋“œ ํ…Œ์ŠคํŠธ") + public void roundEndTest() throws Exception{ + Round round = new Round(2); + round.next(); + Assertions.assertEquals(round.isFinish(), false); + round.next(); + Assertions.assertEquals(round.isFinish(), true); + } + +} \ No newline at end of file From 3f6a7aed66793e9c6550d12d3371aea23e5834b1 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 16:28:50 +0900 Subject: [PATCH 27/28] feat: test CarVenueService move and print method --- .../racingcar/domain/CarVenueServiceTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/racingcar/domain/CarVenueServiceTest.java b/src/test/java/racingcar/domain/CarVenueServiceTest.java index ea8087078..bebf2cd81 100644 --- a/src/test/java/racingcar/domain/CarVenueServiceTest.java +++ b/src/test/java/racingcar/domain/CarVenueServiceTest.java @@ -36,4 +36,20 @@ public void endGameTest() throws Exception{ IntStream.range(0, round).forEach(i -> carVenueService.moveTurn()); Assertions.assertEquals(carVenueService.isEnd(), true); } + + @Test + @DisplayName("๊ฒŒ์ž„ ์ง„ํ–‰ ๋ฐ ์ถœ๋ ฅ ํ™•์ธ") + public void carVenueServiceTest() throws Exception{ + //given + List cars = new ArrayList<>(); + cars.add(new Car("hi1")); + cars.add(new Car("hi2")); + int round = 3; + CarVenueService carVenueService = new CarVenueService(cars, round); + carVenueService.moveTurn(); + Assertions.assertEquals(carVenueService.printTurn().contains("hi1 : "), + true); + Assertions.assertEquals(carVenueService.printTurn().contains("hi2 : "), + true); + } } \ No newline at end of file From 37e9f89f690191183e10a6339da25acc97e94a98 Mon Sep 17 00:00:00 2001 From: BioBeBe <76714219+JaegeonYu@users.noreply.github.com> Date: Sat, 10 Dec 2022 17:34:45 +0900 Subject: [PATCH 28/28] feat: create Car Collection class and refactoring --- docs/README.md | 8 ++- .../controller/RacingCarController.java | 1 + src/main/java/racingcar/domain/Car.java | 9 ++-- src/main/java/racingcar/domain/Cars.java | 50 +++++++++++++++++++ .../java/racingcar/message/ErrorMessage.java | 3 +- .../racingcar/service/CarVenueService.java | 26 +++------- .../util/{Number.java => NumberManager.java} | 4 +- .../racingcar/util/RandomNumberGenerate.java | 2 +- src/main/java/racingcar/view/View.java | 10 ++++ .../racingcar/domain/CarVenueServiceTest.java | 33 ++++++------ 10 files changed, 102 insertions(+), 44 deletions(-) create mode 100644 src/main/java/racingcar/domain/Cars.java rename src/main/java/racingcar/util/{Number.java => NumberManager.java} (79%) diff --git a/docs/README.md b/docs/README.md index 57fd2c794..0ad93a33a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,10 +8,14 @@ - [x] ์ด๋ฆ„๊ณผ ํฌ์ง€์…˜์„ toString - [x] ํฌ์ง€์…˜๊ณผ ์šฐ์Šน ํฌ์ง€์…˜ ๋น„๊ต +## CARS +- [x] Car์˜ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ +- [x] ์ฐจ์˜ ์ด๋™, ํ„ด๋‹น ์ถœ๋ ฅ๋ฌธ, ์šฐ์Šน ์ถœ๋ ฅ๋ฌธ ๊ด€๋ฆฌ + ## CAR VENUE SERVICE -- [x] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜, ๊ฐ€์žฅ ํฐ ํฌ์ง€์…˜ ๊ด€๋ฆฌ -- [x] ์ตœ์ข… ์šฐ์Šน์ž ๊ด€๋ฆฌ, ๋‹ค์ˆ˜์ด๋ฉด ","๋กœ ๊ด€๋ฆฌ +- [x] ์ฐธ๊ฐ€ํ•˜๋Š” ์ž๋™์ฐจ, ์‹œ๋„ ํšŸ์ˆ˜ ๊ด€๋ฆฌ +- [ ] .. ## CAR POSITION OPERATOR diff --git a/src/main/java/racingcar/controller/RacingCarController.java b/src/main/java/racingcar/controller/RacingCarController.java index 54f80aac3..b7fcaddb9 100644 --- a/src/main/java/racingcar/controller/RacingCarController.java +++ b/src/main/java/racingcar/controller/RacingCarController.java @@ -1,6 +1,7 @@ package racingcar.controller; import racingcar.domain.Car; +import racingcar.domain.Cars; import racingcar.service.CarVenueService; import racingcar.view.View; diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index ec5161cc2..a52ba4168 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -5,8 +5,8 @@ import static racingcar.message.ErrorMessage.CAR_NAME_TOO_LONG; import static racingcar.message.Message.*; -import static racingcar.util.Number.NAME_MIN_LENGTH; -import static racingcar.util.Number.STANDARD_NUMBER; +import static racingcar.util.NumberManager.NAME_MIN_LENGTH; +import static racingcar.util.NumberManager.STANDARD_NUMBER; public class Car { private final int maxNameSize = 5; @@ -46,8 +46,7 @@ private void appendPosition(StringBuilder print) { print.append(IntStream.range(0, position).mapToObj(i -> POSITION.getMessage()).collect(Collectors.joining())); } - public String getWinnerName(int maxPosition) { - if (maxPosition == position) return name; - return LOSER.getMessage(); + public String getName() { + return name; } } diff --git a/src/main/java/racingcar/domain/Cars.java b/src/main/java/racingcar/domain/Cars.java new file mode 100644 index 000000000..afa14c476 --- /dev/null +++ b/src/main/java/racingcar/domain/Cars.java @@ -0,0 +1,50 @@ +package racingcar.domain; + +import racingcar.message.Message; +import racingcar.util.CarOperator; + +import java.util.List; +import java.util.StringJoiner; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static racingcar.message.Message.*; + +public class Cars { + private final List cars; + + public Cars(List cars) { + this.cars = cars; + } + + public void moveCars(CarOperator operator) { + List nowMove = operator.tempPosition(); + IntStream.range(0, cars.size()).forEach(index -> { + cars.get(index).move((nowMove.get(index))); + }); + } + + public String printCars() { + return cars.stream().map(car -> car.toString() + ESCAPE_SEQUENCE.getMessage()) + .collect(Collectors.joining()); + } + + public int getMaxPosition() { + return cars.stream().mapToInt(Car::getPosition).max() + .orElseThrow(IllegalArgumentException::new); + } + + public String getWinCar() { + int max = getMaxPosition(); + StringJoiner joiner = new StringJoiner(DELIMITER.getMessage() + " "); + IntStream.range(0, cars.size()) + .filter(i -> cars.get(i).getPosition() == max) + .mapToObj(i -> cars.get(i).getName()) + .forEach(joiner::add); + return joiner.toString(); + } + + public int getSize(){ + return cars.size(); + } +} diff --git a/src/main/java/racingcar/message/ErrorMessage.java b/src/main/java/racingcar/message/ErrorMessage.java index 7dcbac3b1..50ae91d79 100644 --- a/src/main/java/racingcar/message/ErrorMessage.java +++ b/src/main/java/racingcar/message/ErrorMessage.java @@ -2,7 +2,8 @@ public enum ErrorMessage { CAR_NAME_TOO_LONG("์ฐจ ์ด๋ฆ„์€ ๊ณต๋ฐฑ์ด ์•„๋‹ˆ๊ณ , 5๊ธ€์ž ์ด๋‚ด์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค."), - ROUND_IS_DIGIT("์‹œ๋„ ํšŸ์ˆ˜๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); + ROUND_IS_DIGIT("์‹œ๋„ ํšŸ์ˆ˜๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."), + DUPLICATE_PARTICIPANT("์ค‘๋ณต๋œ ์ฐธ๊ฐ€์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."); private final String prefix = "[ERROR]"; private String message; diff --git a/src/main/java/racingcar/service/CarVenueService.java b/src/main/java/racingcar/service/CarVenueService.java index 24ec5fa0c..c07c309db 100644 --- a/src/main/java/racingcar/service/CarVenueService.java +++ b/src/main/java/racingcar/service/CarVenueService.java @@ -1,41 +1,34 @@ package racingcar.service; import racingcar.domain.Car; +import racingcar.domain.Cars; import racingcar.domain.Round; import racingcar.util.CarOperator; import racingcar.util.RandomNumberGenerate; import java.util.List; -import java.util.StringJoiner; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import static racingcar.message.Message.*; +import static racingcar.message.Message.WINNER; public class CarVenueService { - private final List cars; + private final Cars cars; private final CarOperator carOperator; private final Round round; - private int maxPosition = 0; public CarVenueService(List cars, int finalRound) { - this.cars = cars; + this.cars = new Cars(cars); this.carOperator = new CarOperator(new RandomNumberGenerate(), cars.size()); this.round = new Round(finalRound); } public void moveTurn() { round.next(); - List nowMove = carOperator.tempPosition(); - IntStream.range(0, cars.size()).forEach(index -> { - cars.get(index).move(nowMove.get(index)); - maxPosition = Math.max(maxPosition, cars.get(index).getPosition()); - }); + cars.moveCars(carOperator); } public String printTurn() { - return cars.stream().map(car -> car.toString() + ESCAPE_SEQUENCE.getMessage()).collect(Collectors.joining()); + return cars.printCars(); } public boolean isEnd() { @@ -45,10 +38,7 @@ public boolean isEnd() { public String printWinner() { StringBuilder print = new StringBuilder(WINNER.getMessage()); - StringJoiner joiner = new StringJoiner(DELIMITER.getMessage() + " "); - cars.stream().map(car -> car.getWinnerName(maxPosition)). - filter(winOrLose -> !winOrLose.equals(LOSER.getMessage())) - .forEach(joiner::add); - return print.append(joiner).toString(); + print.append(cars.getWinCar()); + return print.toString(); } } diff --git a/src/main/java/racingcar/util/Number.java b/src/main/java/racingcar/util/NumberManager.java similarity index 79% rename from src/main/java/racingcar/util/Number.java rename to src/main/java/racingcar/util/NumberManager.java index 0ca2635df..c82d9b460 100644 --- a/src/main/java/racingcar/util/Number.java +++ b/src/main/java/racingcar/util/NumberManager.java @@ -1,13 +1,13 @@ package racingcar.util; -public enum Number { +public enum NumberManager { NAME_MIN_LENGTH(1), START_NUMBER(0), LAST_NUMBER(9), STANDARD_NUMBER(4); private int number; - Number(int number) { + NumberManager(int number) { this.number = number; } diff --git a/src/main/java/racingcar/util/RandomNumberGenerate.java b/src/main/java/racingcar/util/RandomNumberGenerate.java index bd55b84ce..d8d0d3ffb 100644 --- a/src/main/java/racingcar/util/RandomNumberGenerate.java +++ b/src/main/java/racingcar/util/RandomNumberGenerate.java @@ -2,7 +2,7 @@ import camp.nextstep.edu.missionutils.Randoms; -import static racingcar.util.Number.*; +import static racingcar.util.NumberManager.*; public class RandomNumberGenerate implements NumberGenerate { diff --git a/src/main/java/racingcar/view/View.java b/src/main/java/racingcar/view/View.java index 30bc362e9..8d23fcd2e 100644 --- a/src/main/java/racingcar/view/View.java +++ b/src/main/java/racingcar/view/View.java @@ -2,8 +2,11 @@ import camp.nextstep.edu.missionutils.Console; import racingcar.domain.Car; +import racingcar.domain.Cars; +import racingcar.message.ErrorMessage; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static racingcar.message.ErrorMessage.*; @@ -19,8 +22,15 @@ public List inputCar() { return cars; } + private void validateDuplicate(String[] splitInput) { + if(splitInput.length != Arrays.stream(splitInput).distinct().count()){ + throw new IllegalArgumentException(DUPLICATE_PARTICIPANT.getMessage()); + } + } + private void makeCars(String[] splitInput, List cars) { try { + validateDuplicate(splitInput); for (String car : splitInput) { cars.add(new Car(car)); } diff --git a/src/test/java/racingcar/domain/CarVenueServiceTest.java b/src/test/java/racingcar/domain/CarVenueServiceTest.java index bebf2cd81..c07026933 100644 --- a/src/test/java/racingcar/domain/CarVenueServiceTest.java +++ b/src/test/java/racingcar/domain/CarVenueServiceTest.java @@ -10,21 +10,7 @@ import java.util.stream.IntStream; class CarVenueServiceTest { - @Test - @DisplayName("์ตœ์ข… ์šฐ์Šน์ž ํ…Œ์ŠคํŠธ, CarVenue ๋‚ด์˜ ํฌ์ง€์…˜์œผ๋กœ ์šฐ์Šน์ž ๊ด€๋ฆฌ") - public void printTurnTest() throws Exception{ - List cars = new ArrayList<>(); - Car hiCar = new Car("hi"); - Car byeCar = new Car("bye"); - Car helloCar = new Car("hello"); - cars.add(hiCar); - cars.add(byeCar); - cars.add(helloCar); - int round = 3; - CarVenueService carVenueService = new CarVenueService(cars, round); - IntStream.range(0, round).map(i -> 5).forEach(hiCar::move); - Assertions.assertEquals(carVenueService.printWinner(), "์ตœ์ข… ์šฐ์Šน์ž : bye, hello"); - } + @Test @DisplayName("๊ฒŒ์ž„ ์—”๋”ฉ ํ™•์ธ ํ…Œ์ŠคํŠธ") @@ -52,4 +38,21 @@ public void carVenueServiceTest() throws Exception{ Assertions.assertEquals(carVenueService.printTurn().contains("hi2 : "), true); } + + @Test + public void getMaxPositionTest() throws Exception{ + //given + List cars = new ArrayList<>(); + Car hiCar = new Car("hi"); + Car byeCar = new Car("bye"); + Car helloCar = new Car("hello"); + cars.add(hiCar); + cars.add(byeCar); + cars.add(helloCar); + Cars carCollection = new Cars(cars); + hiCar.move(5); + hiCar.move(5); + Assertions.assertEquals(carCollection.getMaxPosition(), 2); + //then + } } \ No newline at end of file