From 079ab90142a55e174d6968e81710a36f93b0f70e Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Sat, 10 Dec 2022 17:22:54 +0900 Subject: [PATCH 01/18] : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 커밋 메세지 템플릿을 추가하였습니다. --- commit-message-template | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 commit-message-template diff --git a/commit-message-template b/commit-message-template new file mode 100644 index 00000000..29e3eef9 --- /dev/null +++ b/commit-message-template @@ -0,0 +1,27 @@ +# <타입>: <제목> + +##### 제목은 최대 50 글자까지만 입력 ############## -> | + + +# 본문은 위에 작성 +######## 본문은 한 줄에 최대 72 글자까지만 입력 ########################### -> | + +# 꼬릿말은 아래에 작성: ex) #이슈 번호 + +# --- COMMIT END --- +# <타입> 리스트 +# feat : 기능 (새로운 기능) +# fix : 버그 (버그 수정) +# refactor : 리팩토링 +# style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음) +# docs : 문서 (문서 추가, 수정, 삭제) +# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음) +# chore : 기타 변경사항 (빌드 스크립트 수정 등) +# ------------------ +# 제목 첫 글자를 대문자로 +# 제목은 명령문으로 +# 제목 끝에 마침표(.) 금지 +# 제목과 본문을 한 줄 띄워 분리하기 +# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다. +# 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분 +# ------------------ From db2d2fcf8b10cfc1d4edb76d3f953526e6ba698b Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Sun, 11 Dec 2022 20:31:13 +0900 Subject: [PATCH 02/18] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=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 --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index fcf3f057..03b16445 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,19 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + +## 구현할 기능 목록 + +- [x] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. + - 숫자의 범위는 1-9 이다. +- [x] 유저가 서로 다른 3자리의 수를 입력한다. + - 입력 포맷 : "숫자를 입력해주세요 : %s" +- [x] 결과를 계산한다. + - 스트라이크, 볼의 갯수를 계산하여 return 한다. +- [x] 결과를 종합한다. + - 스트라이크, 볼의 갯수가 둘 다 0이 아닐 시 그대로 출력 + - 스트라이크, 볼의 갯수가 둘 다 0일 경우 낫싱 출력 + - 스트라이크가 3개일 경우 정답처리 +- [x] 정답 처리 + - '1' 입력시에 게임 재실행 + - '2' 입력시에 게임 종료 \ No newline at end of file From 0686de8214593ba982cbe8bb9fa2c6119d9aca88 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Sun, 11 Dec 2022 20:31:43 +0900 Subject: [PATCH 03/18] =?UTF-8?q?chore:=20google=20style=20sheet=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 --- java-google-style.xml | 598 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 598 insertions(+) create mode 100644 java-google-style.xml diff --git a/java-google-style.xml b/java-google-style.xml new file mode 100644 index 00000000..45bf14cc --- /dev/null +++ b/java-google-style.xml @@ -0,0 +1,598 @@ + + + + + + \ No newline at end of file From 743ba2a551f5cc872711b56d1e91567d7fff2228 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Sun, 11 Dec 2022 20:33:13 +0900 Subject: [PATCH 04/18] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=ED=95=B4=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 03b16445..460e2e87 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,16 @@ ## 구현할 기능 목록 -- [x] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. +- [] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. - 숫자의 범위는 1-9 이다. -- [x] 유저가 서로 다른 3자리의 수를 입력한다. +- [] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" -- [x] 결과를 계산한다. +- [] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. -- [x] 결과를 종합한다. +- [] 결과를 종합한다. - 스트라이크, 볼의 갯수가 둘 다 0이 아닐 시 그대로 출력 - 스트라이크, 볼의 갯수가 둘 다 0일 경우 낫싱 출력 - 스트라이크가 3개일 경우 정답처리 -- [x] 정답 처리 +- [] 정답 처리 - '1' 입력시에 게임 재실행 - '2' 입력시에 게임 종료 \ No newline at end of file From e19f07e718754e258fab68c3455cf96e9af5b9a7 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Mon, 19 Dec 2022 00:14:14 +0900 Subject: [PATCH 05/18] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=EC=9D=B4=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=ED=95=98=EB=A9=B4=20=EC=BB=B4=ED=93=A8?= =?UTF-8?q?=ED=84=B0=EB=8A=94=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?3=EC=9E=90=EB=A6=AC=EC=9D=98=20=EC=88=98=EB=A5=BC=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=20=EC=83=9D=EC=84=B1=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Main.java | 7 ++++++ .../java/baseball/domain/BaseballNumber.java | 25 +++++++++++++++++++ .../baseball/domain/BaseballNumberTest.java | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 src/main/java/baseball/Main.java create mode 100644 src/main/java/baseball/domain/BaseballNumber.java create mode 100644 src/test/java/baseball/domain/BaseballNumberTest.java diff --git a/src/main/java/baseball/Main.java b/src/main/java/baseball/Main.java new file mode 100644 index 00000000..0fefe1cd --- /dev/null +++ b/src/main/java/baseball/Main.java @@ -0,0 +1,7 @@ +package baseball; + +public class Main { + public static void main(String[] args) { + + } +} diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java new file mode 100644 index 00000000..b55ec24d --- /dev/null +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -0,0 +1,25 @@ +package baseball.domain; + +import java.sql.Array; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class BaseballNumber { + + private final List candidateNumbers = new ArrayList<>(); + private final int[] baseballNumbers = new int[3]; + + public BaseballNumber() { + for (int i = 1; i <= 9; i++) { + candidateNumbers.add(i); + } + } + + public void GenerateBaseballNumbers() { + Collections.shuffle(candidateNumbers); + for (int i = 0; i <= 2; i++) { + baseballNumbers[i] = candidateNumbers.get(i); + } + } +} diff --git a/src/test/java/baseball/domain/BaseballNumberTest.java b/src/test/java/baseball/domain/BaseballNumberTest.java new file mode 100644 index 00000000..1ec0aa8a --- /dev/null +++ b/src/test/java/baseball/domain/BaseballNumberTest.java @@ -0,0 +1,2 @@ +package baseball.domain;public class BaseballNumberTest { +} From 03a1b33e75afdb1eaf0cc41b8da08e0bbea6f544 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Mon, 19 Dec 2022 00:48:15 +0900 Subject: [PATCH 06/18] =?UTF-8?q?refactor:=20baseballNumbers=20->=20number?= =?UTF-8?q?s=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD=20&=20Arra?= =?UTF-8?q?y=20->=20ArrayList=EB=A1=9C=20=EC=9E=90=EB=A3=8C=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/BaseballNumber.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index b55ec24d..a9258c39 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -1,6 +1,5 @@ package baseball.domain; -import java.sql.Array; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -8,7 +7,7 @@ public class BaseballNumber { private final List candidateNumbers = new ArrayList<>(); - private final int[] baseballNumbers = new int[3]; + private final List numbers = new ArrayList<>(); public BaseballNumber() { for (int i = 1; i <= 9; i++) { @@ -17,9 +16,14 @@ public BaseballNumber() { } public void GenerateBaseballNumbers() { + numbers.clear(); Collections.shuffle(candidateNumbers); for (int i = 0; i <= 2; i++) { - baseballNumbers[i] = candidateNumbers.get(i); + numbers.add(candidateNumbers.get(i)); } } + + public List getNumbers() { + return numbers; + } } From 9a0943c8525e28839a2f3a0fc49332ee01194d88 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Mon, 19 Dec 2022 00:48:51 +0900 Subject: [PATCH 07/18] =?UTF-8?q?test:=20domain=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EC=88=AB=EC=9E=90=20=EB=B2=94=EC=9C=84=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++--- .../baseball/domain/BaseballNumberTest.java | 31 ++++++++++++++++++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 460e2e87..90013926 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,16 @@ ## 구현할 기능 목록 -- [] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. +- [ ] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. - 숫자의 범위는 1-9 이다. -- [] 유저가 서로 다른 3자리의 수를 입력한다. +- [ ] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" -- [] 결과를 계산한다. +- [ ] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. -- [] 결과를 종합한다. +- [ ] 결과를 종합한다. - 스트라이크, 볼의 갯수가 둘 다 0이 아닐 시 그대로 출력 - 스트라이크, 볼의 갯수가 둘 다 0일 경우 낫싱 출력 - 스트라이크가 3개일 경우 정답처리 -- [] 정답 처리 +- [ ] 정답 처리 - '1' 입력시에 게임 재실행 - '2' 입력시에 게임 종료 \ No newline at end of file diff --git a/src/test/java/baseball/domain/BaseballNumberTest.java b/src/test/java/baseball/domain/BaseballNumberTest.java index 1ec0aa8a..82cdf285 100644 --- a/src/test/java/baseball/domain/BaseballNumberTest.java +++ b/src/test/java/baseball/domain/BaseballNumberTest.java @@ -1,2 +1,31 @@ -package baseball.domain;public class BaseballNumberTest { +package baseball.domain; + +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class BaseballNumberTest { + + BaseballNumber baseballNumber; + + @BeforeEach + public void beforeEach() { + baseballNumber = new BaseballNumber(); + } + + @DisplayName("생성되는 숫자의 범위는 1-9이다.") + @Test + void GenerateBaseballNumbersTest() { + // given + baseballNumber.GenerateBaseballNumbers(); + + // when + List numbers = baseballNumber.getNumbers(); + + // then + assertThat(numbers.stream().allMatch(v -> 1 <= v && v <= 9)).isTrue(); + + } } From 766ed885ee10c9309ab744f95281b2fbc886eeff Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Wed, 21 Dec 2022 01:18:41 +0900 Subject: [PATCH 08/18] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EA=B0=80=20?= =?UTF-8?q?=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=203=EC=9E=90=EB=A6=AC?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EB=A5=BC=20=EC=9E=85=EB=A0=A5=ED=95=9C?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/baseball/Main.java | 12 ++++ src/main/java/baseball/view/BaseballView.java | 59 +++++++++++++++++++ 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball/view/BaseballView.java diff --git a/README.md b/README.md index 90013926..1711096b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ## 구현할 기능 목록 -- [ ] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. +- [x] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. - 숫자의 범위는 1-9 이다. - [ ] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" diff --git a/src/main/java/baseball/Main.java b/src/main/java/baseball/Main.java index 0fefe1cd..4dcc2f0a 100644 --- a/src/main/java/baseball/Main.java +++ b/src/main/java/baseball/Main.java @@ -1,7 +1,19 @@ package baseball; +import baseball.view.BaseballView; +import java.util.List; + public class Main { public static void main(String[] args) { + BaseballView baseballView = new BaseballView(); + + try { + List playerBaseballNumber = baseballView.getPlayerBaseballNumber(); + System.out.println(playerBaseballNumber); + } catch (Exception e) { + System.out.println(e.getMessage()); + + } } } diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java new file mode 100644 index 00000000..d1f5c6e3 --- /dev/null +++ b/src/main/java/baseball/view/BaseballView.java @@ -0,0 +1,59 @@ +package baseball.view; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class BaseballView { + + private static final int BASEBALL_NUMBER_LENGTH = 3; + private final BufferedReader bufferedReader; + + public BaseballView() { + bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + } + + public List getPlayerBaseballNumber() throws IOException { + System.out.print("숫자를 입력해주세요 : "); + String playerInput = bufferedReader.readLine(); + validatePlayerInput(playerInput); + return Arrays.stream(playerInput.split("")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } + + public void validatePlayerInput(String playerInput) { + isValidLength(playerInput); + isOnlyNumber(playerInput); + isNotDuplicated(playerInput); + } + + private void isValidLength(String playerInput) { + if (playerInput.length() != BASEBALL_NUMBER_LENGTH) { + throw new IllegalArgumentException("3자리로 입력해주세요."); + } + } + + private void isOnlyNumber(String playerInput) { + playerInput.chars().mapToObj(x -> (char)x).forEach(this::isNumber); + } + + + private void isNumber(char ch){ + if (!Character.isDigit(ch)) { + throw new IllegalArgumentException("숫자만 입력 가능합니다."); + } + } + + private void isNotDuplicated(String playerInput) { + Set playerInputSet = new HashSet<> (Arrays.asList(playerInput.split(""))); + if (playerInputSet.size() != playerInput.length()) { + throw new IllegalArgumentException("숫자는 중복되지 않게 입력해주세요."); + } + } +} \ No newline at end of file From 0b6eb4997935ce9c8083633e2ad99efe87a9ac59 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Wed, 21 Dec 2022 13:21:59 +0900 Subject: [PATCH 09/18] =?UTF-8?q?test:=20=EC=9C=A0=EC=A0=80=EA=B0=80=20?= =?UTF-8?q?=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=203=EC=9E=90=EB=A6=AC?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EB=A5=BC=20=EC=9E=85=EB=A0=A5=ED=95=9C?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/baseball/view/BaseballViewTest.java | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/test/java/baseball/view/BaseballViewTest.java diff --git a/README.md b/README.md index 1711096b..23e55c6a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - [x] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. - 숫자의 범위는 1-9 이다. -- [ ] 유저가 서로 다른 3자리의 수를 입력한다. +- [x] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" - [ ] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. diff --git a/src/test/java/baseball/view/BaseballViewTest.java b/src/test/java/baseball/view/BaseballViewTest.java new file mode 100644 index 00000000..44276e09 --- /dev/null +++ b/src/test/java/baseball/view/BaseballViewTest.java @@ -0,0 +1,47 @@ +package baseball.view; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class BaseballViewTest { + + BaseballView baseballView; + + @BeforeEach + public void beforeEach() { + baseballView = new BaseballView(); + } + + @DisplayName("입력이 3글자가 아니면 Exception이 발생합니다.") + @Test + void isValidLength() { + String fourLengthInput = "1234"; + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(fourLengthInput) + ); + } + + @DisplayName("숫자가 아닌 다른 값이 input으로 들어가면 Exception이 발생합니다.") + @Test + void isOnlyNumber() { + String notOnlyNumberInput = "12#"; + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(notOnlyNumberInput) + ); + } + + @DisplayName("중복된 숫자를 입력하면 Exception이 발생합니다.") + @Test + void isNotDuplicated() { + String duplicatedNumberInput = "112"; + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(duplicatedNumberInput) + ); + } +} \ No newline at end of file From 60ff7333e328263107c6814f7b5dc94b22165d57 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Wed, 21 Dec 2022 17:10:30 +0900 Subject: [PATCH 10/18] =?UTF-8?q?test:=20=EC=9C=A0=EC=A0=80=EA=B0=80=20?= =?UTF-8?q?=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=203=EC=9E=90=EB=A6=AC?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EB=A5=BC=20=EC=9E=85=EB=A0=A5=ED=95=9C?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/baseball/view/BaseballViewTest.java | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/test/java/baseball/view/BaseballViewTest.java diff --git a/README.md b/README.md index 1711096b..23e55c6a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - [x] 게임이 시작하면 컴퓨터는 서로 다른 3자리의 수를 랜덤 생성한다. - 숫자의 범위는 1-9 이다. -- [ ] 유저가 서로 다른 3자리의 수를 입력한다. +- [x] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" - [ ] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. diff --git a/src/test/java/baseball/view/BaseballViewTest.java b/src/test/java/baseball/view/BaseballViewTest.java new file mode 100644 index 00000000..891b1f58 --- /dev/null +++ b/src/test/java/baseball/view/BaseballViewTest.java @@ -0,0 +1,56 @@ +package baseball.view; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class BaseballViewTest { + + BaseballView baseballView; + + @BeforeEach + public void beforeEach() { + baseballView = new BaseballView(); + } + + @DisplayName("입력이 3글자가 아니면 Exception이 발생합니다.") + @Test + void isValidLength() { + // given + String fourLengthInput = "1234"; + + // when & then + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(fourLengthInput) + ); + } + + @DisplayName("숫자가 아닌 다른 값이 input으로 들어가면 Exception이 발생합니다.") + @Test + void isOnlyNumber() { + // given + String notOnlyNumberInput = "12#"; + + // when & then + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(notOnlyNumberInput) + ); + } + + @DisplayName("중복된 숫자를 입력하면 Exception이 발생합니다.") + @Test + void isNotDuplicated() { + // given + String duplicatedNumberInput = "112"; + + // when & then + assertThrows( + IllegalArgumentException.class, + () -> baseballView.validatePlayerInput(duplicatedNumberInput) + ); + } +} \ No newline at end of file From 7fb3b09eafc8de3ecacb0cb8b0c89a76e8395e2e Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 02:32:34 +0900 Subject: [PATCH 11/18] =?UTF-8?q?feat:=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +- src/main/java/baseball/Main.java | 19 +++--- .../controller/BaseballController.java | 33 +++++++++++ .../java/baseball/domain/BaseballNumber.java | 6 +- .../java/baseball/dto/BaseballResult.java | 3 + .../baseball/service/BaseballService.java | 58 +++++++++++++++++++ src/main/java/baseball/view/BaseballView.java | 26 +++++++-- .../baseball/domain/BaseballNumberTest.java | 2 +- 8 files changed, 129 insertions(+), 21 deletions(-) create mode 100644 src/main/java/baseball/controller/BaseballController.java create mode 100644 src/main/java/baseball/dto/BaseballResult.java create mode 100644 src/main/java/baseball/service/BaseballService.java diff --git a/build.gradle b/build.gradle index d6eb8110..d702a9e2 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { group = 'camp.nextstep' version = '1.0.0' -sourceCompatibility = '11' +sourceCompatibility = "16" repositories { mavenCentral() @@ -18,3 +18,4 @@ dependencies { tasks.named('test') { useJUnitPlatform() } +targetCompatibility = JavaVersion.VERSION_16 diff --git a/src/main/java/baseball/Main.java b/src/main/java/baseball/Main.java index 4dcc2f0a..07c7e4d1 100644 --- a/src/main/java/baseball/Main.java +++ b/src/main/java/baseball/Main.java @@ -1,19 +1,16 @@ package baseball; +import baseball.controller.BaseballController; +import baseball.domain.BaseballNumber; +import baseball.service.BaseballService; import baseball.view.BaseballView; -import java.util.List; public class Main { public static void main(String[] args) { - BaseballView baseballView = new BaseballView(); - - try { - List playerBaseballNumber = baseballView.getPlayerBaseballNumber(); - System.out.println(playerBaseballNumber); - } catch (Exception e) { - System.out.println(e.getMessage()); - - } - + BaseballNumber baseballNumber = new BaseballNumber(); + BaseballService baseballService = new BaseballService(baseballNumber); + BaseballController baseballController = new BaseballController(baseballService); + BaseballView baseballView = new BaseballView(baseballController); + baseballView.startGame(); } } diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java new file mode 100644 index 00000000..0eafb855 --- /dev/null +++ b/src/main/java/baseball/controller/BaseballController.java @@ -0,0 +1,33 @@ +package baseball.controller; + +import baseball.dto.BaseballResult; +import baseball.service.BaseballService; +import java.util.List; + +public class BaseballController { + + BaseballService baseballService; + + public BaseballController(BaseballService baseballService) { + this.baseballService = baseballService; + } + + public BaseballResult getBaseballResult(List userBaseballNumber) { + Integer strikeCount = baseballService.getStrikeCount(userBaseballNumber); + Integer ballCount = baseballService.getBallCount(userBaseballNumber); + return new BaseballResult(strikeCount, ballCount); + } + + public boolean isPlaying() { + return baseballService.isPlaying(); + } + + public void startGame() { + baseballService.startGame(); + } + + public void finishGame() { + baseballService.finishGame(); + } + +} diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index a9258c39..944d02bb 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -5,7 +5,7 @@ import java.util.List; public class BaseballNumber { - + private static final int BASEBALL_NUMBER_LENGTH = 3; private final List candidateNumbers = new ArrayList<>(); private final List numbers = new ArrayList<>(); @@ -15,10 +15,10 @@ public BaseballNumber() { } } - public void GenerateBaseballNumbers() { + public void generateBaseballNumbers() { numbers.clear(); Collections.shuffle(candidateNumbers); - for (int i = 0; i <= 2; i++) { + for (int i = 0; i < BASEBALL_NUMBER_LENGTH; i++) { numbers.add(candidateNumbers.get(i)); } } diff --git a/src/main/java/baseball/dto/BaseballResult.java b/src/main/java/baseball/dto/BaseballResult.java new file mode 100644 index 00000000..95aaa6d7 --- /dev/null +++ b/src/main/java/baseball/dto/BaseballResult.java @@ -0,0 +1,3 @@ +package baseball.dto; + +public record BaseballResult (Integer strikeCount, Integer ballCount){} diff --git a/src/main/java/baseball/service/BaseballService.java b/src/main/java/baseball/service/BaseballService.java new file mode 100644 index 00000000..18d35554 --- /dev/null +++ b/src/main/java/baseball/service/BaseballService.java @@ -0,0 +1,58 @@ +package baseball.service; + +import baseball.domain.BaseballNumber; +import java.util.List; + +public class BaseballService { + + private final int RUNNING = 1; + private final int READY = 0; + private final BaseballNumber baseballNumber; + private int status; + + public BaseballService(BaseballNumber baseballNumber) { + this.baseballNumber = baseballNumber; + } + + public int getBallCount(List userBaseballNumber) { + List computerBaseballNumber = baseballNumber.getNumbers(); + int ballCount = 0; + + for (int i = 0; i < userBaseballNumber.size(); i++) { + for (int j = 0; j < computerBaseballNumber.size(); j++){ + if (i != j & userBaseballNumber.get(i).equals(computerBaseballNumber.get(j))) { + ballCount++; + } + } + } + + return ballCount; + } + + public int getStrikeCount(List userBaseballNumber) { + List computerBaseballNumber = baseballNumber.getNumbers(); + int strikeCount = 0; + + for (int i = 0; i < userBaseballNumber.size(); i++) { + if (userBaseballNumber.get(i).equals(computerBaseballNumber.get(i))) { + strikeCount++; + } + } + + return strikeCount; + } + + public boolean isPlaying() { + return status == RUNNING; + } + + public void startGame(){ + status = RUNNING; + baseballNumber.generateBaseballNumbers(); + } + + public void finishGame(){ + status = READY; + } + +} diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java index d1f5c6e3..6488d068 100644 --- a/src/main/java/baseball/view/BaseballView.java +++ b/src/main/java/baseball/view/BaseballView.java @@ -1,26 +1,41 @@ package baseball.view; +import baseball.controller.BaseballController; +import baseball.dto.BaseballResult; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Scanner; import java.util.Set; import java.util.stream.Collectors; public class BaseballView { private static final int BASEBALL_NUMBER_LENGTH = 3; - private final BufferedReader bufferedReader; + private final Scanner scanner; + private final BaseballController baseballController; - public BaseballView() { - bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + public BaseballView(BaseballController baseballController) { + this.baseballController = baseballController; + this.scanner = new Scanner(System.in); } - public List getPlayerBaseballNumber() throws IOException { + public void startGame(){ + while (baseballController.isPlaying()) { + baseballController.startGame(); + List playerBaseballNumber = getPlayerBaseballNumber(); + BaseballResult baseballResult = baseballController + .getBaseballResult(playerBaseballNumber); + + } + } + + public List getPlayerBaseballNumber() { System.out.print("숫자를 입력해주세요 : "); - String playerInput = bufferedReader.readLine(); + String playerInput = scanner.nextLine(); validatePlayerInput(playerInput); return Arrays.stream(playerInput.split("")) .map(Integer::parseInt) @@ -56,4 +71,5 @@ private void isNotDuplicated(String playerInput) { throw new IllegalArgumentException("숫자는 중복되지 않게 입력해주세요."); } } + } \ No newline at end of file diff --git a/src/test/java/baseball/domain/BaseballNumberTest.java b/src/test/java/baseball/domain/BaseballNumberTest.java index 82cdf285..22ebbd1d 100644 --- a/src/test/java/baseball/domain/BaseballNumberTest.java +++ b/src/test/java/baseball/domain/BaseballNumberTest.java @@ -19,7 +19,7 @@ public void beforeEach() { @Test void GenerateBaseballNumbersTest() { // given - baseballNumber.GenerateBaseballNumbers(); + baseballNumber.generateBaseballNumbers(); // when List numbers = baseballNumber.getNumbers(); From 29bf833547f496b8dbb2ac0e28e4bf2e8ae9add1 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 13:27:02 +0900 Subject: [PATCH 12/18] =?UTF-8?q?test:=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/BaseballNumber.java | 16 +++--- .../baseball/service/BaseballService.java | 9 ++-- .../baseball/domain/BaseballNumberTest.java | 4 +- .../baseball/service/BaseballServiceTest.java | 49 +++++++++++++++++++ .../java/baseball/view/BaseballViewTest.java | 4 +- 5 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 src/test/java/baseball/service/BaseballServiceTest.java diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index 944d02bb..d679665d 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -7,7 +7,7 @@ public class BaseballNumber { private static final int BASEBALL_NUMBER_LENGTH = 3; private final List candidateNumbers = new ArrayList<>(); - private final List numbers = new ArrayList<>(); + private List number = new ArrayList<>(); public BaseballNumber() { for (int i = 1; i <= 9; i++) { @@ -15,15 +15,19 @@ public BaseballNumber() { } } - public void generateBaseballNumbers() { - numbers.clear(); + public void generateBaseballNumber() { + number.clear(); Collections.shuffle(candidateNumbers); for (int i = 0; i < BASEBALL_NUMBER_LENGTH; i++) { - numbers.add(candidateNumbers.get(i)); + number.add(candidateNumbers.get(i)); } } - public List getNumbers() { - return numbers; + public List getNumber() { + return number; + } + + public void setNumber(List number) { + this.number = number; } } diff --git a/src/main/java/baseball/service/BaseballService.java b/src/main/java/baseball/service/BaseballService.java index 18d35554..b1079b6b 100644 --- a/src/main/java/baseball/service/BaseballService.java +++ b/src/main/java/baseball/service/BaseballService.java @@ -15,7 +15,7 @@ public BaseballService(BaseballNumber baseballNumber) { } public int getBallCount(List userBaseballNumber) { - List computerBaseballNumber = baseballNumber.getNumbers(); + List computerBaseballNumber = baseballNumber.getNumber(); int ballCount = 0; for (int i = 0; i < userBaseballNumber.size(); i++) { @@ -30,7 +30,7 @@ public int getBallCount(List userBaseballNumber) { } public int getStrikeCount(List userBaseballNumber) { - List computerBaseballNumber = baseballNumber.getNumbers(); + List computerBaseballNumber = baseballNumber.getNumber(); int strikeCount = 0; for (int i = 0; i < userBaseballNumber.size(); i++) { @@ -48,11 +48,14 @@ public boolean isPlaying() { public void startGame(){ status = RUNNING; - baseballNumber.generateBaseballNumbers(); + baseballNumber.generateBaseballNumber(); } public void finishGame(){ status = READY; } + public void setBaseballNumber(List baseballNumber) { + this.baseballNumber.setNumber(baseballNumber); + } } diff --git a/src/test/java/baseball/domain/BaseballNumberTest.java b/src/test/java/baseball/domain/BaseballNumberTest.java index 22ebbd1d..c40e9f73 100644 --- a/src/test/java/baseball/domain/BaseballNumberTest.java +++ b/src/test/java/baseball/domain/BaseballNumberTest.java @@ -19,10 +19,10 @@ public void beforeEach() { @Test void GenerateBaseballNumbersTest() { // given - baseballNumber.generateBaseballNumbers(); + baseballNumber.generateBaseballNumber(); // when - List numbers = baseballNumber.getNumbers(); + List numbers = baseballNumber.getNumber(); // then assertThat(numbers.stream().allMatch(v -> 1 <= v && v <= 9)).isTrue(); diff --git a/src/test/java/baseball/service/BaseballServiceTest.java b/src/test/java/baseball/service/BaseballServiceTest.java new file mode 100644 index 00000000..ed69e1fd --- /dev/null +++ b/src/test/java/baseball/service/BaseballServiceTest.java @@ -0,0 +1,49 @@ +package baseball.service; + +import static org.assertj.core.api.Assertions.assertThat; + +import baseball.domain.BaseballNumber; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class BaseballServiceTest { + + private BaseballNumber baseballNumber; + private BaseballService baseballService; + + @BeforeEach + public void beforeEach() { + baseballNumber = new BaseballNumber(); + baseballService = new BaseballService(baseballNumber); + baseballService.startGame(); + } + + @DisplayName("볼의 갯수를 계산할 수 있습니다.") + @Test + void getBallCount() { + // given + List userBaseballNumber = new ArrayList<>(Arrays.asList(1, 2, 3)); + List computerBaseballNumber = new ArrayList<>(Arrays.asList(1, 3, 2)); + baseballService.setBaseballNumber(computerBaseballNumber); + + // when & then + assertThat(baseballService.getBallCount(userBaseballNumber)).isEqualTo(2); + + } + + @DisplayName("스트라이크의 갯수를 계산할 수 있습니다.") + @Test + void getStrikeCount() { + // given + List userBaseballNumber = new ArrayList<>(Arrays.asList(1, 2, 4)); + List computerBaseballNumber = new ArrayList<>(Arrays.asList(1, 2, 3)); + baseballService.setBaseballNumber(computerBaseballNumber); + + // when & then + assertThat(baseballService.getStrikeCount(userBaseballNumber)).isEqualTo(2); + } +} \ No newline at end of file diff --git a/src/test/java/baseball/view/BaseballViewTest.java b/src/test/java/baseball/view/BaseballViewTest.java index 591823ec..30db711a 100644 --- a/src/test/java/baseball/view/BaseballViewTest.java +++ b/src/test/java/baseball/view/BaseballViewTest.java @@ -11,14 +11,14 @@ class BaseballViewTest { - BaseballView baseballView; + private BaseballView baseballView; @BeforeEach public void beforeEach() { BaseballNumber baseballNumber = new BaseballNumber(); BaseballService baseballService = new BaseballService(baseballNumber); BaseballController baseballController = new BaseballController(baseballService); - BaseballView baseballView = new BaseballView(baseballController); + baseballView = new BaseballView(baseballController); } @DisplayName("입력이 3글자가 아니면 Exception이 발생합니다.") From ac6c3c040c79cc20f2de2c256bb9f261ef6ef699 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 15:33:32 +0900 Subject: [PATCH 13/18] =?UTF-8?q?refactor:=20BaseballRequest=20->=20Baseba?= =?UTF-8?q?llRequestDto=20=EB=A1=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/baseball/controller/BaseballController.java | 6 +++--- src/main/java/baseball/dto/BaseballResult.java | 3 --- src/main/java/baseball/dto/BaseballResultDto.java | 3 +++ src/main/java/baseball/view/BaseballView.java | 7 ++----- 5 files changed, 9 insertions(+), 12 deletions(-) delete mode 100644 src/main/java/baseball/dto/BaseballResult.java create mode 100644 src/main/java/baseball/dto/BaseballResultDto.java diff --git a/README.md b/README.md index 23e55c6a..5a37b0e9 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - 숫자의 범위는 1-9 이다. - [x] 유저가 서로 다른 3자리의 수를 입력한다. - 입력 포맷 : "숫자를 입력해주세요 : %s" -- [ ] 결과를 계산한다. +- [x] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. - [ ] 결과를 종합한다. - 스트라이크, 볼의 갯수가 둘 다 0이 아닐 시 그대로 출력 diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 0eafb855..03dd33d1 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -1,6 +1,6 @@ package baseball.controller; -import baseball.dto.BaseballResult; +import baseball.dto.BaseballResultDto; import baseball.service.BaseballService; import java.util.List; @@ -12,10 +12,10 @@ public BaseballController(BaseballService baseballService) { this.baseballService = baseballService; } - public BaseballResult getBaseballResult(List userBaseballNumber) { + public BaseballResultDto getBaseballResult(List userBaseballNumber) { Integer strikeCount = baseballService.getStrikeCount(userBaseballNumber); Integer ballCount = baseballService.getBallCount(userBaseballNumber); - return new BaseballResult(strikeCount, ballCount); + return new BaseballResultDto(strikeCount, ballCount); } public boolean isPlaying() { diff --git a/src/main/java/baseball/dto/BaseballResult.java b/src/main/java/baseball/dto/BaseballResult.java deleted file mode 100644 index 95aaa6d7..00000000 --- a/src/main/java/baseball/dto/BaseballResult.java +++ /dev/null @@ -1,3 +0,0 @@ -package baseball.dto; - -public record BaseballResult (Integer strikeCount, Integer ballCount){} diff --git a/src/main/java/baseball/dto/BaseballResultDto.java b/src/main/java/baseball/dto/BaseballResultDto.java new file mode 100644 index 00000000..1ec99001 --- /dev/null +++ b/src/main/java/baseball/dto/BaseballResultDto.java @@ -0,0 +1,3 @@ +package baseball.dto; + +public record BaseballResultDto(Integer strikeCount, Integer ballCount){} diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java index 6488d068..1c93948c 100644 --- a/src/main/java/baseball/view/BaseballView.java +++ b/src/main/java/baseball/view/BaseballView.java @@ -1,10 +1,7 @@ package baseball.view; import baseball.controller.BaseballController; -import baseball.dto.BaseballResult; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import baseball.dto.BaseballResultDto; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -27,7 +24,7 @@ public void startGame(){ while (baseballController.isPlaying()) { baseballController.startGame(); List playerBaseballNumber = getPlayerBaseballNumber(); - BaseballResult baseballResult = baseballController + BaseballResultDto baseballResultDto = baseballController .getBaseballResult(playerBaseballNumber); } From 90cb92543f1640008c7e86ad944392c83e1efee5 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 21:33:53 +0900 Subject: [PATCH 14/18] =?UTF-8?q?feat:=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EC=A2=85=ED=95=A9=ED=95=9C=EB=8B=A4.=20&=20=EC=A0=95=EB=8B=B5?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/common/BaseballEnum.java | 8 ++ .../java/baseball/domain/BaseballNumber.java | 3 +- src/main/java/baseball/view/BaseballView.java | 78 +++++++++++++++++-- 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 src/main/java/baseball/common/BaseballEnum.java diff --git a/src/main/java/baseball/common/BaseballEnum.java b/src/main/java/baseball/common/BaseballEnum.java new file mode 100644 index 00000000..3e13890f --- /dev/null +++ b/src/main/java/baseball/common/BaseballEnum.java @@ -0,0 +1,8 @@ +package baseball.common; + +public class BaseballEnum { + public final static int CONTINUE_THE_GAME = 1; + public final static int FINISH_THE_GAME = 2; + public final static int BASEBALL_NUMBER_LENGTH = 3; + +} diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index d679665d..22db8c6a 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -1,11 +1,12 @@ package baseball.domain; +import static baseball.common.BaseballEnum.BASEBALL_NUMBER_LENGTH; + import java.util.ArrayList; import java.util.Collections; import java.util.List; public class BaseballNumber { - private static final int BASEBALL_NUMBER_LENGTH = 3; private final List candidateNumbers = new ArrayList<>(); private List number = new ArrayList<>(); diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java index 1c93948c..feb2974f 100644 --- a/src/main/java/baseball/view/BaseballView.java +++ b/src/main/java/baseball/view/BaseballView.java @@ -1,5 +1,9 @@ package baseball.view; +import static baseball.common.BaseballEnum.BASEBALL_NUMBER_LENGTH; +import static baseball.common.BaseballEnum.CONTINUE_THE_GAME; +import static baseball.common.BaseballEnum.FINISH_THE_GAME; + import baseball.controller.BaseballController; import baseball.dto.BaseballResultDto; import java.util.Arrays; @@ -11,7 +15,6 @@ public class BaseballView { - private static final int BASEBALL_NUMBER_LENGTH = 3; private final Scanner scanner; private final BaseballController baseballController; @@ -20,20 +23,66 @@ public BaseballView(BaseballController baseballController) { this.scanner = new Scanner(System.in); } - public void startGame(){ + public void startGame() { + baseballController.startGame(); while (baseballController.isPlaying()) { - baseballController.startGame(); - List playerBaseballNumber = getPlayerBaseballNumber(); - BaseballResultDto baseballResultDto = baseballController - .getBaseballResult(playerBaseballNumber); + playGame(); + } + } + + public void playGame() { + List playerBaseballNumber = getPlayerBaseballNumber(); + + BaseballResultDto baseballResultDto = baseballController + .getBaseballResult(playerBaseballNumber); + System.out.println(getBaseballResultString(baseballResultDto)); + checkGameStatus(baseballResultDto); + } + + public void checkGameStatus(BaseballResultDto baseballResultDto) { + if (baseballResultDto.strikeCount() == BASEBALL_NUMBER_LENGTH) { + baseballController.finishGame(); + System.out.printf("%d개의 숫자를 모두 맞히셨습니다! 게임 종료 \n", BASEBALL_NUMBER_LENGTH); + checkContinueGame(); + } + } + + private void checkContinueGame() { + System.out.printf("게임을 새로 시작하려면 %d, 종료하려면 %d를 입력하세요.\n", + CONTINUE_THE_GAME, FINISH_THE_GAME); + int playerStatusInput = scanner.nextInt(); + try { + validatePlayerStatusInput(playerStatusInput); + restartGameIfContinue(playerStatusInput); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + checkContinueGame(); } } + private void validatePlayerStatusInput(int playerInput) { + if (playerInput != CONTINUE_THE_GAME && playerInput != FINISH_THE_GAME) { + throw new IllegalArgumentException( + String.format("%d 또는 %d만 입력 가능합니다.", CONTINUE_THE_GAME, FINISH_THE_GAME) + ); + } + } + + private void restartGameIfContinue(int playerStatusInput) { + if (playerStatusInput == CONTINUE_THE_GAME) { + baseballController.startGame(); + } + } public List getPlayerBaseballNumber() { System.out.print("숫자를 입력해주세요 : "); String playerInput = scanner.nextLine(); - validatePlayerInput(playerInput); + try { + validatePlayerInput(playerInput); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getPlayerBaseballNumber(); + } return Arrays.stream(playerInput.split("")) .map(Integer::parseInt) .collect(Collectors.toList()); @@ -69,4 +118,19 @@ private void isNotDuplicated(String playerInput) { } } + private String getBaseballResultString(BaseballResultDto baseballResultDto) { + String baseballResultString = getStrikeString(baseballResultDto) + + getBallString(baseballResultDto); + return baseballResultString.isBlank() ? "낫싱" : baseballResultString; + } + + private String getStrikeString(BaseballResultDto baseballResultDto) { + int strikeCount = baseballResultDto.strikeCount(); + return strikeCount != 0 ? String.format("%d 스트라이크 ", strikeCount) : ""; + } + + private String getBallString(BaseballResultDto baseballResultDto) { + int ballCount = baseballResultDto.ballCount(); + return ballCount != 0 ? String.format("%d 볼", ballCount) : ""; + } } \ No newline at end of file From 821cd28726e050dcedb21c5e5d0fe272c28fe960 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 21:59:22 +0900 Subject: [PATCH 15/18] =?UTF-8?q?test:=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EC=A2=85=ED=95=A9=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/view/BaseballView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java index feb2974f..4da73abb 100644 --- a/src/main/java/baseball/view/BaseballView.java +++ b/src/main/java/baseball/view/BaseballView.java @@ -118,7 +118,7 @@ private void isNotDuplicated(String playerInput) { } } - private String getBaseballResultString(BaseballResultDto baseballResultDto) { + public String getBaseballResultString(BaseballResultDto baseballResultDto) { String baseballResultString = getStrikeString(baseballResultDto) + getBallString(baseballResultDto); return baseballResultString.isBlank() ? "낫싱" : baseballResultString; From c4e3fa4ea7349ba2a2f8a943fa8bd127a31e44e7 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 22:12:14 +0900 Subject: [PATCH 16/18] =?UTF-8?q?test:=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EC=A2=85=ED=95=A9=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/view/BaseballViewTest.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/test/java/baseball/view/BaseballViewTest.java b/src/test/java/baseball/view/BaseballViewTest.java index 30db711a..3bb9be9f 100644 --- a/src/test/java/baseball/view/BaseballViewTest.java +++ b/src/test/java/baseball/view/BaseballViewTest.java @@ -1,9 +1,10 @@ package baseball.view; import static org.junit.jupiter.api.Assertions.*; - +import static org.assertj.core.api.Assertions.assertThat; import baseball.controller.BaseballController; import baseball.domain.BaseballNumber; +import baseball.dto.BaseballResultDto; import baseball.service.BaseballService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -59,4 +60,43 @@ void isNotDuplicated() { () -> baseballView.validatePlayerInput(duplicatedNumberInput) ); } + + @DisplayName("하나도 맞지 않으면 '낫싱'이 반환됩니다.") + @Test + void getBaseballResultString() { + // given + BaseballResultDto baseballResultDto = new BaseballResultDto(0, 0); + + // when + String resultString = baseballView.getBaseballResultString(baseballResultDto); + + // then + assertThat(resultString).isEqualTo("낫싱"); + } + + @DisplayName("스트라이크가 0이 아니면 스트라이크에 대한 정보가 포함됩니다.") + @Test + void getStrikeString() { + // given + BaseballResultDto baseballResultDto = new BaseballResultDto(1, 0); + + // when + String resultString = baseballView.getBaseballResultString(baseballResultDto); + + // then + assertThat(resultString).contains("스트라이크"); + } + + @DisplayName("볼이 0이 아니면 볼에 대한 정보가 포함됩니다.") + @Test + void getBallString() { + // given + BaseballResultDto baseballResultDto = new BaseballResultDto(0, 1); + + // when + String resultString = baseballView.getBaseballResultString(baseballResultDto); + + // then + assertThat(resultString).contains("볼"); + } } \ No newline at end of file From d447860b8bdc5893b45a4411887d20701ada4318 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 22:25:13 +0900 Subject: [PATCH 17/18] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD=20&=20public=20->=20private=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/baseball/view/BaseballView.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baseball/view/BaseballView.java b/src/main/java/baseball/view/BaseballView.java index 4da73abb..f357360f 100644 --- a/src/main/java/baseball/view/BaseballView.java +++ b/src/main/java/baseball/view/BaseballView.java @@ -30,7 +30,7 @@ public void startGame() { } } - public void playGame() { + private void playGame() { List playerBaseballNumber = getPlayerBaseballNumber(); BaseballResultDto baseballResultDto = baseballController @@ -40,15 +40,15 @@ public void playGame() { checkGameStatus(baseballResultDto); } - public void checkGameStatus(BaseballResultDto baseballResultDto) { + private void checkGameStatus(BaseballResultDto baseballResultDto) { if (baseballResultDto.strikeCount() == BASEBALL_NUMBER_LENGTH) { baseballController.finishGame(); System.out.printf("%d개의 숫자를 모두 맞히셨습니다! 게임 종료 \n", BASEBALL_NUMBER_LENGTH); - checkContinueGame(); + checkToContinueGame(); } } - private void checkContinueGame() { + private void checkToContinueGame() { System.out.printf("게임을 새로 시작하려면 %d, 종료하려면 %d를 입력하세요.\n", CONTINUE_THE_GAME, FINISH_THE_GAME); int playerStatusInput = scanner.nextInt(); @@ -57,7 +57,7 @@ private void checkContinueGame() { restartGameIfContinue(playerStatusInput); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); - checkContinueGame(); + checkToContinueGame(); } } @@ -74,7 +74,7 @@ private void restartGameIfContinue(int playerStatusInput) { baseballController.startGame(); } } - public List getPlayerBaseballNumber() { + private List getPlayerBaseballNumber() { System.out.print("숫자를 입력해주세요 : "); String playerInput = scanner.nextLine(); try { From f1386e15880f11c7b23bf593d08d98fb51125486 Mon Sep 17 00:00:00 2001 From: ekzm8523 Date: Thu, 22 Dec 2022 22:26:53 +0900 Subject: [PATCH 18/18] docs : Check readme todo list --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5a37b0e9..03b16445 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,10 @@ - 입력 포맷 : "숫자를 입력해주세요 : %s" - [x] 결과를 계산한다. - 스트라이크, 볼의 갯수를 계산하여 return 한다. -- [ ] 결과를 종합한다. +- [x] 결과를 종합한다. - 스트라이크, 볼의 갯수가 둘 다 0이 아닐 시 그대로 출력 - 스트라이크, 볼의 갯수가 둘 다 0일 경우 낫싱 출력 - 스트라이크가 3개일 경우 정답처리 -- [ ] 정답 처리 +- [x] 정답 처리 - '1' 입력시에 게임 재실행 - '2' 입력시에 게임 종료 \ No newline at end of file