From 65fcc514fb61513b731129812f763c81e4cd36fb Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 16:46:00 +0900 Subject: [PATCH 01/75] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2..79154bdcbf 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,27 @@ +# 숫자 야구 + +## 기능 요구사항 정리 + +- [ ] 게임 시작 문구 출력한다. +- [ ] 랜덤 숫자를 생성한다. + - 숫자는 3자리다. + - 숫자는 중복되지 않아야 한다. +- [ ] 숫자를 입력받는다. + - 숫자는 1~9 사이의 3자리 정수다. + - [ ] 입력 값에서 공백을 제거한다. + - [ ] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` +- [ ] 랜덤 숫자와 입력받은 숫자를 비교한다. + - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 +- [ ] 비교 결과를 출력한다. + - 결과는 볼, 스트라이크 개수로 표시한다. + - [ ] 3스트라이크이면 게임을 종료한다. + - [ ] 3스트라이크가 아니면 게임으로 돌아간다. +- [ ] 게임이 종료되면 재진행 여부를 묻는다. + - [ ] 재진행 여부를 입력받는다. + - 재진행 여부는 1 또는 2인 정수다. + - [ ] 입력 값에서 공백을 제거한다. + - [ ] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file From 5733af7abb87f91605aa0f47108ec1a9a8887918 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:05:02 +0900 Subject: [PATCH 02/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=EB=AC=B8=EA=B5=AC=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 79154bdcbf..0bc3b634ff 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ ## 기능 요구사항 정리 -- [ ] 게임 시작 문구 출력한다. +- [x] 게임 시작 문구 출력한다. - [ ] 랜덤 숫자를 생성한다. - 숫자는 3자리다. - 숫자는 중복되지 않아야 한다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..d465b48aef 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,8 @@ package baseball; public class Application { + public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("숫자 야구 게임을 시작합니다."); } } From 1e075403534a454546a17cf19728ec4dbc0ad764 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:07:45 +0900 Subject: [PATCH 03/75] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 0bc3b634ff..0e2b426ae2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,7 +3,7 @@ ## 기능 요구사항 정리 - [x] 게임 시작 문구 출력한다. -- [ ] 랜덤 숫자를 생성한다. +- [x] 랜덤 숫자를 생성한다. - 숫자는 3자리다. - 숫자는 중복되지 않아야 한다. - [ ] 숫자를 입력받는다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index d465b48aef..f2509e815a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,8 +1,20 @@ package baseball; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; + public class Application { public static void main(String[] args) { System.out.println("숫자 야구 게임을 시작합니다."); + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } } } From 110b5ed226bb793f7e1daa8a61fc63869f747762 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:08:59 +0900 Subject: [PATCH 04/75] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 0e2b426ae2..f0a0fd9b59 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ - [x] 랜덤 숫자를 생성한다. - 숫자는 3자리다. - 숫자는 중복되지 않아야 한다. -- [ ] 숫자를 입력받는다. +- [x] 숫자를 입력받는다. - 숫자는 1~9 사이의 3자리 정수다. - [ ] 입력 값에서 공백을 제거한다. - [ ] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index f2509e815a..8ac5b547bc 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,5 +1,6 @@ package baseball; +import camp.nextstep.edu.missionutils.Console; import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; @@ -16,5 +17,6 @@ public static void main(String[] args) { computer.add(randomNumber); } } + String input = Console.readLine(); } } From 022bd03c8cce6959375148bec736216e8f72c8c6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:16:36 +0900 Subject: [PATCH 05/75] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B0=92=20?= =?UTF-8?q?=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index f0a0fd9b59..994e45c71d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ - 숫자는 중복되지 않아야 한다. - [x] 숫자를 입력받는다. - 숫자는 1~9 사이의 3자리 정수다. - - [ ] 입력 값에서 공백을 제거한다. + - [x] 입력 값에서 공백을 제거한다. - [ ] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 8ac5b547bc..8417ab922f 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -18,5 +18,6 @@ public static void main(String[] args) { } } String input = Console.readLine(); + String inputWithoutBlank = input.replaceAll(" ", ""); } } From 65e128bd1938855a7441333bc181790cae815584 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:19:04 +0900 Subject: [PATCH 06/75] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B0=92=20?= =?UTF-8?q?3=EC=9E=90=EB=A6=AC=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=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 +- src/main/java/baseball/Application.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 994e45c71d..75e8e3a5af 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@ - [x] 숫자를 입력받는다. - 숫자는 1~9 사이의 3자리 정수다. - [x] 입력 값에서 공백을 제거한다. - - [ ] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` + - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - [ ] 랜덤 숫자와 입력받은 숫자를 비교한다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 8417ab922f..57b9dcdfd4 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -19,5 +19,8 @@ public static void main(String[] args) { } String input = Console.readLine(); String inputWithoutBlank = input.replaceAll(" ", ""); + if (inputWithoutBlank.length() != 3) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); + } } } From 43d48adb5a934a81afb9cd74cc6d5a72cbb18580 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:36:08 +0900 Subject: [PATCH 07/75] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B0=92=20?= =?UTF-8?q?=EC=A0=95=EC=88=98=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 75e8e3a5af..33c8ea8752 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@ - 숫자는 1~9 사이의 3자리 정수다. - [x] 입력 값에서 공백을 제거한다. - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` + - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - [ ] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 57b9dcdfd4..91e1fe91f6 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -22,5 +22,11 @@ public static void main(String[] args) { if (inputWithoutBlank.length() != 3) { throw new IllegalArgumentException("3자리 값이 아닙니다."); } + for (int i = 0; i < 3; i++) { + int each = inputWithoutBlank.charAt(i) - '0'; + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + } } } From 424022c6eff098cb3946d348aafc398cc5a71dc5 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:38:22 +0900 Subject: [PATCH 08/75] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B0=92=20?= =?UTF-8?q?=EC=A0=95=EC=88=98=20=EB=B2=94=EC=9C=84=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 33c8ea8752..55a3812908 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,7 +11,7 @@ - [x] 입력 값에서 공백을 제거한다. - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` + - [x] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - [ ] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 - [ ] 비교 결과를 출력한다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 91e1fe91f6..549e63e6e9 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -27,6 +27,9 @@ public static void main(String[] args) { if (each < 0 || each > 9) { throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); } + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } } } } From a09154ed236ead6791644cc9dcc6ffb1829dbb41 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:43:12 +0900 Subject: [PATCH 09/75] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=99=80=20=EC=9E=85=EB=A0=A5=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 55a3812908..f57c416448 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [x] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` -- [ ] 랜덤 숫자와 입력받은 숫자를 비교한다. +- [x] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 - [ ] 비교 결과를 출력한다. - 결과는 볼, 스트라이크 개수로 표시한다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 549e63e6e9..9873479b1a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -31,5 +31,16 @@ public static void main(String[] args) { throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); } } + int[] comparingResult = new int[3]; + for (int i = 0; i < 3; i++) { + int number = inputWithoutBlank.charAt(i) - '0'; + if (computer.contains(number) && computer.indexOf(number) != i) { + comparingResult[0]++; + } else if (computer.contains(number) && computer.indexOf(number) == i) { + comparingResult[1]++; + } else { + comparingResult[2]++; + } + } } } From 056bf9f871b80965e204992b7a6d3aac6a747ad6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:51:12 +0900 Subject: [PATCH 10/75] =?UTF-8?q?feat:=20=EB=B9=84=EA=B5=90=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index f57c416448..23233e66b2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,7 +14,7 @@ - [x] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - [x] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 -- [ ] 비교 결과를 출력한다. +- [x] 비교 결과를 출력한다. - 결과는 볼, 스트라이크 개수로 표시한다. - [ ] 3스트라이크이면 게임을 종료한다. - [ ] 3스트라이크가 아니면 게임으로 돌아간다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 9873479b1a..488b5cfaf6 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -42,5 +42,20 @@ public static void main(String[] args) { comparingResult[2]++; } } + StringBuilder result = new StringBuilder(); + if (comparingResult[2] == 3) { + result.append("낫싱"); + } else { + if (comparingResult[0] != 0) { + result.append(comparingResult[0]).append("볼 "); + } + if (comparingResult[1] != 0) { + result.append(comparingResult[1]).append("스트라이크"); + } + } + if (comparingResult[1] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + System.out.println(result); } } From 25852e93e810d89ea2d394bf13229af1a24274d6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 17:57:24 +0900 Subject: [PATCH 11/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=ED=95=98=EA=B8=B0=20=EB=B0=8F=20=EC=A2=85=EB=A3=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +- src/main/java/baseball/Application.java | 71 +++++++++++++------------ 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/docs/README.md b/docs/README.md index 23233e66b2..1ff6fc4b96 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,8 +16,8 @@ - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 - [x] 비교 결과를 출력한다. - 결과는 볼, 스트라이크 개수로 표시한다. - - [ ] 3스트라이크이면 게임을 종료한다. - - [ ] 3스트라이크가 아니면 게임으로 돌아간다. + - [x] 3스트라이크이면 게임을 종료한다. + - [x] 3스트라이크가 아니면 게임으로 돌아간다. - [ ] 게임이 종료되면 재진행 여부를 묻는다. - [ ] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 488b5cfaf6..39dc91a743 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -17,45 +17,50 @@ public static void main(String[] args) { computer.add(randomNumber); } } - String input = Console.readLine(); - String inputWithoutBlank = input.replaceAll(" ", ""); - if (inputWithoutBlank.length() != 3) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); - } - for (int i = 0; i < 3; i++) { - int each = inputWithoutBlank.charAt(i) - '0'; - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + while (true) { + String input = Console.readLine(); + String inputWithoutBlank = input.replaceAll(" ", ""); + if (inputWithoutBlank.length() != 3) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); } - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + for (int i = 0; i < 3; i++) { + int each = inputWithoutBlank.charAt(i) - '0'; + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } } - } - int[] comparingResult = new int[3]; - for (int i = 0; i < 3; i++) { - int number = inputWithoutBlank.charAt(i) - '0'; - if (computer.contains(number) && computer.indexOf(number) != i) { - comparingResult[0]++; - } else if (computer.contains(number) && computer.indexOf(number) == i) { - comparingResult[1]++; + int[] comparingResult = new int[3]; + for (int i = 0; i < 3; i++) { + int number = inputWithoutBlank.charAt(i) - '0'; + if (computer.contains(number) && computer.indexOf(number) != i) { + comparingResult[0]++; + } else if (computer.contains(number) && computer.indexOf(number) == i) { + comparingResult[1]++; + } else { + comparingResult[2]++; + } + } + StringBuilder result = new StringBuilder(); + if (comparingResult[2] == 3) { + result.append("낫싱"); } else { - comparingResult[2]++; + if (comparingResult[0] != 0) { + result.append(comparingResult[0]).append("볼 "); + } + if (comparingResult[1] != 0) { + result.append(comparingResult[1]).append("스트라이크"); + } } - } - StringBuilder result = new StringBuilder(); - if (comparingResult[2] == 3) { - result.append("낫싱"); - } else { - if (comparingResult[0] != 0) { - result.append(comparingResult[0]).append("볼 "); + if (comparingResult[1] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } - if (comparingResult[1] != 0) { - result.append(comparingResult[1]).append("스트라이크"); + System.out.println(result); + if (comparingResult[1] == 3) { + break; } } - if (comparingResult[1] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - } - System.out.println(result); } } From 322bce91adf9c59fac7f459f39ea9053119fc42a Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:00:23 +0900 Subject: [PATCH 12/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=A7=88=EB=AC=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 1ff6fc4b96..47614f2555 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,7 +18,7 @@ - 결과는 볼, 스트라이크 개수로 표시한다. - [x] 3스트라이크이면 게임을 종료한다. - [x] 3스트라이크가 아니면 게임으로 돌아간다. -- [ ] 게임이 종료되면 재진행 여부를 묻는다. +- [x] 게임이 종료되면 재진행 여부를 묻는다. - [ ] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. - [ ] 입력 값에서 공백을 제거한다. diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 39dc91a743..3bc2db7dd0 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -62,5 +62,6 @@ public static void main(String[] args) { break; } } + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); } } From 1b60b3806ccf69175d42e5b48bd9ebb9d8d4658e Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:00:55 +0900 Subject: [PATCH 13/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 47614f2555..8d63ee9554 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,7 +19,7 @@ - [x] 3스트라이크이면 게임을 종료한다. - [x] 3스트라이크가 아니면 게임으로 돌아간다. - [x] 게임이 종료되면 재진행 여부를 묻는다. - - [ ] 재진행 여부를 입력받는다. + - [x] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. - [ ] 입력 값에서 공백을 제거한다. - [ ] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 3bc2db7dd0..9f8e999c2c 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -63,5 +63,6 @@ public static void main(String[] args) { } } System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String gameProgressStatus = Console.readLine(); } } From 61db2df32fdfd20a64b26632eee8cdc059e5245f Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:02:39 +0900 Subject: [PATCH 14/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B0=92=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 8d63ee9554..b5ac48045c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,7 +21,7 @@ - [x] 게임이 종료되면 재진행 여부를 묻는다. - [x] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. - - [ ] 입력 값에서 공백을 제거한다. + - [x] 입력 값에서 공백을 제거한다. - [ ] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 9f8e999c2c..02ebf18968 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -64,5 +64,6 @@ public static void main(String[] args) { } System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String gameProgressStatus = Console.readLine(); + String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); } } From ba2a2b2100d9bdd207c699b7bceff592f2ead534 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:04:31 +0900 Subject: [PATCH 15/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B0=92=201=EC=9E=90=EB=A6=AC=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index b5ac48045c..4180b72188 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,6 +22,6 @@ - [x] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. - [x] 입력 값에서 공백을 제거한다. - - [ ] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` + - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 02ebf18968..8ce92e3401 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -65,5 +65,8 @@ public static void main(String[] args) { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String gameProgressStatus = Console.readLine(); String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); + if (gameProgressStatusWithoutBlank.length() != 1) { + throw new IllegalArgumentException("1자리 값이 아닙니다."); + } } } From d0db6d4d27b28d62c82f773394835616b2c300e9 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:08:16 +0900 Subject: [PATCH 16/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B0=92=20=EC=A0=95=EC=88=98=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 4180b72188..865aad7ff1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,5 +23,5 @@ - 재진행 여부는 1 또는 2인 정수다. - [x] 입력 값에서 공백을 제거한다. - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` + - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [ ] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 8ce92e3401..d605b38ab1 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -68,5 +68,9 @@ public static void main(String[] args) { if (gameProgressStatusWithoutBlank.length() != 1) { throw new IllegalArgumentException("1자리 값이 아닙니다."); } + int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; + if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } } } From 26475e362b934a3a7a6ea17cbf76161c1d110be0 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:12:09 +0900 Subject: [PATCH 17/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B0=92=20=EC=A0=95=EC=88=98=20=EB=B2=94=EC=9C=84=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 865aad7ff1..dd99290de5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,4 +24,4 @@ - [x] 입력 값에서 공백을 제거한다. - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file + - [x] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index d605b38ab1..d9e7329a2e 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -72,5 +72,8 @@ public static void main(String[] args) { if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); } + if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { + throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); + } } } From 34f784952aa3fa2ee396bdb7d8b5687ed2be0170 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:14:13 +0900 Subject: [PATCH 18/75] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index dd99290de5..4494122ba4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,4 +24,5 @@ - [x] 입력 값에서 공백을 제거한다. - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - - [x] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` \ No newline at end of file + - [x] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 게임을 재진행 또는 종료한다. \ No newline at end of file From 24702fe6ab2f6201cca2503d760901ea463ad76a Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:19:38 +0900 Subject: [PATCH 19/75] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EB=B0=8F=20=EC=A2=85=EB=A3=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/Application.java | 109 +++++++++++++----------- 2 files changed, 58 insertions(+), 53 deletions(-) diff --git a/docs/README.md b/docs/README.md index 4494122ba4..8e013139d3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,4 +25,4 @@ - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [x] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 게임을 재진행 또는 종료한다. \ No newline at end of file + - [x] 게임을 재진행 또는 종료한다. \ No newline at end of file diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index d9e7329a2e..2234b4bcce 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -10,70 +10,75 @@ public class Application { public static void main(String[] args) { System.out.println("숫자 야구 게임을 시작합니다."); - List computer = new ArrayList<>(); - while (computer.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } while (true) { - String input = Console.readLine(); - String inputWithoutBlank = input.replaceAll(" ", ""); - if (inputWithoutBlank.length() != 3) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } } - for (int i = 0; i < 3; i++) { - int each = inputWithoutBlank.charAt(i) - '0'; - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + while (true) { + String input = Console.readLine(); + String inputWithoutBlank = input.replaceAll(" ", ""); + if (inputWithoutBlank.length() != 3) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); } - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + for (int i = 0; i < 3; i++) { + int each = inputWithoutBlank.charAt(i) - '0'; + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } } - } - int[] comparingResult = new int[3]; - for (int i = 0; i < 3; i++) { - int number = inputWithoutBlank.charAt(i) - '0'; - if (computer.contains(number) && computer.indexOf(number) != i) { - comparingResult[0]++; - } else if (computer.contains(number) && computer.indexOf(number) == i) { - comparingResult[1]++; + int[] comparingResult = new int[3]; + for (int i = 0; i < 3; i++) { + int number = inputWithoutBlank.charAt(i) - '0'; + if (computer.contains(number) && computer.indexOf(number) != i) { + comparingResult[0]++; + } else if (computer.contains(number) && computer.indexOf(number) == i) { + comparingResult[1]++; + } else { + comparingResult[2]++; + } + } + StringBuilder result = new StringBuilder(); + if (comparingResult[2] == 3) { + result.append("낫싱"); } else { - comparingResult[2]++; + if (comparingResult[0] != 0) { + result.append(comparingResult[0]).append("볼 "); + } + if (comparingResult[1] != 0) { + result.append(comparingResult[1]).append("스트라이크"); + } } - } - StringBuilder result = new StringBuilder(); - if (comparingResult[2] == 3) { - result.append("낫싱"); - } else { - if (comparingResult[0] != 0) { - result.append(comparingResult[0]).append("볼 "); + if (comparingResult[1] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } - if (comparingResult[1] != 0) { - result.append(comparingResult[1]).append("스트라이크"); + System.out.println(result); + if (comparingResult[1] == 3) { + break; } } - if (comparingResult[1] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String gameProgressStatus = Console.readLine(); + String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); + if (gameProgressStatusWithoutBlank.length() != 1) { + throw new IllegalArgumentException("1자리 값이 아닙니다."); } - System.out.println(result); - if (comparingResult[1] == 3) { + int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; + if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { + throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); + } + if (gameProgressStatusValue == 2) { break; } } - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - String gameProgressStatus = Console.readLine(); - String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); - if (gameProgressStatusWithoutBlank.length() != 1) { - throw new IllegalArgumentException("1자리 값이 아닙니다."); - } - int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; - if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { - throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); - } } } From ee3b873fbc3ab4db64e811c21c43cd4ca19f78d2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:19:59 +0900 Subject: [PATCH 20/75] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 2234b4bcce..919acd4aa3 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -19,6 +19,7 @@ public static void main(String[] args) { } } while (true) { + System.out.print("숫자를 입력해주세요 : "); String input = Console.readLine(); String inputWithoutBlank = input.replaceAll(" ", ""); if (inputWithoutBlank.length() != 3) { From 9165d5e95e1554097bcd7c3130c880aea65117b2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:55:20 +0900 Subject: [PATCH 21/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=AC=B8=EA=B5=AC=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 3 ++- src/main/java/baseball/io/Output.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball/io/Output.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 919acd4aa3..094d4de3fb 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,5 +1,6 @@ package baseball; +import baseball.io.Output; import camp.nextstep.edu.missionutils.Console; import camp.nextstep.edu.missionutils.Randoms; @@ -9,7 +10,7 @@ public class Application { public static void main(String[] args) { - System.out.println("숫자 야구 게임을 시작합니다."); + Output.printStartMessage(); while (true) { List computer = new ArrayList<>(); while (computer.size() < 3) { diff --git a/src/main/java/baseball/io/Output.java b/src/main/java/baseball/io/Output.java new file mode 100644 index 0000000000..121473af29 --- /dev/null +++ b/src/main/java/baseball/io/Output.java @@ -0,0 +1,11 @@ +package baseball.io; + +public class Output { + + private Output() { + } + + public static void printStartMessage() { + System.out.println("숫자 야구 게임을 시작합니다."); + } +} From 3e2e2564cf9ac07d6efd9225c02667fd76fc30c2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:56:48 +0900 Subject: [PATCH 22/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Application.java | 82 +---------------- src/main/java/baseball/service/Game.java | 6 ++ .../baseball/service/NumberBaseballGame.java | 88 +++++++++++++++++++ 3 files changed, 98 insertions(+), 78 deletions(-) create mode 100644 src/main/java/baseball/service/Game.java create mode 100644 src/main/java/baseball/service/NumberBaseballGame.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 094d4de3fb..d8d55952e3 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,86 +1,12 @@ package baseball; -import baseball.io.Output; -import camp.nextstep.edu.missionutils.Console; -import camp.nextstep.edu.missionutils.Randoms; - -import java.util.ArrayList; -import java.util.List; +import baseball.service.Game; +import baseball.service.NumberBaseballGame; public class Application { public static void main(String[] args) { - Output.printStartMessage(); - while (true) { - List computer = new ArrayList<>(); - while (computer.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } - while (true) { - System.out.print("숫자를 입력해주세요 : "); - String input = Console.readLine(); - String inputWithoutBlank = input.replaceAll(" ", ""); - if (inputWithoutBlank.length() != 3) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); - } - for (int i = 0; i < 3; i++) { - int each = inputWithoutBlank.charAt(i) - '0'; - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); - } - } - int[] comparingResult = new int[3]; - for (int i = 0; i < 3; i++) { - int number = inputWithoutBlank.charAt(i) - '0'; - if (computer.contains(number) && computer.indexOf(number) != i) { - comparingResult[0]++; - } else if (computer.contains(number) && computer.indexOf(number) == i) { - comparingResult[1]++; - } else { - comparingResult[2]++; - } - } - StringBuilder result = new StringBuilder(); - if (comparingResult[2] == 3) { - result.append("낫싱"); - } else { - if (comparingResult[0] != 0) { - result.append(comparingResult[0]).append("볼 "); - } - if (comparingResult[1] != 0) { - result.append(comparingResult[1]).append("스트라이크"); - } - } - if (comparingResult[1] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - } - System.out.println(result); - if (comparingResult[1] == 3) { - break; - } - } - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - String gameProgressStatus = Console.readLine(); - String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); - if (gameProgressStatusWithoutBlank.length() != 1) { - throw new IllegalArgumentException("1자리 값이 아닙니다."); - } - int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; - if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { - throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); - } - if (gameProgressStatusValue == 2) { - break; - } - } + Game game = new NumberBaseballGame(); + game.run(); } } diff --git a/src/main/java/baseball/service/Game.java b/src/main/java/baseball/service/Game.java new file mode 100644 index 0000000000..b46a228719 --- /dev/null +++ b/src/main/java/baseball/service/Game.java @@ -0,0 +1,6 @@ +package baseball.service; + +public interface Game { + + void run(); +} diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java new file mode 100644 index 0000000000..541f034c04 --- /dev/null +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -0,0 +1,88 @@ +package baseball.service; + +import baseball.io.Output; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; + +public class NumberBaseballGame implements Game { + + public void run() { + Output.printStartMessage(); + play(); + } + + private void play() { + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + while (true) { + System.out.print("숫자를 입력해주세요 : "); + String input = Console.readLine(); + String inputWithoutBlank = input.replaceAll(" ", ""); + if (inputWithoutBlank.length() != 3) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); + } + for (int i = 0; i < 3; i++) { + int each = inputWithoutBlank.charAt(i) - '0'; + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } + } + int[] comparingResult = new int[3]; + for (int i = 0; i < 3; i++) { + int number = inputWithoutBlank.charAt(i) - '0'; + if (computer.contains(number) && computer.indexOf(number) != i) { + comparingResult[0]++; + } else if (computer.contains(number) && computer.indexOf(number) == i) { + comparingResult[1]++; + } else { + comparingResult[2]++; + } + } + StringBuilder result = new StringBuilder(); + if (comparingResult[2] == 3) { + result.append("낫싱"); + } else { + if (comparingResult[0] != 0) { + result.append(comparingResult[0]).append("볼 "); + } + if (comparingResult[1] != 0) { + result.append(comparingResult[1]).append("스트라이크"); + } + } + if (comparingResult[1] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + System.out.println(result); + if (comparingResult[1] == 3) { + break; + } + } + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String gameProgressStatus = Console.readLine(); + String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); + if (gameProgressStatusWithoutBlank.length() != 1) { + throw new IllegalArgumentException("1자리 값이 아닙니다."); + } + int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; + if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { + throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); + } + if (gameProgressStatusValue == 1) { + play(); + } + } +} From b8180de6dd5c12d1aa0309e52e524beaa8e1539c Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 18:58:31 +0900 Subject: [PATCH 23/75] =?UTF-8?q?refactor:=20io=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/service/NumberBaseballGame.java | 2 +- src/main/java/baseball/{io => util}/Output.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/baseball/{io => util}/Output.java (88%) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 541f034c04..b457091a3b 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,6 +1,6 @@ package baseball.service; -import baseball.io.Output; +import baseball.util.Output; import camp.nextstep.edu.missionutils.Console; import camp.nextstep.edu.missionutils.Randoms; diff --git a/src/main/java/baseball/io/Output.java b/src/main/java/baseball/util/Output.java similarity index 88% rename from src/main/java/baseball/io/Output.java rename to src/main/java/baseball/util/Output.java index 121473af29..de7368c978 100644 --- a/src/main/java/baseball/io/Output.java +++ b/src/main/java/baseball/util/Output.java @@ -1,4 +1,4 @@ -package baseball.io; +package baseball.util; public class Output { From b70d6645ae1fd94462cdf194257fcb3b08914fd0 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 19:41:41 +0900 Subject: [PATCH 24/75] =?UTF-8?q?refactor:=20=EB=9E=9C=EB=8D=A4=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=B1=85=EC=9E=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/NumberBaseballGame.java | 11 ++------- .../baseball/util/RandomNumberGenerator.java | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 src/main/java/baseball/util/RandomNumberGenerator.java diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index b457091a3b..c7a1b6d89b 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,10 +1,9 @@ package baseball.service; import baseball.util.Output; +import baseball.util.RandomNumberGenerator; import camp.nextstep.edu.missionutils.Console; -import camp.nextstep.edu.missionutils.Randoms; -import java.util.ArrayList; import java.util.List; public class NumberBaseballGame implements Game { @@ -15,13 +14,7 @@ public void run() { } private void play() { - List computer = new ArrayList<>(); - while (computer.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } + List computer = RandomNumberGenerator.generate(); while (true) { System.out.print("숫자를 입력해주세요 : "); String input = Console.readLine(); diff --git a/src/main/java/baseball/util/RandomNumberGenerator.java b/src/main/java/baseball/util/RandomNumberGenerator.java new file mode 100644 index 0000000000..badcdd4c62 --- /dev/null +++ b/src/main/java/baseball/util/RandomNumberGenerator.java @@ -0,0 +1,23 @@ +package baseball.util; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; + +public class RandomNumberGenerator { + + private RandomNumberGenerator() { + } + + public static List generate() { + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + return computer; + } +} From 345cde2681c901fcecf172bdf66d69ce54193d48 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 19:45:04 +0900 Subject: [PATCH 25/75] =?UTF-8?q?refactor:=20RandomNumberGenerator=20-=20?= =?UTF-8?q?=EB=9E=9C=EB=8D=A4=20=EC=88=AB=EC=9E=90=20=EA=B0=9C=EC=88=98=20?= =?UTF-8?q?=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/util/RandomNumberGenerator.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/util/RandomNumberGenerator.java b/src/main/java/baseball/util/RandomNumberGenerator.java index badcdd4c62..856859ffb5 100644 --- a/src/main/java/baseball/util/RandomNumberGenerator.java +++ b/src/main/java/baseball/util/RandomNumberGenerator.java @@ -7,12 +7,14 @@ public class RandomNumberGenerator { + private static final int THE_NUMBER_OF_RANDOM_NUMBER = 3; + private RandomNumberGenerator() { } public static List generate() { List computer = new ArrayList<>(); - while (computer.size() < 3) { + while (computer.size() < THE_NUMBER_OF_RANDOM_NUMBER) { int randomNumber = Randoms.pickNumberInRange(1, 9); if (!computer.contains(randomNumber)) { computer.add(randomNumber); From fc343dbb9f27b3a544b728e25c64ade91ffe777c Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 21:31:59 +0900 Subject: [PATCH 26/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=A7=84=ED=96=89=20=EC=A7=88=EB=AC=B8=20=EC=B1=85?= =?UTF-8?q?=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/NumberBaseballGame.java | 92 ++++++++++--------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index c7a1b6d89b..a79c71ba9e 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -10,57 +10,63 @@ public class NumberBaseballGame implements Game { public void run() { Output.printStartMessage(); - play(); + start(); } - private void play() { - List computer = RandomNumberGenerator.generate(); - while (true) { - System.out.print("숫자를 입력해주세요 : "); - String input = Console.readLine(); - String inputWithoutBlank = input.replaceAll(" ", ""); - if (inputWithoutBlank.length() != 3) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); - } - for (int i = 0; i < 3; i++) { - int each = inputWithoutBlank.charAt(i) - '0'; - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); - } + private void start() { + play(RandomNumberGenerator.generate()); + askPlayAgain(); + } + + private void play(List computer) { + System.out.print("숫자를 입력해주세요 : "); + String input = Console.readLine(); + String inputWithoutBlank = input.replaceAll(" ", ""); + if (inputWithoutBlank.length() != 3) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); + } + for (int i = 0; i < 3; i++) { + int each = inputWithoutBlank.charAt(i) - '0'; + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); } - int[] comparingResult = new int[3]; - for (int i = 0; i < 3; i++) { - int number = inputWithoutBlank.charAt(i) - '0'; - if (computer.contains(number) && computer.indexOf(number) != i) { - comparingResult[0]++; - } else if (computer.contains(number) && computer.indexOf(number) == i) { - comparingResult[1]++; - } else { - comparingResult[2]++; - } + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); } - StringBuilder result = new StringBuilder(); - if (comparingResult[2] == 3) { - result.append("낫싱"); + } + int[] comparingResult = new int[3]; + for (int i = 0; i < 3; i++) { + int number = inputWithoutBlank.charAt(i) - '0'; + if (computer.contains(number) && computer.indexOf(number) != i) { + comparingResult[0]++; + } else if (computer.contains(number) && computer.indexOf(number) == i) { + comparingResult[1]++; } else { - if (comparingResult[0] != 0) { - result.append(comparingResult[0]).append("볼 "); - } - if (comparingResult[1] != 0) { - result.append(comparingResult[1]).append("스트라이크"); - } + comparingResult[2]++; } - if (comparingResult[1] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + StringBuilder result = new StringBuilder(); + if (comparingResult[2] == 3) { + result.append("낫싱"); + } else { + if (comparingResult[0] != 0) { + result.append(comparingResult[0]).append("볼 "); } - System.out.println(result); - if (comparingResult[1] == 3) { - break; + if (comparingResult[1] != 0) { + result.append(comparingResult[1]).append("스트라이크"); } } + if (comparingResult[1] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + System.out.println(result); + if (comparingResult[1] == 3) { + return; + } + play(computer); + } + + private void askPlayAgain() { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String gameProgressStatus = Console.readLine(); String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); @@ -75,7 +81,7 @@ private void play() { throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); } if (gameProgressStatusValue == 1) { - play(); + start(); } } } From ca2f20463c7474527fc34917479ac3bd8bce398e Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 21:34:48 +0900 Subject: [PATCH 27/75] =?UTF-8?q?refactor:=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/service/NumberBaseballGame.java | 4 ++-- src/main/java/baseball/util/Input.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/main/java/baseball/util/Input.java diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index a79c71ba9e..aab17b8228 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,5 +1,6 @@ package baseball.service; +import baseball.util.Input; import baseball.util.Output; import baseball.util.RandomNumberGenerator; import camp.nextstep.edu.missionutils.Console; @@ -19,8 +20,7 @@ private void start() { } private void play(List computer) { - System.out.print("숫자를 입력해주세요 : "); - String input = Console.readLine(); + String input = Input.readGameNumber(); String inputWithoutBlank = input.replaceAll(" ", ""); if (inputWithoutBlank.length() != 3) { throw new IllegalArgumentException("3자리 값이 아닙니다."); diff --git a/src/main/java/baseball/util/Input.java b/src/main/java/baseball/util/Input.java new file mode 100644 index 0000000000..18935cf29e --- /dev/null +++ b/src/main/java/baseball/util/Input.java @@ -0,0 +1,14 @@ +package baseball.util; + +import camp.nextstep.edu.missionutils.Console; + +public class Input { + + private Input() { + } + + public static String readGameNumber() { + System.out.print("숫자를 입력해주세요 : "); + return Console.readLine(); + } +} From 5b5039689c711553c0f36ff3a604a2565c16f196 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 21:44:52 +0900 Subject: [PATCH 28/75] =?UTF-8?q?refactor:=20Input=20-=20=EA=B3=B5?= =?UTF-8?q?=EB=B0=B1=20=EB=B0=8F=20=EB=8C=80=EC=B2=B4=EB=AC=B8=EC=9E=90=20?= =?UTF-8?q?=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/util/Input.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/util/Input.java b/src/main/java/baseball/util/Input.java index 18935cf29e..f6ec589a93 100644 --- a/src/main/java/baseball/util/Input.java +++ b/src/main/java/baseball/util/Input.java @@ -4,11 +4,18 @@ public class Input { + private static final String BLANK = " "; + private static final String DELETE = ""; + private Input() { } public static String readGameNumber() { System.out.print("숫자를 입력해주세요 : "); - return Console.readLine(); + return removeBlank(Console.readLine()); + } + + private static String removeBlank(String input) { + return input.replaceAll(BLANK, DELETE); } } From dd2c2fa2df1f06e4d44db27c96093ff39814c353 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:03:36 +0900 Subject: [PATCH 29/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=B1=85=EC=9E=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumber.java | 14 ++++++ .../baseball/service/NumberBaseballGame.java | 18 ++------ .../baseball/util/GameNumberGenerator.java | 44 +++++++++++++++++++ 3 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 src/main/java/baseball/domain/GameNumber.java create mode 100644 src/main/java/baseball/util/GameNumberGenerator.java diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java new file mode 100644 index 0000000000..29a6ee9605 --- /dev/null +++ b/src/main/java/baseball/domain/GameNumber.java @@ -0,0 +1,14 @@ +package baseball.domain; + +public class GameNumber { + + private int value; + + public GameNumber(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index aab17b8228..849e10688c 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,5 +1,7 @@ package baseball.service; +import baseball.domain.GameNumber; +import baseball.util.GameNumberGenerator; import baseball.util.Input; import baseball.util.Output; import baseball.util.RandomNumberGenerator; @@ -21,22 +23,10 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); - String inputWithoutBlank = input.replaceAll(" ", ""); - if (inputWithoutBlank.length() != 3) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); - } - for (int i = 0; i < 3; i++) { - int each = inputWithoutBlank.charAt(i) - '0'; - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); - } - } + List gameNumbers = GameNumberGenerator.getGameNumbers(input); int[] comparingResult = new int[3]; for (int i = 0; i < 3; i++) { - int number = inputWithoutBlank.charAt(i) - '0'; + int number = gameNumbers.get(i).getValue(); if (computer.contains(number) && computer.indexOf(number) != i) { comparingResult[0]++; } else if (computer.contains(number) && computer.indexOf(number) == i) { diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java new file mode 100644 index 0000000000..685bb8644d --- /dev/null +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -0,0 +1,44 @@ +package baseball.util; + +import baseball.domain.GameNumber; + +import java.util.ArrayList; +import java.util.List; + +public class GameNumberGenerator { + + private static final int THE_NUMBER_OF_GAME_NUMBER = 3; + + private GameNumberGenerator() { + } + + public static List getGameNumbers(String input) { + List gameNumbers = new ArrayList<>(); + validateTheNumberOf(input); + for (int i = 0; i < 3; i++) { + int each = input.charAt(i) - '0'; + validateInteger(each); + validateRange(each); + gameNumbers.add(new GameNumber(each)); + } + return gameNumbers; + } + + private static void validateTheNumberOf(String input) { + if (input.length() != THE_NUMBER_OF_GAME_NUMBER) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); + } + } + + private static void validateInteger(int each) { + if (each < 0 || each > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + } + + private static void validateRange(int each) { + if (each == 0) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } + } +} From 48cb7f7fef8cd16d6312c5730cd3b387ffc0cdbd Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:14:20 +0900 Subject: [PATCH 30/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EB=B9=84=EA=B5=90=20=EC=B1=85=EC=9E=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/GameNumbers.java | 40 +++++++++++++++++++ .../baseball/service/NumberBaseballGame.java | 16 ++------ 2 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/main/java/baseball/domain/GameNumbers.java diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java new file mode 100644 index 0000000000..6738c76d7e --- /dev/null +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -0,0 +1,40 @@ +package baseball.domain; + +import java.util.ArrayList; +import java.util.List; + +public class GameNumbers { + + private static final int BALL = 0; + private static final int STRIKE = 1; + private static final int NOTING = 2; + + private List gameNumbers; + + public GameNumbers(List gameNumbers) { + this.gameNumbers = new ArrayList<>(gameNumbers); + } + + public int[] getComparingResult(List computer) { + int[] comparingResult = new int[3]; + for (int order = 0; order < 3; order++) { + int number = gameNumbers.get(order).getValue(); + if (isBall(computer, order, number)) { + comparingResult[BALL]++; + } else if (isStrike(computer, order, number)) { + comparingResult[STRIKE]++; + } else { + comparingResult[NOTING]++; + } + } + return comparingResult; + } + + private boolean isStrike(List computer, int order, int number) { + return computer.contains(number) && computer.indexOf(number) == order; + } + + private boolean isBall(List computer, int order, int number) { + return computer.contains(number) && computer.indexOf(number) != order; + } +} diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 849e10688c..de919b7a2b 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,6 +1,6 @@ package baseball.service; -import baseball.domain.GameNumber; +import baseball.domain.GameNumbers; import baseball.util.GameNumberGenerator; import baseball.util.Input; import baseball.util.Output; @@ -23,18 +23,8 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); - List gameNumbers = GameNumberGenerator.getGameNumbers(input); - int[] comparingResult = new int[3]; - for (int i = 0; i < 3; i++) { - int number = gameNumbers.get(i).getValue(); - if (computer.contains(number) && computer.indexOf(number) != i) { - comparingResult[0]++; - } else if (computer.contains(number) && computer.indexOf(number) == i) { - comparingResult[1]++; - } else { - comparingResult[2]++; - } - } + GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.getGameNumbers(input)); + int[] comparingResult = gameNumbers.getComparingResult(computer); StringBuilder result = new StringBuilder(); if (comparingResult[2] == 3) { result.append("낫싱"); From 24bc5c246cbeb5806931847988c48a8a45c976b6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:39:39 +0900 Subject: [PATCH 31/75] =?UTF-8?q?style:=20GameNumbers=20-=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumbers.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index 6738c76d7e..02d3e0e07d 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -7,7 +7,7 @@ public class GameNumbers { private static final int BALL = 0; private static final int STRIKE = 1; - private static final int NOTING = 2; + private static final int NOTHING = 2; private List gameNumbers; @@ -24,7 +24,7 @@ public int[] getComparingResult(List computer) { } else if (isStrike(computer, order, number)) { comparingResult[STRIKE]++; } else { - comparingResult[NOTING]++; + comparingResult[NOTHING]++; } } return comparingResult; From 7515fda8b433e776f235f270a3b81cad26363051 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:40:53 +0900 Subject: [PATCH 32/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=83=9D=EC=84=B1=20=EC=B1=85=EC=9E=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameResult.java | 20 +++++++++++++ .../baseball/service/NumberBaseballGame.java | 26 ++++------------- .../baseball/util/GameResultGenerator.java | 28 +++++++++++++++++++ 3 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 src/main/java/baseball/domain/GameResult.java create mode 100644 src/main/java/baseball/util/GameResultGenerator.java diff --git a/src/main/java/baseball/domain/GameResult.java b/src/main/java/baseball/domain/GameResult.java new file mode 100644 index 0000000000..27f2ea28d7 --- /dev/null +++ b/src/main/java/baseball/domain/GameResult.java @@ -0,0 +1,20 @@ +package baseball.domain; + +public class GameResult { + + private static final String GAME_END_CONDITION = "3스트라이크"; + + private String value; + + public GameResult(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public boolean isEnd() { + return value.equals(GAME_END_CONDITION); + } +} diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index de919b7a2b..0f95934714 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,10 +1,8 @@ package baseball.service; import baseball.domain.GameNumbers; -import baseball.util.GameNumberGenerator; -import baseball.util.Input; -import baseball.util.Output; -import baseball.util.RandomNumberGenerator; +import baseball.domain.GameResult; +import baseball.util.*; import camp.nextstep.edu.missionutils.Console; import java.util.List; @@ -24,23 +22,9 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.getGameNumbers(input)); - int[] comparingResult = gameNumbers.getComparingResult(computer); - StringBuilder result = new StringBuilder(); - if (comparingResult[2] == 3) { - result.append("낫싱"); - } else { - if (comparingResult[0] != 0) { - result.append(comparingResult[0]).append("볼 "); - } - if (comparingResult[1] != 0) { - result.append(comparingResult[1]).append("스트라이크"); - } - } - if (comparingResult[1] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - } - System.out.println(result); - if (comparingResult[1] == 3) { + GameResult gameResult = new GameResult(GameResultGenerator.generate(gameNumbers.getComparingResult(computer))); + System.out.println(gameResult.getValue()); + if (gameResult.isEnd()) { return; } play(computer); diff --git a/src/main/java/baseball/util/GameResultGenerator.java b/src/main/java/baseball/util/GameResultGenerator.java new file mode 100644 index 0000000000..faaaa41dac --- /dev/null +++ b/src/main/java/baseball/util/GameResultGenerator.java @@ -0,0 +1,28 @@ +package baseball.util; + +public class GameResultGenerator { + + private static final int BALL = 0; + private static final int STRIKE = 1; + private static final int NOTHING = 2; + + private GameResultGenerator() { + } + + public static String generate(int[] comparingResult) { + if (comparingResult[NOTHING] == 3) { + return "낫싱"; + } + StringBuilder result = new StringBuilder(); + if (comparingResult[BALL] != 0) { + result.append(comparingResult[BALL]).append("볼 "); + } + if (comparingResult[STRIKE] != 0) { + result.append(comparingResult[STRIKE]).append("스트라이크"); + } + if (comparingResult[STRIKE] == 3) { + result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + return result.toString(); + } +} From 02006346bf369b1b1042f99cb67a854c35b87038 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:41:51 +0900 Subject: [PATCH 33/75] =?UTF-8?q?refactor:=20GameNumberGenerator=20-=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/service/NumberBaseballGame.java | 2 +- src/main/java/baseball/util/GameNumberGenerator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 0f95934714..d6a51c90a5 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -21,7 +21,7 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); - GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.getGameNumbers(input)); + GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.generate(input)); GameResult gameResult = new GameResult(GameResultGenerator.generate(gameNumbers.getComparingResult(computer))); System.out.println(gameResult.getValue()); if (gameResult.isEnd()) { diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java index 685bb8644d..e870764b16 100644 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -12,7 +12,7 @@ public class GameNumberGenerator { private GameNumberGenerator() { } - public static List getGameNumbers(String input) { + public static List generate(String input) { List gameNumbers = new ArrayList<>(); validateTheNumberOf(input); for (int i = 0; i < 3; i++) { From 0e98bb93c72e38723dbfc38bba3cacad8592138e Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:44:24 +0900 Subject: [PATCH 34/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EC=B1=85=EC=9E=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/service/NumberBaseballGame.java | 2 +- src/main/java/baseball/util/Output.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index d6a51c90a5..22e1637be7 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -23,7 +23,7 @@ private void play(List computer) { String input = Input.readGameNumber(); GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.generate(input)); GameResult gameResult = new GameResult(GameResultGenerator.generate(gameNumbers.getComparingResult(computer))); - System.out.println(gameResult.getValue()); + Output.printResult(gameResult.getValue()); if (gameResult.isEnd()) { return; } diff --git a/src/main/java/baseball/util/Output.java b/src/main/java/baseball/util/Output.java index de7368c978..8befee9ca0 100644 --- a/src/main/java/baseball/util/Output.java +++ b/src/main/java/baseball/util/Output.java @@ -8,4 +8,8 @@ private Output() { public static void printStartMessage() { System.out.println("숫자 야구 게임을 시작합니다."); } + + public static void printResult(String result) { + System.out.println(result); + } } From 2fdf7491ab35fba168d0c0e75c7fc7114bdf596f Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 22:46:50 +0900 Subject: [PATCH 35/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=A7=84=ED=96=89=20=EC=97=AC=EB=B6=80=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/service/NumberBaseballGame.java | 9 +++------ src/main/java/baseball/util/Input.java | 5 +++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 22e1637be7..14719227cb 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -3,7 +3,6 @@ import baseball.domain.GameNumbers; import baseball.domain.GameResult; import baseball.util.*; -import camp.nextstep.edu.missionutils.Console; import java.util.List; @@ -31,13 +30,11 @@ private void play(List computer) { } private void askPlayAgain() { - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - String gameProgressStatus = Console.readLine(); - String gameProgressStatusWithoutBlank = gameProgressStatus.replaceAll(" ", ""); - if (gameProgressStatusWithoutBlank.length() != 1) { + String gameProgressStatus = Input.readGameStatus(); + if (gameProgressStatus.length() != 1) { throw new IllegalArgumentException("1자리 값이 아닙니다."); } - int gameProgressStatusValue = gameProgressStatusWithoutBlank.charAt(0) - '0'; + int gameProgressStatusValue = gameProgressStatus.charAt(0) - '0'; if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); } diff --git a/src/main/java/baseball/util/Input.java b/src/main/java/baseball/util/Input.java index f6ec589a93..41b0a4fad8 100644 --- a/src/main/java/baseball/util/Input.java +++ b/src/main/java/baseball/util/Input.java @@ -15,6 +15,11 @@ public static String readGameNumber() { return removeBlank(Console.readLine()); } + public static String readGameStatus() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + return removeBlank(Console.readLine()); + } + private static String removeBlank(String input) { return input.replaceAll(BLANK, DELETE); } From 9cd8ad38df1b91da9a07b3935903c807910dccfd Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:02:18 +0900 Subject: [PATCH 36/75] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=9E=AC=EC=A7=84=ED=96=89=20=EC=B1=85=EC=9E=84=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameStatus.java | 16 ++++++++ .../baseball/service/NumberBaseballGame.java | 15 ++------ .../baseball/util/GameStatusGenerator.java | 37 +++++++++++++++++++ 3 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 src/main/java/baseball/domain/GameStatus.java create mode 100644 src/main/java/baseball/util/GameStatusGenerator.java diff --git a/src/main/java/baseball/domain/GameStatus.java b/src/main/java/baseball/domain/GameStatus.java new file mode 100644 index 0000000000..0a0c0301f6 --- /dev/null +++ b/src/main/java/baseball/domain/GameStatus.java @@ -0,0 +1,16 @@ +package baseball.domain; + +public class GameStatus { + + private static final int RESTART = 1; + + private int status; + + public GameStatus(int status) { + this.status = status; + } + + public boolean isRestart() { + return status == RESTART; + } +} diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 14719227cb..b04839b1c8 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -2,6 +2,7 @@ import baseball.domain.GameNumbers; import baseball.domain.GameResult; +import baseball.domain.GameStatus; import baseball.util.*; import java.util.List; @@ -30,18 +31,8 @@ private void play(List computer) { } private void askPlayAgain() { - String gameProgressStatus = Input.readGameStatus(); - if (gameProgressStatus.length() != 1) { - throw new IllegalArgumentException("1자리 값이 아닙니다."); - } - int gameProgressStatusValue = gameProgressStatus.charAt(0) - '0'; - if (gameProgressStatusValue < 0 || gameProgressStatusValue > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - if (gameProgressStatusValue != 1 && gameProgressStatusValue != 2) { - throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); - } - if (gameProgressStatusValue == 1) { + GameStatus gameStatus = GameStatusGenerator.generate(Input.readGameStatus()); + if (gameStatus.isRestart()) { start(); } } diff --git a/src/main/java/baseball/util/GameStatusGenerator.java b/src/main/java/baseball/util/GameStatusGenerator.java new file mode 100644 index 0000000000..e73f5c79ee --- /dev/null +++ b/src/main/java/baseball/util/GameStatusGenerator.java @@ -0,0 +1,37 @@ +package baseball.util; + +import baseball.domain.GameStatus; + +public class GameStatusGenerator { + + public static final int THE_NUMBER_OF_GAME_STATUS = 1; + + private GameStatusGenerator() { + } + + public static GameStatus generate(String input) { + validateTheNumberOf(input); + int status = input.charAt(0) - '0'; + validateInteger(status); + validateRange(status); + return new GameStatus(status); + } + + private static void validateTheNumberOf(String input) { + if (input.length() != THE_NUMBER_OF_GAME_STATUS) { + throw new IllegalArgumentException("1자리 값이 아닙니다."); + } + } + + private static void validateInteger(int status) { + if (status < 0 || status > 9) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + } + + private static void validateRange(int status) { + if (status != 1 && status != 2) { + throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); + } + } +} From f4d067e610d75b46e3cd5068452618488afc3235 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:05:02 +0900 Subject: [PATCH 37/75] =?UTF-8?q?refactor:=20GameResultGenerator=20-=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B0=98=ED=99=98=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/util/GameResultGenerator.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/util/GameResultGenerator.java b/src/main/java/baseball/util/GameResultGenerator.java index faaaa41dac..0a539daf8b 100644 --- a/src/main/java/baseball/util/GameResultGenerator.java +++ b/src/main/java/baseball/util/GameResultGenerator.java @@ -1,5 +1,7 @@ package baseball.util; +import baseball.domain.GameResult; + public class GameResultGenerator { private static final int BALL = 0; @@ -9,9 +11,9 @@ public class GameResultGenerator { private GameResultGenerator() { } - public static String generate(int[] comparingResult) { + public static GameResult generate(int[] comparingResult) { if (comparingResult[NOTHING] == 3) { - return "낫싱"; + return new GameResult("낫싱"); } StringBuilder result = new StringBuilder(); if (comparingResult[BALL] != 0) { @@ -23,6 +25,6 @@ public static String generate(int[] comparingResult) { if (comparingResult[STRIKE] == 3) { result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } - return result.toString(); + return new GameResult(result.toString()); } } From 7d22f2b5ba30748ac7aa3bf7afd83184d232ed66 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:05:24 +0900 Subject: [PATCH 38/75] =?UTF-8?q?refactor:=20GameNumberGenerator=20-=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B0=98=ED=99=98=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/service/NumberBaseballGame.java | 4 ++-- src/main/java/baseball/util/GameNumberGenerator.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index b04839b1c8..1fc1323b17 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -21,8 +21,8 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); - GameNumbers gameNumbers = new GameNumbers(GameNumberGenerator.generate(input)); - GameResult gameResult = new GameResult(GameResultGenerator.generate(gameNumbers.getComparingResult(computer))); + GameNumbers gameNumbers = GameNumberGenerator.generate(input); + GameResult gameResult = GameResultGenerator.generate(gameNumbers.getComparingResult(computer)); Output.printResult(gameResult.getValue()); if (gameResult.isEnd()) { return; diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java index e870764b16..2ab72a882c 100644 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -1,6 +1,7 @@ package baseball.util; import baseball.domain.GameNumber; +import baseball.domain.GameNumbers; import java.util.ArrayList; import java.util.List; @@ -12,7 +13,7 @@ public class GameNumberGenerator { private GameNumberGenerator() { } - public static List generate(String input) { + public static GameNumbers generate(String input) { List gameNumbers = new ArrayList<>(); validateTheNumberOf(input); for (int i = 0; i < 3; i++) { @@ -21,7 +22,7 @@ public static List generate(String input) { validateRange(each); gameNumbers.add(new GameNumber(each)); } - return gameNumbers; + return new GameNumbers(gameNumbers); } private static void validateTheNumberOf(String input) { From 8a2c5ba9554983b1babbbd64a1c45be36bd13be6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:06:11 +0900 Subject: [PATCH 39/75] =?UTF-8?q?refactor:=20GameNumberGenerator=20-=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=88=AB=EC=9E=90=20=EC=83=81=EC=88=98?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/util/GameNumberGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java index 2ab72a882c..750b13e5da 100644 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -16,7 +16,7 @@ private GameNumberGenerator() { public static GameNumbers generate(String input) { List gameNumbers = new ArrayList<>(); validateTheNumberOf(input); - for (int i = 0; i < 3; i++) { + for (int i = 0; i < THE_NUMBER_OF_GAME_NUMBER; i++) { int each = input.charAt(i) - '0'; validateInteger(each); validateRange(each); From aca6e8cd9b1177c0f6b68375705f2aee1692f92c Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:19:58 +0900 Subject: [PATCH 40/75] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=20=EC=8B=9C=20=EC=9E=AC=EC=A7=84=ED=96=89=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80=20=EC=A7=88=EB=AC=B8=20=EC=97=90=EB=9F=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameResult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameResult.java b/src/main/java/baseball/domain/GameResult.java index 27f2ea28d7..1881b5a08b 100644 --- a/src/main/java/baseball/domain/GameResult.java +++ b/src/main/java/baseball/domain/GameResult.java @@ -15,6 +15,6 @@ public String getValue() { } public boolean isEnd() { - return value.equals(GAME_END_CONDITION); + return value.contains(GAME_END_CONDITION); } } From 80eedc1cf84d50c8e421017b7460e955eb93f253 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sat, 25 Mar 2023 23:25:44 +0900 Subject: [PATCH 41/75] =?UTF-8?q?refactor:=20=EC=A0=95=EC=88=98=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20=EC=B1=85=EC=9E=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/util/Convertor.java | 15 +++++++++++++++ .../java/baseball/util/GameNumberGenerator.java | 16 +++++----------- .../java/baseball/util/GameStatusGenerator.java | 9 +-------- 3 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 src/main/java/baseball/util/Convertor.java diff --git a/src/main/java/baseball/util/Convertor.java b/src/main/java/baseball/util/Convertor.java new file mode 100644 index 0000000000..089047e8c6 --- /dev/null +++ b/src/main/java/baseball/util/Convertor.java @@ -0,0 +1,15 @@ +package baseball.util; + +public class Convertor { + + private Convertor() { + } + + public static int toInteger(String value) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); + } + } +} diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java index 750b13e5da..b769ca4ab3 100644 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -9,6 +9,7 @@ public class GameNumberGenerator { private static final int THE_NUMBER_OF_GAME_NUMBER = 3; + private static final String DELIMITER = ""; private GameNumberGenerator() { } @@ -16,11 +17,10 @@ private GameNumberGenerator() { public static GameNumbers generate(String input) { List gameNumbers = new ArrayList<>(); validateTheNumberOf(input); - for (int i = 0; i < THE_NUMBER_OF_GAME_NUMBER; i++) { - int each = input.charAt(i) - '0'; - validateInteger(each); - validateRange(each); - gameNumbers.add(new GameNumber(each)); + for (String each : input.split(DELIMITER)) { + int gameNumber = Convertor.toInteger(each); + validateRange(gameNumber); + gameNumbers.add(new GameNumber(gameNumber)); } return new GameNumbers(gameNumbers); } @@ -31,12 +31,6 @@ private static void validateTheNumberOf(String input) { } } - private static void validateInteger(int each) { - if (each < 0 || each > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - } - private static void validateRange(int each) { if (each == 0) { throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); diff --git a/src/main/java/baseball/util/GameStatusGenerator.java b/src/main/java/baseball/util/GameStatusGenerator.java index e73f5c79ee..cf564f32db 100644 --- a/src/main/java/baseball/util/GameStatusGenerator.java +++ b/src/main/java/baseball/util/GameStatusGenerator.java @@ -11,8 +11,7 @@ private GameStatusGenerator() { public static GameStatus generate(String input) { validateTheNumberOf(input); - int status = input.charAt(0) - '0'; - validateInteger(status); + int status = Convertor.toInteger(input); validateRange(status); return new GameStatus(status); } @@ -23,12 +22,6 @@ private static void validateTheNumberOf(String input) { } } - private static void validateInteger(int status) { - if (status < 0 || status > 9) { - throw new IllegalArgumentException("정수가 아닌 값이 포함되어 있습니다."); - } - } - private static void validateRange(int status) { if (status != 1 && status != 2) { throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); From daf96a5e4b6dce75bc746b918e5af9fea377aa9a Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 00:06:35 +0900 Subject: [PATCH 42/75] =?UTF-8?q?test:=20GameNumberGeneratorTest=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 --- .../util/GameNumberGeneratorTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/test/java/baseball/util/GameNumberGeneratorTest.java diff --git a/src/test/java/baseball/util/GameNumberGeneratorTest.java b/src/test/java/baseball/util/GameNumberGeneratorTest.java new file mode 100644 index 0000000000..257d06a790 --- /dev/null +++ b/src/test/java/baseball/util/GameNumberGeneratorTest.java @@ -0,0 +1,45 @@ +package baseball.util; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class GameNumberGeneratorTest { + + @DisplayName("3자리 아닌 수 입력 시 예외 발생") + @Test + void 잘못된_입력_길이() { + assertThatThrownBy(() -> GameNumberGenerator.generate("1234")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("3자리 아닌 수 입력 시 통과") + @Test + void 올바른_입력_길이() { + assertThatCode(() -> GameNumberGenerator.generate("123")) + .doesNotThrowAnyException(); + } + + @DisplayName("정수 아닌 값 입력 시 예외 발생") + @Test + void 정수_아닌_값_포함() { + assertThatThrownBy(() -> GameNumberGenerator.generate("12-")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("범위 벗어난 정수 입력 시 예외 발생") + @Test + void 범위_내_정수_아닌_값_포함() { + assertThatThrownBy(() -> GameNumberGenerator.generate("120")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("정수만 입력 시 통과") + @Test + void 정수만_입력() { + assertThatCode(() -> GameNumberGenerator.generate("123")) + .doesNotThrowAnyException(); + } +} From 97fb0d5b8727cc0cc293e661eade827122e32d14 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 00:06:48 +0900 Subject: [PATCH 43/75] =?UTF-8?q?test:=20GameResultGeneratorTest=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 --- .../util/GameResultGeneratorTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/test/java/baseball/util/GameResultGeneratorTest.java diff --git a/src/test/java/baseball/util/GameResultGeneratorTest.java b/src/test/java/baseball/util/GameResultGeneratorTest.java new file mode 100644 index 0000000000..12c1585c73 --- /dev/null +++ b/src/test/java/baseball/util/GameResultGeneratorTest.java @@ -0,0 +1,46 @@ +package baseball.util; + +import baseball.domain.GameResult; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class GameResultGeneratorTest { + + @DisplayName("같은 수가 없으면 낫싱 출력") + @Test + void 같은_수_없으면_낫싱() { + // given + int[] comparingResult = {0, 0, 3}; + // when + GameResult gameResult = GameResultGenerator.generate(comparingResult); + // then + assertThat(gameResult.getValue()) + .isEqualTo("낫싱"); + } + + @DisplayName("같은 수가 같은 자리에 있으면 스트라이크") + @Test + void 같은_수_같은_자리면_스트라이크() { + // given + int[] comparingResult = {0, 2, 0}; + // when + GameResult gameResult = GameResultGenerator.generate(comparingResult); + // then + assertThat(gameResult.getValue()) + .isEqualTo("2스트라이크"); + } + + @DisplayName("같은 수가 다른 자리에 있으면 볼") + @Test + void 같은_수_다른_자리면_볼() { + // given + int[] comparingResult = {1, 0, 0}; + // when + GameResult gameResult = GameResultGenerator.generate(comparingResult); + // then + assertThat(gameResult.getValue()) + .isEqualTo("1볼 "); + } +} From 0e21ff47bbab9311fd38a9c25660b0bf8bda28a3 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 00:06:57 +0900 Subject: [PATCH 44/75] =?UTF-8?q?test:=20GameStatusGeneratorTest=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 --- .../util/GameStatusGeneratorTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/test/java/baseball/util/GameStatusGeneratorTest.java diff --git a/src/test/java/baseball/util/GameStatusGeneratorTest.java b/src/test/java/baseball/util/GameStatusGeneratorTest.java new file mode 100644 index 0000000000..e115f7ab08 --- /dev/null +++ b/src/test/java/baseball/util/GameStatusGeneratorTest.java @@ -0,0 +1,45 @@ +package baseball.util; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class GameStatusGeneratorTest { + + @DisplayName("1자리 아닌 수 입력 시 예외 발생") + @Test + void 잘못된_입력_길이() { + assertThatThrownBy(() -> GameStatusGenerator.generate("12")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("1자리 수 입력 시 통과") + @Test + void 올바른_입력_길이() { + assertThatCode(() -> GameStatusGenerator.generate("1")) + .doesNotThrowAnyException(); + } + + @DisplayName("정수 아닌 값 입력 시 예외 발생") + @Test + void 정수_아닌_값_포함() { + assertThatThrownBy(() -> GameStatusGenerator.generate("-")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("범위 벗어난 정수 입력 시 예외 발생") + @Test + void 범위_내_정수_아닌_값_포함() { + assertThatThrownBy(() -> GameStatusGenerator.generate("3")) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("정수만 입력 시 통과") + @Test + void 정수만_입력() { + assertThatCode(() -> GameStatusGenerator.generate("1")) + .doesNotThrowAnyException(); + } +} From cf98bb7aca6b8f0203bdb7d59699c19d9ae3909c Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 18:57:53 +0900 Subject: [PATCH 45/75] =?UTF-8?q?refactor:=20GameStatus=20-=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=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 - src/main/java/baseball/domain/GameStatus.java | 10 ++++++- .../baseball/service/NumberBaseballGame.java | 2 +- .../baseball/util/GameStatusGenerator.java | 30 ------------------- 4 files changed, 10 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/baseball/util/GameStatusGenerator.java diff --git a/docs/README.md b/docs/README.md index 8e013139d3..b90bf5038e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,7 +22,6 @@ - [x] 재진행 여부를 입력받는다. - 재진행 여부는 1 또는 2인 정수다. - [x] 입력 값에서 공백을 제거한다. - - [x] 1자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [x] 1~2 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - [x] 게임을 재진행 또는 종료한다. \ No newline at end of file diff --git a/src/main/java/baseball/domain/GameStatus.java b/src/main/java/baseball/domain/GameStatus.java index 0a0c0301f6..9495dd0c85 100644 --- a/src/main/java/baseball/domain/GameStatus.java +++ b/src/main/java/baseball/domain/GameStatus.java @@ -3,14 +3,22 @@ public class GameStatus { private static final int RESTART = 1; + private static final int END = 2; - private int status; + private final int status; public GameStatus(int status) { + validateRange(status); this.status = status; } public boolean isRestart() { return status == RESTART; } + + private static void validateRange(int status) { + if (status != RESTART && status != END) { + throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); + } + } } diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 1fc1323b17..3b818b5379 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -31,7 +31,7 @@ private void play(List computer) { } private void askPlayAgain() { - GameStatus gameStatus = GameStatusGenerator.generate(Input.readGameStatus()); + GameStatus gameStatus = new GameStatus(Convertor.toInteger(Input.readGameStatus())); if (gameStatus.isRestart()) { start(); } diff --git a/src/main/java/baseball/util/GameStatusGenerator.java b/src/main/java/baseball/util/GameStatusGenerator.java deleted file mode 100644 index cf564f32db..0000000000 --- a/src/main/java/baseball/util/GameStatusGenerator.java +++ /dev/null @@ -1,30 +0,0 @@ -package baseball.util; - -import baseball.domain.GameStatus; - -public class GameStatusGenerator { - - public static final int THE_NUMBER_OF_GAME_STATUS = 1; - - private GameStatusGenerator() { - } - - public static GameStatus generate(String input) { - validateTheNumberOf(input); - int status = Convertor.toInteger(input); - validateRange(status); - return new GameStatus(status); - } - - private static void validateTheNumberOf(String input) { - if (input.length() != THE_NUMBER_OF_GAME_STATUS) { - throw new IllegalArgumentException("1자리 값이 아닙니다."); - } - } - - private static void validateRange(int status) { - if (status != 1 && status != 2) { - throw new IllegalArgumentException("1 또는 2 이외의 숫자가 포함되어 있습니다."); - } - } -} From c7b05486ffdc851527220c32b98230f28d2e42b8 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 18:58:08 +0900 Subject: [PATCH 46/75] =?UTF-8?q?test:=20GameStatusGeneratorTest=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/GameStatusGeneratorTest.java | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 src/test/java/baseball/util/GameStatusGeneratorTest.java diff --git a/src/test/java/baseball/util/GameStatusGeneratorTest.java b/src/test/java/baseball/util/GameStatusGeneratorTest.java deleted file mode 100644 index e115f7ab08..0000000000 --- a/src/test/java/baseball/util/GameStatusGeneratorTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package baseball.util; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThatCode; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -public class GameStatusGeneratorTest { - - @DisplayName("1자리 아닌 수 입력 시 예외 발생") - @Test - void 잘못된_입력_길이() { - assertThatThrownBy(() -> GameStatusGenerator.generate("12")) - .isInstanceOf(IllegalArgumentException.class); - } - - @DisplayName("1자리 수 입력 시 통과") - @Test - void 올바른_입력_길이() { - assertThatCode(() -> GameStatusGenerator.generate("1")) - .doesNotThrowAnyException(); - } - - @DisplayName("정수 아닌 값 입력 시 예외 발생") - @Test - void 정수_아닌_값_포함() { - assertThatThrownBy(() -> GameStatusGenerator.generate("-")) - .isInstanceOf(IllegalArgumentException.class); - } - - @DisplayName("범위 벗어난 정수 입력 시 예외 발생") - @Test - void 범위_내_정수_아닌_값_포함() { - assertThatThrownBy(() -> GameStatusGenerator.generate("3")) - .isInstanceOf(IllegalArgumentException.class); - } - - @DisplayName("정수만 입력 시 통과") - @Test - void 정수만_입력() { - assertThatCode(() -> GameStatusGenerator.generate("1")) - .doesNotThrowAnyException(); - } -} From 47341066111788506e421de0c9ae61ee2a4cb83a Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 18:59:17 +0900 Subject: [PATCH 47/75] =?UTF-8?q?refactor:=20GameNumbers=20-=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumbers.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index 02d3e0e07d..981c2fc9fa 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -5,13 +5,15 @@ public class GameNumbers { + private static final int THE_NUMBER_OF_GAME_NUMBER = 3; private static final int BALL = 0; private static final int STRIKE = 1; private static final int NOTHING = 2; - private List gameNumbers; + private final List gameNumbers; public GameNumbers(List gameNumbers) { + validateTheNumberOf(gameNumbers); this.gameNumbers = new ArrayList<>(gameNumbers); } @@ -30,6 +32,12 @@ public int[] getComparingResult(List computer) { return comparingResult; } + private static void validateTheNumberOf(List gameNumbers) { + if (gameNumbers.size() != THE_NUMBER_OF_GAME_NUMBER) { + throw new IllegalArgumentException("3자리 값이 아닙니다."); + } + } + private boolean isStrike(List computer, int order, int number) { return computer.contains(number) && computer.indexOf(number) == order; } From d25a2d5d48ef5e8fdee38b0a9a0fce5f342c4c37 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 19:07:52 +0900 Subject: [PATCH 48/75] =?UTF-8?q?refactor:=20GameNumber=20-=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumber.java | 12 ++++++++- .../baseball/util/GameNumberGenerator.java | 26 ++++--------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java index 29a6ee9605..f0ccf0a0e2 100644 --- a/src/main/java/baseball/domain/GameNumber.java +++ b/src/main/java/baseball/domain/GameNumber.java @@ -2,13 +2,23 @@ public class GameNumber { - private int value; + private static final int MIN_VALUE = 1; + private static final int MAX_VALUE = 9; + + private final int value; public GameNumber(int value) { + validateRange(value); this.value = value; } public int getValue() { return value; } + + private static void validateRange(int value) { + if (value < MIN_VALUE || value > MAX_VALUE) { + throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + } + } } diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java index b769ca4ab3..002169b9a6 100644 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ b/src/main/java/baseball/util/GameNumberGenerator.java @@ -3,37 +3,21 @@ import baseball.domain.GameNumber; import baseball.domain.GameNumbers; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; public class GameNumberGenerator { - private static final int THE_NUMBER_OF_GAME_NUMBER = 3; private static final String DELIMITER = ""; private GameNumberGenerator() { } public static GameNumbers generate(String input) { - List gameNumbers = new ArrayList<>(); - validateTheNumberOf(input); - for (String each : input.split(DELIMITER)) { - int gameNumber = Convertor.toInteger(each); - validateRange(gameNumber); - gameNumbers.add(new GameNumber(gameNumber)); - } + List gameNumbers = Arrays.stream(input.split(DELIMITER)) + .map(each -> new GameNumber(Convertor.toInteger(each))) + .collect(Collectors.toList()); return new GameNumbers(gameNumbers); } - - private static void validateTheNumberOf(String input) { - if (input.length() != THE_NUMBER_OF_GAME_NUMBER) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); - } - } - - private static void validateRange(int each) { - if (each == 0) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); - } - } } From fa66a5567c17d2889b84000eb97e67db0947196c Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 21:04:43 +0900 Subject: [PATCH 49/75] =?UTF-8?q?refactor:=20GameResult=20-=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameResult.java | 27 +++++++++++++++-- .../baseball/service/NumberBaseballGame.java | 2 +- .../baseball/util/GameResultGenerator.java | 30 ------------------- 3 files changed, 25 insertions(+), 34 deletions(-) delete mode 100644 src/main/java/baseball/util/GameResultGenerator.java diff --git a/src/main/java/baseball/domain/GameResult.java b/src/main/java/baseball/domain/GameResult.java index 1881b5a08b..a5d3c36d07 100644 --- a/src/main/java/baseball/domain/GameResult.java +++ b/src/main/java/baseball/domain/GameResult.java @@ -2,14 +2,35 @@ public class GameResult { - private static final String GAME_END_CONDITION = "3스트라이크"; + private static final int THE_NUMBER_OF_GAME_NUMBER = 3; + private static final int BALL = 0; + private static final int STRIKE = 1; + private static final int NOTHING = 2; + private static final String GAME_END_CONDITION = THE_NUMBER_OF_GAME_NUMBER + "스트라이크"; - private String value; + private final String value; - public GameResult(String value) { + private GameResult(String value) { this.value = value; } + public static GameResult from(int[] comparingResult) { + if (comparingResult[NOTHING] == THE_NUMBER_OF_GAME_NUMBER) { + return new GameResult("낫싱"); + } + StringBuilder result = new StringBuilder(); + if (comparingResult[BALL] != 0) { + result.append(comparingResult[BALL]).append("볼 "); + } + if (comparingResult[STRIKE] != 0) { + result.append(comparingResult[STRIKE]).append("스트라이크"); + } + if (comparingResult[STRIKE] == THE_NUMBER_OF_GAME_NUMBER) { + result.append("\n").append(THE_NUMBER_OF_GAME_NUMBER).append("개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + return new GameResult(result.toString()); + } + public String getValue() { return value; } diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index 3b818b5379..e913e78812 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -22,7 +22,7 @@ private void start() { private void play(List computer) { String input = Input.readGameNumber(); GameNumbers gameNumbers = GameNumberGenerator.generate(input); - GameResult gameResult = GameResultGenerator.generate(gameNumbers.getComparingResult(computer)); + GameResult gameResult = GameResult.from(gameNumbers.getComparingResult(computer)); Output.printResult(gameResult.getValue()); if (gameResult.isEnd()) { return; diff --git a/src/main/java/baseball/util/GameResultGenerator.java b/src/main/java/baseball/util/GameResultGenerator.java deleted file mode 100644 index 0a539daf8b..0000000000 --- a/src/main/java/baseball/util/GameResultGenerator.java +++ /dev/null @@ -1,30 +0,0 @@ -package baseball.util; - -import baseball.domain.GameResult; - -public class GameResultGenerator { - - private static final int BALL = 0; - private static final int STRIKE = 1; - private static final int NOTHING = 2; - - private GameResultGenerator() { - } - - public static GameResult generate(int[] comparingResult) { - if (comparingResult[NOTHING] == 3) { - return new GameResult("낫싱"); - } - StringBuilder result = new StringBuilder(); - if (comparingResult[BALL] != 0) { - result.append(comparingResult[BALL]).append("볼 "); - } - if (comparingResult[STRIKE] != 0) { - result.append(comparingResult[STRIKE]).append("스트라이크"); - } - if (comparingResult[STRIKE] == 3) { - result.append("\n3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - } - return new GameResult(result.toString()); - } -} From 3377e544917d3edb8e55f7a5849eacef0c07c27e Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 21:05:19 +0900 Subject: [PATCH 50/75] =?UTF-8?q?test:=20GameResultGeneratorTest=20-=20Gam?= =?UTF-8?q?eResult=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/baseball/util/GameResultGeneratorTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/baseball/util/GameResultGeneratorTest.java b/src/test/java/baseball/util/GameResultGeneratorTest.java index 12c1585c73..f13c15e712 100644 --- a/src/test/java/baseball/util/GameResultGeneratorTest.java +++ b/src/test/java/baseball/util/GameResultGeneratorTest.java @@ -14,7 +14,7 @@ public class GameResultGeneratorTest { // given int[] comparingResult = {0, 0, 3}; // when - GameResult gameResult = GameResultGenerator.generate(comparingResult); + GameResult gameResult = GameResult.from(comparingResult); // then assertThat(gameResult.getValue()) .isEqualTo("낫싱"); @@ -26,7 +26,7 @@ public class GameResultGeneratorTest { // given int[] comparingResult = {0, 2, 0}; // when - GameResult gameResult = GameResultGenerator.generate(comparingResult); + GameResult gameResult = GameResult.from(comparingResult); // then assertThat(gameResult.getValue()) .isEqualTo("2스트라이크"); @@ -38,7 +38,7 @@ public class GameResultGeneratorTest { // given int[] comparingResult = {1, 0, 0}; // when - GameResult gameResult = GameResultGenerator.generate(comparingResult); + GameResult gameResult = GameResult.from(comparingResult); // then assertThat(gameResult.getValue()) .isEqualTo("1볼 "); From 415979ef11570e4030ed797f054310ead22228bb Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 22:09:01 +0900 Subject: [PATCH 51/75] =?UTF-8?q?test:=20GameNumberGeneratorTest=20-=20@Pa?= =?UTF-8?q?rameterizedTest=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/GameNumberGeneratorTest.java | 40 +++++-------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/src/test/java/baseball/util/GameNumberGeneratorTest.java b/src/test/java/baseball/util/GameNumberGeneratorTest.java index 257d06a790..fe1d79b098 100644 --- a/src/test/java/baseball/util/GameNumberGeneratorTest.java +++ b/src/test/java/baseball/util/GameNumberGeneratorTest.java @@ -1,45 +1,27 @@ package baseball.util; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; public class GameNumberGeneratorTest { - @DisplayName("3자리 아닌 수 입력 시 예외 발생") - @Test - void 잘못된_입력_길이() { - assertThatThrownBy(() -> GameNumberGenerator.generate("1234")) + @DisplayName("형식 외 입력 시 예외 발생") + @ParameterizedTest + @ValueSource(strings = {"1234", "12-", "120"}) + void 잘못된_입력(String input) { + assertThatThrownBy(() -> GameNumberGenerator.generate(input)) .isInstanceOf(IllegalArgumentException.class); } @DisplayName("3자리 아닌 수 입력 시 통과") - @Test - void 올바른_입력_길이() { - assertThatCode(() -> GameNumberGenerator.generate("123")) - .doesNotThrowAnyException(); - } - - @DisplayName("정수 아닌 값 입력 시 예외 발생") - @Test - void 정수_아닌_값_포함() { - assertThatThrownBy(() -> GameNumberGenerator.generate("12-")) - .isInstanceOf(IllegalArgumentException.class); - } - - @DisplayName("범위 벗어난 정수 입력 시 예외 발생") - @Test - void 범위_내_정수_아닌_값_포함() { - assertThatThrownBy(() -> GameNumberGenerator.generate("120")) - .isInstanceOf(IllegalArgumentException.class); - } - - @DisplayName("정수만 입력 시 통과") - @Test - void 정수만_입력() { - assertThatCode(() -> GameNumberGenerator.generate("123")) + @ParameterizedTest + @ValueSource(strings = {"123", "483", "679"}) + void 올바른_입력(String input) { + assertThatCode(() -> GameNumberGenerator.generate(input)) .doesNotThrowAnyException(); } } From 4a0d8960c6f74d4ce1d3dd417cb872be791494b2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 22:16:51 +0900 Subject: [PATCH 52/75] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index b90bf5038e..0f39f188a8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,7 @@ - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [x] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` + - [ ] 숫자는 중복되지 않아야 한다. => `IllegalArgumentException` - [x] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 - [x] 비교 결과를 출력한다. From 2cbce9654e34461730a7ef7cd6abb7e0231f29a2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 22:21:37 +0900 Subject: [PATCH 53/75] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B0=92=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/baseball/domain/GameNumber.java | 15 +++++++++++++++ src/main/java/baseball/domain/GameNumbers.java | 8 ++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 0f39f188a8..c3d802bef1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ - [x] 3자리가 아니면 에러가 발생한다. => `IllegalArgumentException` - [x] 정수가 아닌 값을 포함하면 에러가 발생한다. => `IllegalArgumentException` - [x] 1~9 범위를 벗어나면 에러가 발생한다. => `IllegalArgumentException` - - [ ] 숫자는 중복되지 않아야 한다. => `IllegalArgumentException` + - [x] 숫자는 중복되지 않아야 한다. => `IllegalArgumentException` - [x] 랜덤 숫자와 입력받은 숫자를 비교한다. - 같은 수가 같은 자리에 있으면 스트라이크, 같은 수가 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱 - [x] 비교 결과를 출력한다. diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java index f0ccf0a0e2..06ce35e9d9 100644 --- a/src/main/java/baseball/domain/GameNumber.java +++ b/src/main/java/baseball/domain/GameNumber.java @@ -1,5 +1,7 @@ package baseball.domain; +import java.util.Objects; + public class GameNumber { private static final int MIN_VALUE = 1; @@ -16,6 +18,19 @@ public int getValue() { return value; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GameNumber that = (GameNumber) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + private static void validateRange(int value) { if (value < MIN_VALUE || value > MAX_VALUE) { throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index 981c2fc9fa..fdc553e3d8 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -1,6 +1,7 @@ package baseball.domain; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; public class GameNumbers { @@ -14,6 +15,7 @@ public class GameNumbers { public GameNumbers(List gameNumbers) { validateTheNumberOf(gameNumbers); + validateDuplication(gameNumbers); this.gameNumbers = new ArrayList<>(gameNumbers); } @@ -38,6 +40,12 @@ private static void validateTheNumberOf(List gameNumbers) { } } + private void validateDuplication(List gameNumbers) { + if (gameNumbers.size() != new HashSet<>(gameNumbers).size()) { + throw new IllegalArgumentException("중복되는 값이 포함되어 있습니다."); + } + } + private boolean isStrike(List computer, int order, int number) { return computer.contains(number) && computer.indexOf(number) == order; } From a6520b41702d7fbb998ed90bf0d7540b73874568 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Sun, 26 Mar 2023 22:22:10 +0900 Subject: [PATCH 54/75] =?UTF-8?q?test:=20GameNumberGeneratorTest=20-=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B0=92=20=EC=A4=91=EB=B3=B5=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/baseball/util/GameNumberGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/baseball/util/GameNumberGeneratorTest.java b/src/test/java/baseball/util/GameNumberGeneratorTest.java index fe1d79b098..2a948ba50e 100644 --- a/src/test/java/baseball/util/GameNumberGeneratorTest.java +++ b/src/test/java/baseball/util/GameNumberGeneratorTest.java @@ -11,7 +11,7 @@ public class GameNumberGeneratorTest { @DisplayName("형식 외 입력 시 예외 발생") @ParameterizedTest - @ValueSource(strings = {"1234", "12-", "120"}) + @ValueSource(strings = {"1234", "12-", "120", "122"}) void 잘못된_입력(String input) { assertThatThrownBy(() -> GameNumberGenerator.generate(input)) .isInstanceOf(IllegalArgumentException.class); From 262cf0a6861cbe3df28ac6a6782d1fad3d176c53 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 20:53:51 +0900 Subject: [PATCH 55/75] =?UTF-8?q?test:=20GameResultTest=20-=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GameResultTest.java} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename src/test/java/baseball/{util/GameResultGeneratorTest.java => domain/GameResultTest.java} (92%) diff --git a/src/test/java/baseball/util/GameResultGeneratorTest.java b/src/test/java/baseball/domain/GameResultTest.java similarity index 92% rename from src/test/java/baseball/util/GameResultGeneratorTest.java rename to src/test/java/baseball/domain/GameResultTest.java index f13c15e712..4ccae02fe3 100644 --- a/src/test/java/baseball/util/GameResultGeneratorTest.java +++ b/src/test/java/baseball/domain/GameResultTest.java @@ -1,12 +1,11 @@ -package baseball.util; +package baseball.domain; -import baseball.domain.GameResult; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -public class GameResultGeneratorTest { +public class GameResultTest { @DisplayName("같은 수가 없으면 낫싱 출력") @Test From 486f562d07e343013b52ddf7c07e493647e7f587 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:08:30 +0900 Subject: [PATCH 56/75] =?UTF-8?q?refactor:=20GameNumber=20-=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EB=B0=9C=EC=83=9D=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=A4=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumber.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java index 06ce35e9d9..b97118c903 100644 --- a/src/main/java/baseball/domain/GameNumber.java +++ b/src/main/java/baseball/domain/GameNumber.java @@ -33,7 +33,7 @@ public int hashCode() { private static void validateRange(int value) { if (value < MIN_VALUE || value > MAX_VALUE) { - throw new IllegalArgumentException("1~9 범위를 벗어나는 숫자가 포함되어 있습니다."); + throw new IllegalArgumentException(String.format("%d~%d 범위를 벗어나는 숫자가 포함되어 있습니다.", MIN_VALUE, MAX_VALUE)); } } } From db893779fbbe012920bd317ecf4e13d0882e2f65 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:10:28 +0900 Subject: [PATCH 57/75] =?UTF-8?q?refactor:=20GameNumbers=20-=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EB=B0=9C=EC=83=9D=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=A4=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumbers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index fdc553e3d8..fcf67d1c49 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -36,7 +36,7 @@ public int[] getComparingResult(List computer) { private static void validateTheNumberOf(List gameNumbers) { if (gameNumbers.size() != THE_NUMBER_OF_GAME_NUMBER) { - throw new IllegalArgumentException("3자리 값이 아닙니다."); + throw new IllegalArgumentException(String.format("%d자리 값이 아닙니다.", THE_NUMBER_OF_GAME_NUMBER)); } } From d8a9fedf76cd30f67fa480f485f806c81aefd7fe Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:13:00 +0900 Subject: [PATCH 58/75] =?UTF-8?q?refactor:=20GameNumberGenerator=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/util/GameNumberGenerator.java | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 src/main/java/baseball/util/GameNumberGenerator.java diff --git a/src/main/java/baseball/util/GameNumberGenerator.java b/src/main/java/baseball/util/GameNumberGenerator.java deleted file mode 100644 index 002169b9a6..0000000000 --- a/src/main/java/baseball/util/GameNumberGenerator.java +++ /dev/null @@ -1,23 +0,0 @@ -package baseball.util; - -import baseball.domain.GameNumber; -import baseball.domain.GameNumbers; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class GameNumberGenerator { - - private static final String DELIMITER = ""; - - private GameNumberGenerator() { - } - - public static GameNumbers generate(String input) { - List gameNumbers = Arrays.stream(input.split(DELIMITER)) - .map(each -> new GameNumber(Convertor.toInteger(each))) - .collect(Collectors.toList()); - return new GameNumbers(gameNumbers); - } -} From d77ff08cf1ffa1687b442899f41f3491a6375f48 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:13:24 +0900 Subject: [PATCH 59/75] =?UTF-8?q?refactor:=20GameNumberGenerator=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumberGenerator.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/baseball/domain/GameNumberGenerator.java diff --git a/src/main/java/baseball/domain/GameNumberGenerator.java b/src/main/java/baseball/domain/GameNumberGenerator.java new file mode 100644 index 0000000000..6d0b5e3824 --- /dev/null +++ b/src/main/java/baseball/domain/GameNumberGenerator.java @@ -0,0 +1,8 @@ +package baseball.domain; + +import java.util.List; + +public interface GameNumberGenerator { + + List generate(int limit); +} From 19fa2c1f51a0d212a1fc7c6bb8c812ce7b3c4e66 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:16:50 +0900 Subject: [PATCH 60/75] =?UTF-8?q?refactor:=20RandomNumberGenerator=20-=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B0=8F=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/RandomNumberGenerator.java | 15 +++++++++++ .../baseball/util/RandomNumberGenerator.java | 25 ------------------- 2 files changed, 15 insertions(+), 25 deletions(-) create mode 100644 src/main/java/baseball/domain/RandomNumberGenerator.java delete mode 100644 src/main/java/baseball/util/RandomNumberGenerator.java diff --git a/src/main/java/baseball/domain/RandomNumberGenerator.java b/src/main/java/baseball/domain/RandomNumberGenerator.java new file mode 100644 index 0000000000..5641208c16 --- /dev/null +++ b/src/main/java/baseball/domain/RandomNumberGenerator.java @@ -0,0 +1,15 @@ +package baseball.domain; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class RandomNumberGenerator및 implements GameNumberGenerator { + + public List generate(int limit) { + return Stream.generate(GameNumber::create) + .distinct() + .limit(limit) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/baseball/util/RandomNumberGenerator.java b/src/main/java/baseball/util/RandomNumberGenerator.java deleted file mode 100644 index 856859ffb5..0000000000 --- a/src/main/java/baseball/util/RandomNumberGenerator.java +++ /dev/null @@ -1,25 +0,0 @@ -package baseball.util; - -import camp.nextstep.edu.missionutils.Randoms; - -import java.util.ArrayList; -import java.util.List; - -public class RandomNumberGenerator { - - private static final int THE_NUMBER_OF_RANDOM_NUMBER = 3; - - private RandomNumberGenerator() { - } - - public static List generate() { - List computer = new ArrayList<>(); - while (computer.size() < THE_NUMBER_OF_RANDOM_NUMBER) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } - return computer; - } -} From f67173853b187ecc2da84bfc19b427180bf7837a Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:17:32 +0900 Subject: [PATCH 61/75] =?UTF-8?q?refactor:=20UserNumberGenerator=20-=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=84=A4=EC=9D=B4=EB=B0=8D,=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B0=8F=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/domain/UserNumberGenerator.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/baseball/domain/UserNumberGenerator.java diff --git a/src/main/java/baseball/domain/UserNumberGenerator.java b/src/main/java/baseball/domain/UserNumberGenerator.java new file mode 100644 index 0000000000..b013109e81 --- /dev/null +++ b/src/main/java/baseball/domain/UserNumberGenerator.java @@ -0,0 +1,33 @@ +package baseball.domain; + +import baseball.util.Convertor; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class UserNumberGenerator implements GameNumberGenerator { + + private static final String DELIMITER = ""; + + private final String input; + + public UserNumberGenerator(String input) { + this.input = input; + } + + public List generate(int limit) { + String[] inputNumbers = input.split(DELIMITER); + validateTheNumberOf(inputNumbers, limit); + return Arrays.stream(inputNumbers) + .map(Convertor::toInteger) + .map(GameNumber::from) + .collect(Collectors.toList()); + } + + private void validateTheNumberOf(String[] inputNumbers, int limit) { + if (inputNumbers.length != limit) { + throw new IllegalArgumentException(String.format("%d자리 값이 아닙니다.", limit)); + } + } +} From d0b37456724effda980e9190c5ebb83a666d7026 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:26:08 +0900 Subject: [PATCH 62/75] =?UTF-8?q?refactor:=20GameResult=20-=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameResult.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/main/java/baseball/domain/GameResult.java b/src/main/java/baseball/domain/GameResult.java index a5d3c36d07..a447b02284 100644 --- a/src/main/java/baseball/domain/GameResult.java +++ b/src/main/java/baseball/domain/GameResult.java @@ -3,10 +3,6 @@ public class GameResult { private static final int THE_NUMBER_OF_GAME_NUMBER = 3; - private static final int BALL = 0; - private static final int STRIKE = 1; - private static final int NOTHING = 2; - private static final String GAME_END_CONDITION = THE_NUMBER_OF_GAME_NUMBER + "스트라이크"; private final String value; @@ -14,19 +10,19 @@ private GameResult(String value) { this.value = value; } - public static GameResult from(int[] comparingResult) { - if (comparingResult[NOTHING] == THE_NUMBER_OF_GAME_NUMBER) { - return new GameResult("낫싱"); + public static GameResult from(int strike, int ball, int theNumberOfGameNumber) { + if (strike == 0 && ball == 0) { + return new GameResult("낫싱", false); } StringBuilder result = new StringBuilder(); - if (comparingResult[BALL] != 0) { - result.append(comparingResult[BALL]).append("볼 "); + if (ball != 0) { + result.append(ball).append("볼 "); } - if (comparingResult[STRIKE] != 0) { - result.append(comparingResult[STRIKE]).append("스트라이크"); + if (strike != 0) { + result.append(strike).append("스트라이크"); } - if (comparingResult[STRIKE] == THE_NUMBER_OF_GAME_NUMBER) { - result.append("\n").append(THE_NUMBER_OF_GAME_NUMBER).append("개의 숫자를 모두 맞히셨습니다! 게임 종료"); + if (strike == theNumberOfGameNumber) { + result.append("\n").append(theNumberOfGameNumber).append("개의 숫자를 모두 맞히셨습니다! 게임 종료"); } return new GameResult(result.toString()); } From 88647bf514a2e8bcddc42922d6915ac83b079848 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:26:39 +0900 Subject: [PATCH 63/75] =?UTF-8?q?refactor:=20GameResult=20-=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A2=85=EB=A3=8C=20=EC=97=AC=EB=B6=80=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameResult.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/domain/GameResult.java b/src/main/java/baseball/domain/GameResult.java index a447b02284..fb306d046a 100644 --- a/src/main/java/baseball/domain/GameResult.java +++ b/src/main/java/baseball/domain/GameResult.java @@ -5,9 +5,11 @@ public class GameResult { private static final int THE_NUMBER_OF_GAME_NUMBER = 3; private final String value; + private final boolean isEnd; - private GameResult(String value) { + private GameResult(String value, boolean isEnd) { this.value = value; + this.isEnd = isEnd; } public static GameResult from(int strike, int ball, int theNumberOfGameNumber) { @@ -24,7 +26,7 @@ public static GameResult from(int strike, int ball, int theNumberOfGameNumber) { if (strike == theNumberOfGameNumber) { result.append("\n").append(theNumberOfGameNumber).append("개의 숫자를 모두 맞히셨습니다! 게임 종료"); } - return new GameResult(result.toString()); + return new GameResult(result.toString(), strike == THE_NUMBER_OF_GAME_NUMBER); } public String getValue() { @@ -32,6 +34,6 @@ public String getValue() { } public boolean isEnd() { - return value.contains(GAME_END_CONDITION); + return isEnd; } } From c470951c4488d2e79dd227ef97b0f7a8fd9090e2 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:27:01 +0900 Subject: [PATCH 64/75] =?UTF-8?q?refactor:=20GameStatus=20-=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameStatus.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameStatus.java b/src/main/java/baseball/domain/GameStatus.java index 9495dd0c85..d3f4a80e66 100644 --- a/src/main/java/baseball/domain/GameStatus.java +++ b/src/main/java/baseball/domain/GameStatus.java @@ -1,5 +1,7 @@ package baseball.domain; +import baseball.util.Convertor; + public class GameStatus { private static final int RESTART = 1; @@ -7,11 +9,15 @@ public class GameStatus { private final int status; - public GameStatus(int status) { + private GameStatus(int status) { validateRange(status); this.status = status; } + public static GameStatus from(String input) { + return new GameStatus(Convertor.toInteger(input)); + } + public boolean isRestart() { return status == RESTART; } From 885f15664ab726694c84332deb6a259516268876 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:30:30 +0900 Subject: [PATCH 65/75] =?UTF-8?q?style:=20RandomNumberGenerator=20-=20?= =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/RandomNumberGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/RandomNumberGenerator.java b/src/main/java/baseball/domain/RandomNumberGenerator.java index 5641208c16..83545f6264 100644 --- a/src/main/java/baseball/domain/RandomNumberGenerator.java +++ b/src/main/java/baseball/domain/RandomNumberGenerator.java @@ -4,7 +4,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public class RandomNumberGenerator및 implements GameNumberGenerator { +public class RandomNumberGenerator implements GameNumberGenerator { public List generate(int limit) { return Stream.generate(GameNumber::create) From 8ae7d10aed262e84288c539d2cf434345b5d27a8 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:31:17 +0900 Subject: [PATCH 66/75] =?UTF-8?q?refactor:=20GameNumber=20-=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumber.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java index b97118c903..b8c8865c9e 100644 --- a/src/main/java/baseball/domain/GameNumber.java +++ b/src/main/java/baseball/domain/GameNumber.java @@ -1,5 +1,7 @@ package baseball.domain; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.Objects; public class GameNumber { @@ -9,11 +11,19 @@ public class GameNumber { private final int value; - public GameNumber(int value) { + private GameNumber(int value) { validateRange(value); this.value = value; } + public static GameNumber from(int input) { + return new GameNumber(input); + } + + public static GameNumber create() { + return new GameNumber(Randoms.pickNumberInRange(MIN_VALUE, MAX_VALUE)); + } + public int getValue() { return value; } From c8713d953ca5fb5fa5fc4c220c72732409e83a09 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:32:48 +0900 Subject: [PATCH 67/75] =?UTF-8?q?refactor:=20GameNumbers=20-=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/GameNumbers.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index fcf67d1c49..76230f9e92 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -7,31 +7,30 @@ public class GameNumbers { private static final int THE_NUMBER_OF_GAME_NUMBER = 3; - private static final int BALL = 0; - private static final int STRIKE = 1; - private static final int NOTHING = 2; private final List gameNumbers; - public GameNumbers(List gameNumbers) { + private GameNumbers(List gameNumbers) { validateTheNumberOf(gameNumbers); validateDuplication(gameNumbers); this.gameNumbers = new ArrayList<>(gameNumbers); } - public int[] getComparingResult(List computer) { - int[] comparingResult = new int[3]; - for (int order = 0; order < 3; order++) { - int number = gameNumbers.get(order).getValue(); - if (isBall(computer, order, number)) { - comparingResult[BALL]++; - } else if (isStrike(computer, order, number)) { - comparingResult[STRIKE]++; - } else { - comparingResult[NOTHING]++; + public static GameNumbers from(GameNumberGenerator gameNumberGenerator) { + return new GameNumbers(gameNumberGenerator.generate(THE_NUMBER_OF_GAME_NUMBER)); + } + + public GameResult compare(GameNumbers other) { + int strike = 0; + int ball = 0; + for (int order = 0; order < THE_NUMBER_OF_GAME_NUMBER; order++) { + if (isStrike(other, order)) { + strike++; + } else if (isBall(other, gameNumbers.get(order))) { + ball++; } } - return comparingResult; + return GameResult.from(strike, ball, THE_NUMBER_OF_GAME_NUMBER); } private static void validateTheNumberOf(List gameNumbers) { @@ -46,11 +45,11 @@ private void validateDuplication(List gameNumbers) { } } - private boolean isStrike(List computer, int order, int number) { - return computer.contains(number) && computer.indexOf(number) == order; + private boolean isStrike(GameNumbers other, int order) { + return this.gameNumbers.get(order).equals(other.gameNumbers.get(order)); } - private boolean isBall(List computer, int order, int number) { - return computer.contains(number) && computer.indexOf(number) != order; + private boolean isBall(GameNumbers computer, GameNumber gameNumber) { + return computer.gameNumbers.contains(gameNumber); } } From 12ae9c8c7f0eeb72e8bc5005893091f18edc5cb3 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:35:52 +0900 Subject: [PATCH 68/75] =?UTF-8?q?refactor:=20NumberBaseballGame=20-=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/NumberBaseballGame.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/baseball/service/NumberBaseballGame.java b/src/main/java/baseball/service/NumberBaseballGame.java index e913e78812..dfb7b9353d 100644 --- a/src/main/java/baseball/service/NumberBaseballGame.java +++ b/src/main/java/baseball/service/NumberBaseballGame.java @@ -1,38 +1,37 @@ package baseball.service; -import baseball.domain.GameNumbers; -import baseball.domain.GameResult; -import baseball.domain.GameStatus; -import baseball.util.*; - -import java.util.List; +import baseball.domain.*; +import baseball.util.Input; +import baseball.util.Output; public class NumberBaseballGame implements Game { + private static final GameNumberGenerator randomNumberGenerator = new RandomNumberGenerator(); + public void run() { Output.printStartMessage(); start(); } private void start() { - play(RandomNumberGenerator.generate()); + play(GameNumbers.from(randomNumberGenerator)); askPlayAgain(); } - private void play(List computer) { - String input = Input.readGameNumber(); - GameNumbers gameNumbers = GameNumberGenerator.generate(input); - GameResult gameResult = GameResult.from(gameNumbers.getComparingResult(computer)); - Output.printResult(gameResult.getValue()); - if (gameResult.isEnd()) { - return; + private void play(GameNumbers computer) { + while (true) { + GameNumberGenerator userNumberGenerator = new UserNumberGenerator(Input.readGameNumber()); + GameNumbers user = GameNumbers.from(userNumberGenerator); + GameResult gameResult = user.compare(computer); + Output.printResult(gameResult.getValue()); + if (gameResult.isEnd()) { + break; + } } - play(computer); } private void askPlayAgain() { - GameStatus gameStatus = new GameStatus(Convertor.toInteger(Input.readGameStatus())); - if (gameStatus.isRestart()) { + if (GameStatus.from(Input.readGameStatus()).isRestart()) { start(); } } From eee7e78f93979553f513cb553ad955d83d08fbcf Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:36:20 +0900 Subject: [PATCH 69/75] =?UTF-8?q?test:=20UserNumberGeneratorTest=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mberGeneratorTest.java => UserNumberGeneratorTest.java} | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename src/test/java/baseball/util/{GameNumberGeneratorTest.java => UserNumberGeneratorTest.java} (78%) diff --git a/src/test/java/baseball/util/GameNumberGeneratorTest.java b/src/test/java/baseball/util/UserNumberGeneratorTest.java similarity index 78% rename from src/test/java/baseball/util/GameNumberGeneratorTest.java rename to src/test/java/baseball/util/UserNumberGeneratorTest.java index 2a948ba50e..1db0bead78 100644 --- a/src/test/java/baseball/util/GameNumberGeneratorTest.java +++ b/src/test/java/baseball/util/UserNumberGeneratorTest.java @@ -1,5 +1,6 @@ package baseball.util; +import baseball.domain.UserNumberGenerator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -7,13 +8,13 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; -public class GameNumberGeneratorTest { +public class UserNumberGeneratorTest { @DisplayName("형식 외 입력 시 예외 발생") @ParameterizedTest @ValueSource(strings = {"1234", "12-", "120", "122"}) void 잘못된_입력(String input) { - assertThatThrownBy(() -> GameNumberGenerator.generate(input)) + assertThatThrownBy(() -> UserNumberGenerator.generate(input)) .isInstanceOf(IllegalArgumentException.class); } @@ -21,7 +22,7 @@ public class GameNumberGeneratorTest { @ParameterizedTest @ValueSource(strings = {"123", "483", "679"}) void 올바른_입력(String input) { - assertThatCode(() -> GameNumberGenerator.generate(input)) + assertThatCode(() -> UserNumberGenerator.generate(3)) .doesNotThrowAnyException(); } } From 38b3ef882ff3ad4b787cccb20c9fdab3c4df2cec Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:51:21 +0900 Subject: [PATCH 70/75] =?UTF-8?q?refactor:=20GameNumbers=20-=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumbers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/GameNumbers.java b/src/main/java/baseball/domain/GameNumbers.java index 76230f9e92..c5753e803f 100644 --- a/src/main/java/baseball/domain/GameNumbers.java +++ b/src/main/java/baseball/domain/GameNumbers.java @@ -40,7 +40,7 @@ private static void validateTheNumberOf(List gameNumbers) { } private void validateDuplication(List gameNumbers) { - if (gameNumbers.size() != new HashSet<>(gameNumbers).size()) { + if (new HashSet<>(gameNumbers).size() != THE_NUMBER_OF_GAME_NUMBER) { throw new IllegalArgumentException("중복되는 값이 포함되어 있습니다."); } } From aaa90c8de9e13c292d23d90d630b556d5efac4b3 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:52:06 +0900 Subject: [PATCH 71/75] =?UTF-8?q?test:=20UserNumberGeneratorTest=20-=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99=20=EB=B0=8F=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserNumberGeneratorTest.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) rename src/test/java/baseball/{util => domain}/UserNumberGeneratorTest.java (58%) diff --git a/src/test/java/baseball/util/UserNumberGeneratorTest.java b/src/test/java/baseball/domain/UserNumberGeneratorTest.java similarity index 58% rename from src/test/java/baseball/util/UserNumberGeneratorTest.java rename to src/test/java/baseball/domain/UserNumberGeneratorTest.java index 1db0bead78..17c6cf5b92 100644 --- a/src/test/java/baseball/util/UserNumberGeneratorTest.java +++ b/src/test/java/baseball/domain/UserNumberGeneratorTest.java @@ -1,5 +1,6 @@ -package baseball.util; +package baseball.domain; +import baseball.domain.GameNumberGenerator; import baseball.domain.UserNumberGenerator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; @@ -10,11 +11,16 @@ public class UserNumberGeneratorTest { + private static final int LIMIT = 3; + @DisplayName("형식 외 입력 시 예외 발생") @ParameterizedTest - @ValueSource(strings = {"1234", "12-", "120", "122"}) + @ValueSource(strings = {"1234", "12-", "120"}) void 잘못된_입력(String input) { - assertThatThrownBy(() -> UserNumberGenerator.generate(input)) + // given + GameNumberGenerator userNumberGenerator = new UserNumberGenerator(input); + // when & then + assertThatThrownBy(() -> userNumberGenerator.generate(LIMIT)) .isInstanceOf(IllegalArgumentException.class); } @@ -22,7 +28,10 @@ public class UserNumberGeneratorTest { @ParameterizedTest @ValueSource(strings = {"123", "483", "679"}) void 올바른_입력(String input) { - assertThatCode(() -> UserNumberGenerator.generate(3)) + // given + GameNumberGenerator userNumberGenerator = new UserNumberGenerator(input); + // when & then + assertThatCode(() -> userNumberGenerator.generate(LIMIT)) .doesNotThrowAnyException(); } } From 88990f2b15e849d19e914406735efc20297dc360 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 22:55:23 +0900 Subject: [PATCH 72/75] =?UTF-8?q?test:=20GameResultTest=20-=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/GameResultTest.java | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/test/java/baseball/domain/GameResultTest.java b/src/test/java/baseball/domain/GameResultTest.java index 4ccae02fe3..326cc9beb0 100644 --- a/src/test/java/baseball/domain/GameResultTest.java +++ b/src/test/java/baseball/domain/GameResultTest.java @@ -7,39 +7,26 @@ public class GameResultTest { + private static final int LIMIT = 3; + @DisplayName("같은 수가 없으면 낫싱 출력") @Test void 같은_수_없으면_낫싱() { - // given - int[] comparingResult = {0, 0, 3}; - // when - GameResult gameResult = GameResult.from(comparingResult); - // then - assertThat(gameResult.getValue()) + assertThat(GameResult.from(0, 0, LIMIT).getValue()) .isEqualTo("낫싱"); } @DisplayName("같은 수가 같은 자리에 있으면 스트라이크") @Test void 같은_수_같은_자리면_스트라이크() { - // given - int[] comparingResult = {0, 2, 0}; - // when - GameResult gameResult = GameResult.from(comparingResult); - // then - assertThat(gameResult.getValue()) + assertThat(GameResult.from(2, 0, LIMIT).getValue()) .isEqualTo("2스트라이크"); } @DisplayName("같은 수가 다른 자리에 있으면 볼") @Test void 같은_수_다른_자리면_볼() { - // given - int[] comparingResult = {1, 0, 0}; - // when - GameResult gameResult = GameResult.from(comparingResult); - // then - assertThat(gameResult.getValue()) + assertThat(GameResult.from(0, 1, LIMIT).getValue()) .isEqualTo("1볼 "); } } From ef38005d23964fce1e4cc11d474d308c6aa115b6 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 23:03:52 +0900 Subject: [PATCH 73/75] =?UTF-8?q?test:=20GameNumbersTest=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/GameNumbersTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/test/java/baseball/domain/GameNumbersTest.java diff --git a/src/test/java/baseball/domain/GameNumbersTest.java b/src/test/java/baseball/domain/GameNumbersTest.java new file mode 100644 index 0000000000..f441b36e2f --- /dev/null +++ b/src/test/java/baseball/domain/GameNumbersTest.java @@ -0,0 +1,42 @@ +package baseball.domain; + +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 GameNumbersTest { + + private GameNumbers computer; + + @BeforeEach + void setUp() { + GameNumberGenerator gameNumberGenerator = new UserNumberGenerator("123"); + computer = GameNumbers.from(gameNumberGenerator); + } + + @DisplayName("게임 종료") + @Test + void 스트라이크_세번이면_게임_종료() { + // given + GameNumberGenerator userNumberGenerator = new UserNumberGenerator("123"); + GameNumbers user = GameNumbers.from(userNumberGenerator); + // when + GameResult gameResult = user.compare(computer); + // then + assertThat(gameResult.isEnd()).isTrue(); + } + + @DisplayName("게임 재시작") + @Test + void 스트라이크_세번_아니면_게임_재시작() { + // given + GameNumberGenerator userNumberGenerator = new UserNumberGenerator("124"); + GameNumbers user = GameNumbers.from(userNumberGenerator); + // when + GameResult gameResult = user.compare(computer); + // then + assertThat(gameResult.isEnd()).isFalse(); + } +} From 39731cea24785319f7b12c578e542ba4ae244c43 Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 23:09:56 +0900 Subject: [PATCH 74/75] =?UTF-8?q?test:=20GameStatusTest=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/domain/GameStatusTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/java/baseball/domain/GameStatusTest.java diff --git a/src/test/java/baseball/domain/GameStatusTest.java b/src/test/java/baseball/domain/GameStatusTest.java new file mode 100644 index 0000000000..c4fbc0f110 --- /dev/null +++ b/src/test/java/baseball/domain/GameStatusTest.java @@ -0,0 +1,32 @@ +package baseball.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class GameStatusTest { + + @DisplayName("형식 외 입력 시 예외 발생") + @ParameterizedTest + @ValueSource(strings = {"1234", "-", "3"}) + void 잘못된_입력(String input) { + assertThatThrownBy(() -> GameStatus.from(input)) + .isInstanceOf(IllegalArgumentException.class); + } + + @DisplayName("1 입력 시 재시작") + @Test + void 입력값_1이면_재시작() { + assertThat(GameStatus.from("1").isRestart()).isTrue(); + } + + @DisplayName("2 입력 시 종료") + @Test + void 입력값_2이면_종료() { + assertThat(GameStatus.from("2").isRestart()).isFalse(); + } +} From 7e2d57d7210e7e0e126c7c4abbacf311c7c4da3f Mon Sep 17 00:00:00 2001 From: jeonyuneo Date: Mon, 27 Mar 2023 23:10:25 +0900 Subject: [PATCH 75/75] =?UTF-8?q?refactor:=20GameNumber=20-=20=EB=AF=B8?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/GameNumber.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/baseball/domain/GameNumber.java b/src/main/java/baseball/domain/GameNumber.java index b8c8865c9e..0d8e7b95d2 100644 --- a/src/main/java/baseball/domain/GameNumber.java +++ b/src/main/java/baseball/domain/GameNumber.java @@ -24,10 +24,6 @@ public static GameNumber create() { return new GameNumber(Randoms.pickNumberInRange(MIN_VALUE, MAX_VALUE)); } - public int getValue() { - return value; - } - @Override public boolean equals(Object o) { if (this == o) return true;