From fa2389a8395ec31670931a58cfed3293e0c8849a Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 16:14:52 +0900 Subject: [PATCH 01/19] =?UTF-8?q?DOCS:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index fcf3f057..79216197 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,24 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + + +## 메소드 구현 설명 +### 1. void setAnswer() +- 컴퓨터가 정한 임의의 정답인 answer 배열을 초기화하는 메소드 +### 2. void setGuess() +- 플레이어가 맞추어야 할 정답인 guess 배열을 초기화하는 메소드 +### 3. int checkNumber(int idx) +- guess 의 idx 번째 숫자를 확인하여 볼, 스트라이크 여부를 확인하는 메소드 +- 스트라이크라면 10를 리턴한다. +- 볼이라면 1을 리턴한다. +- 둘 다 아니라면 0을 리턴한다. +### 4. boolean checkGuess() +- 0, 1, 2를 각각 checkNumber() 메소드의 arg 로 넣어 리턴값을 모두 result 변수에 넣는다. +- result 의 10의 자리는 스트라이크의 수를, 1의 자리는 볼의 수를 의미한다. +- result 값에 따라 알맞은 결과 메시지를 출력한다. +- 정답을 맞춘 경우 isRestart() 메소드를 호출하여 게임의 지속 여부를 결정한다. +### 5. isRestart() +- 사용자의 입력값에 따라 게임의 지속 여부를 결정하는 메소드 +- 사용자의 입력이 1이라면 setAnswer() 메소드를 호출하여 answer를 변경한 뒤 true를 리턴한다. +- 사용자의 입력이 2라면 false를 리턴한다. \ No newline at end of file From 2772b69494a498925f66a95a3f82cdf3adda9927 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 16:17:55 +0900 Subject: [PATCH 02/19] =?UTF-8?q?feat:=20setAnswer()=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/NumberBaseball.java diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java new file mode 100644 index 00000000..8c8f3fc5 --- /dev/null +++ b/src/main/java/NumberBaseball.java @@ -0,0 +1,21 @@ +import java.util.Random; + +public class NumberBaseball { + public static int SIZE = 3; + public static int[] answer = new int[SIZE]; + + public static void main(String[] args) { + + setAnswer(); + } + public static void setAnswer() { + while (true) { + Random random = new Random(); + answer[0] = random.nextInt(9) + 1; + answer[1] = random.nextInt(9) + 1; + answer[2] = random.nextInt(9) + 1; + if (answer[0] != answer[1] && answer[1] != answer[2] && answer[2] != answer[0]) + break; + } + } +} From 26f600ce96fecc5f865803f1e69580694de30121 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 16:24:48 +0900 Subject: [PATCH 03/19] =?UTF-8?q?test:=20setAnswer=5FEachAnswerNumbersAreD?= =?UTF-8?q?ifferent=20=EB=A9=94=EC=86=8C=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/test/java/NumberBaseballTest.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/NumberBaseballTest.java diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java new file mode 100644 index 00000000..d1d23456 --- /dev/null +++ b/src/test/java/NumberBaseballTest.java @@ -0,0 +1,22 @@ +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.not; + +class NumberBaseballTest { + + NumberBaseball numberBaseball = new NumberBaseball(); + + @Test + void setAnswer_EachAnswerNumbersAreDifferent(){ + // 각 자리의 숫자가 서로 다른지 확인 + NumberBaseball.setAnswer(); + int[] answer = NumberBaseball.answer; + + assertThat(answer[0]).isNotEqualTo(answer[1]); + assertThat(answer[1]).isNotEqualTo(answer[2]); + assertThat(answer[2]).isNotEqualTo(answer[0]); + } + +} \ No newline at end of file From c0ab1ee2d21558b611db4c176ff8f6ea8be0cd8b Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 16:58:56 +0900 Subject: [PATCH 04/19] =?UTF-8?q?feat:=20setGuess()=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index 8c8f3fc5..0682364c 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -1,12 +1,16 @@ import java.util.Random; +import java.util.Scanner; public class NumberBaseball { public static int SIZE = 3; public static int[] answer = new int[SIZE]; - + public static int[] guess = new int[SIZE]; + public static Scanner sc = new Scanner(System.in); public static void main(String[] args) { setAnswer(); + int inputNumber = sc.nextInt(); + setGuess(inputNumber); } public static void setAnswer() { while (true) { @@ -18,4 +22,11 @@ public static void setAnswer() { break; } } + + public static void setGuess(int inputNumber) { + guess[0] = inputNumber / 100; + guess[1] = inputNumber % 100 / 10; + guess[2] = inputNumber % 10; + } + } From 23c5835d2cce8f1b6c291388b90d87343a056499 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 16:59:25 +0900 Subject: [PATCH 05/19] =?UTF-8?q?test:getGuess=5FInputNumberIsSlicedWell()?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=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/test/java/NumberBaseballTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index d1d23456..13c0385e 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -19,4 +19,16 @@ void setAnswer_EachAnswerNumbersAreDifferent(){ assertThat(answer[2]).isNotEqualTo(answer[0]); } + @Test + void getGuess_InputNumberIsSlicedWell() { + // inputNumber가 정상적으로 slicing 되어 guess를 초기화하는지 확인 + int inputNumber = 935; + + NumberBaseball.setGuess(inputNumber); + + int[] actual = NumberBaseball.guess; + int[] expected = new int[]{9, 3, 5}; + + assertThat(actual).isEqualTo(expected); + } } \ No newline at end of file From 61b2c3dc414493470179574114ee507a774e18a0 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 17:01:04 +0900 Subject: [PATCH 06/19] =?UTF-8?q?DOCS:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 79216197..a4f0de46 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,9 @@ ## 메소드 구현 설명 ### 1. void setAnswer() - 컴퓨터가 정한 임의의 정답인 answer 배열을 초기화하는 메소드 -### 2. void setGuess() +### 2. void setGuess(int inputNumber) - 플레이어가 맞추어야 할 정답인 guess 배열을 초기화하는 메소드 +- inputNumber를 슬라이싱하여 세 자리수를 만들어 guess를 초기화한다. ### 3. int checkNumber(int idx) - guess 의 idx 번째 숫자를 확인하여 볼, 스트라이크 여부를 확인하는 메소드 - 스트라이크라면 10를 리턴한다. From 0d83dcd04760fd9c487a4004a52d04b1cd98ea71 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 17:52:47 +0900 Subject: [PATCH 07/19] =?UTF-8?q?refactor:=20DisplayName=20=EC=95=A0?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/NumberBaseballTest.java | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index 13c0385e..12426685 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -1,4 +1,6 @@ import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -7,11 +9,15 @@ class NumberBaseballTest { NumberBaseball numberBaseball = new NumberBaseball(); + int input = 935; + @BeforeAll + static void setAnswer(){ + NumberBaseball.setAnswer(); + } @Test - void setAnswer_EachAnswerNumbersAreDifferent(){ - // 각 자리의 숫자가 서로 다른지 확인 - NumberBaseball.setAnswer(); + @DisplayName("각 자리의 숫자가 서로 다른지 확인") + void setAnswer_ShouldEachAnswerDigitsAreDifferent(){ int[] answer = NumberBaseball.answer; assertThat(answer[0]).isNotEqualTo(answer[1]); @@ -20,15 +26,14 @@ void setAnswer_EachAnswerNumbersAreDifferent(){ } @Test - void getGuess_InputNumberIsSlicedWell() { - // inputNumber가 정상적으로 slicing 되어 guess를 초기화하는지 확인 - int inputNumber = 935; - - NumberBaseball.setGuess(inputNumber); + @DisplayName("input을 정상적으로 slicing 하는지 확인") + void getGuess_ShouldGenerateTheExpectedGuess() { + NumberBaseball.setGuess(input); int[] actual = NumberBaseball.guess; int[] expected = new int[]{9, 3, 5}; assertThat(actual).isEqualTo(expected); } + } \ No newline at end of file From dff4676d67d376479eb558700b63e3bb1934031f Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 17:53:29 +0900 Subject: [PATCH 08/19] =?UTF-8?q?feat:=20checkSingleDigit=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index 0682364c..6252f880 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -29,4 +29,13 @@ public static void setGuess(int inputNumber) { guess[2] = inputNumber % 10; } + public static int checkSingleDigit(int idx) { + if (answer[idx] == guess[idx]) { + return 10; + } + if (answer[(idx + 1) % 3] == guess[idx] || answer[(idx + 2) % 3] == guess[idx]) { + return 1; + } + return 0; + } } From a01b89a02dbbcc383cf0fc8870853ec992ade718 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 18:21:59 +0900 Subject: [PATCH 09/19] =?UTF-8?q?test:=20checkSingleDigit=5FShouldGenerate?= =?UTF-8?q?TheExpectedCount=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/NumberBaseballTest.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index 12426685..ae99b5d8 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -9,10 +9,11 @@ class NumberBaseballTest { NumberBaseball numberBaseball = new NumberBaseball(); - int input = 935; + static int input = 935; @BeforeAll static void setAnswer(){ NumberBaseball.setAnswer(); + NumberBaseball.setGuess(input); } @Test @@ -28,7 +29,6 @@ void setAnswer_ShouldEachAnswerDigitsAreDifferent(){ @Test @DisplayName("input을 정상적으로 slicing 하는지 확인") void getGuess_ShouldGenerateTheExpectedGuess() { - NumberBaseball.setGuess(input); int[] actual = NumberBaseball.guess; int[] expected = new int[]{9, 3, 5}; @@ -36,4 +36,13 @@ void getGuess_ShouldGenerateTheExpectedGuess() { assertThat(actual).isEqualTo(expected); } + @Test + @DisplayName("guess의 특정 digit가 올바른 볼카운트를 생성하는지 확인") + void checkSingleDigit_ShouldGenerateTheExpectedCount() { + int[] answerExample = new int[] {9, 2, 3}; + + assertThat(NumberBaseball.checkSingleDigit(answerExample, 0)).isEqualTo(10); + assertThat(NumberBaseball.checkSingleDigit(answerExample, 1)).isEqualTo(1); + assertThat(NumberBaseball.checkSingleDigit(answerExample, 2)).isEqualTo(0); + } } \ No newline at end of file From aa22488c5c2772d16c35ba6b28e8a020ebd7a86c Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:22:33 +0900 Subject: [PATCH 10/19] =?UTF-8?q?feat:=20createMessage=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index 6252f880..b871513a 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -6,12 +6,14 @@ public class NumberBaseball { public static int[] answer = new int[SIZE]; public static int[] guess = new int[SIZE]; public static Scanner sc = new Scanner(System.in); + public static void main(String[] args) { setAnswer(); int inputNumber = sc.nextInt(); setGuess(inputNumber); } + public static void setAnswer() { while (true) { Random random = new Random(); @@ -29,7 +31,17 @@ public static void setGuess(int inputNumber) { guess[2] = inputNumber % 10; } - public static int checkSingleDigit(int idx) { + public static String createMessage(int result) { + if (result / 10 == 3) { + return "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; + } + if (result != 0) { + return String.format("%d 스트라이크 %d 볼", result / 10, result % 10); + } + return "낫싱"; + } + + public static int checkSingleDigit(int[] answer, int idx) { if (answer[idx] == guess[idx]) { return 10; } From 4d8c087d01aa43a835fc948fbe37dbb70584d5d1 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:23:18 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20checkGuess=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index b871513a..dbe52ae3 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -31,6 +31,12 @@ public static void setGuess(int inputNumber) { guess[2] = inputNumber % 10; } + public static boolean checkGuess() { + int result = checkSingleDigit(answer, 0) + checkSingleDigit(answer, 1) + checkSingleDigit(answer, 2); + System.out.println(createMessage(result)); + return true; + } + public static String createMessage(int result) { if (result / 10 == 3) { return "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; From c6b41b9b288fb90bb783c6325fbe5c0ed5b8c54a Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:24:27 +0900 Subject: [PATCH 12/19] =?UTF-8?q?refactor:=20createMessage=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/NumberBaseball.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index dbe52ae3..3d2581ce 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -34,11 +34,10 @@ public static void setGuess(int inputNumber) { public static boolean checkGuess() { int result = checkSingleDigit(answer, 0) + checkSingleDigit(answer, 1) + checkSingleDigit(answer, 2); System.out.println(createMessage(result)); - return true; } public static String createMessage(int result) { - if (result / 10 == 3) { + if (result == 30) { return "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; } if (result != 0) { From 3d4158296a17753c4b2a14c0edd92be8d67c5dd6 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:38:31 +0900 Subject: [PATCH 13/19] =?UTF-8?q?test:=20createMessage=5FShouldGeneratedEx?= =?UTF-8?q?pectedMessage=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/NumberBaseballTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index ae99b5d8..690e83bd 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -45,4 +45,15 @@ void checkSingleDigit_ShouldGenerateTheExpectedCount() { assertThat(NumberBaseball.checkSingleDigit(answerExample, 1)).isEqualTo(1); assertThat(NumberBaseball.checkSingleDigit(answerExample, 2)).isEqualTo(0); } -} \ No newline at end of file + + @Test + void createMessage_ShouldGeneratedExpectedMessage() { + String actual1 = NumberBaseball.createMessage(30); + String actual2 = NumberBaseball.createMessage(11); + String actual3 = NumberBaseball.createMessage(0); + + assertThat(actual1).isEqualTo("3개의 숫자를 모두 맞히셨습니다! 게임 종료\n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + assertThat(actual2).isEqualTo("1 스트라이크 1 볼"); + assertThat(actual3).isEqualTo("낫싱"); + } +} From 801e14686f31234bb689d5bda78e6ec41cecc053 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:39:28 +0900 Subject: [PATCH 14/19] =?UTF-8?q?feat:=20isRestart=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index 3d2581ce..ecba2bd2 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -34,6 +34,9 @@ public static void setGuess(int inputNumber) { public static boolean checkGuess() { int result = checkSingleDigit(answer, 0) + checkSingleDigit(answer, 1) + checkSingleDigit(answer, 2); System.out.println(createMessage(result)); + + + return true; } public static String createMessage(int result) { @@ -55,4 +58,14 @@ public static int checkSingleDigit(int[] answer, int idx) { } return 0; } + + public static boolean isRestart() { + int restart = sc.nextInt(); + if (restart == 1) { + setAnswer(); + return true; + } + return false; + } + } From b2ce0ae4f98931a71724f16508af7ed989b7e7e2 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 21:40:22 +0900 Subject: [PATCH 15/19] =?UTF-8?q?refactor:=20checkGuess=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index ecba2bd2..aa05a69a 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -35,7 +35,9 @@ public static boolean checkGuess() { int result = checkSingleDigit(answer, 0) + checkSingleDigit(answer, 1) + checkSingleDigit(answer, 2); System.out.println(createMessage(result)); - + if(result==30){ + return isRestart(); + } return true; } From 59d26766f9247cfcb7f7a83610d875eb1854110b Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 22:07:08 +0900 Subject: [PATCH 16/19] =?UTF-8?q?refactor:=20checkSingleDigit=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 18 +++++++++++------- src/test/java/NumberBaseballTest.java | 10 ++++++---- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index aa05a69a..c08560cb 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -3,6 +3,7 @@ public class NumberBaseball { public static int SIZE = 3; + public static Boolean status = true; public static int[] answer = new int[SIZE]; public static int[] guess = new int[SIZE]; public static Scanner sc = new Scanner(System.in); @@ -10,8 +11,12 @@ public class NumberBaseball { public static void main(String[] args) { setAnswer(); - int inputNumber = sc.nextInt(); - setGuess(inputNumber); + while (status) { + System.out.print("숫자를 입력해주세요 : "); + int inputNumber = sc.nextInt(); + setGuess(inputNumber); + status = checkGuess(); + } } public static void setAnswer() { @@ -20,8 +25,7 @@ public static void setAnswer() { answer[0] = random.nextInt(9) + 1; answer[1] = random.nextInt(9) + 1; answer[2] = random.nextInt(9) + 1; - if (answer[0] != answer[1] && answer[1] != answer[2] && answer[2] != answer[0]) - break; + if (answer[0] != answer[1] && answer[1] != answer[2] && answer[2] != answer[0]) break; } } @@ -32,10 +36,10 @@ public static void setGuess(int inputNumber) { } public static boolean checkGuess() { - int result = checkSingleDigit(answer, 0) + checkSingleDigit(answer, 1) + checkSingleDigit(answer, 2); + int result = checkSingleDigit(0) + checkSingleDigit(1) + checkSingleDigit(2); System.out.println(createMessage(result)); - if(result==30){ + if (result == 30) { return isRestart(); } return true; @@ -51,7 +55,7 @@ public static String createMessage(int result) { return "낫싱"; } - public static int checkSingleDigit(int[] answer, int idx) { + public static int checkSingleDigit(int idx) { if (answer[idx] == guess[idx]) { return 10; } diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index 690e83bd..904e5d26 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -39,14 +39,15 @@ void getGuess_ShouldGenerateTheExpectedGuess() { @Test @DisplayName("guess의 특정 digit가 올바른 볼카운트를 생성하는지 확인") void checkSingleDigit_ShouldGenerateTheExpectedCount() { - int[] answerExample = new int[] {9, 2, 3}; + NumberBaseball.answer = new int[]{9, 2, 3}; - assertThat(NumberBaseball.checkSingleDigit(answerExample, 0)).isEqualTo(10); - assertThat(NumberBaseball.checkSingleDigit(answerExample, 1)).isEqualTo(1); - assertThat(NumberBaseball.checkSingleDigit(answerExample, 2)).isEqualTo(0); + assertThat(NumberBaseball.checkSingleDigit(0)).isEqualTo(10); + assertThat(NumberBaseball.checkSingleDigit(1)).isEqualTo(1); + assertThat(NumberBaseball.checkSingleDigit(2)).isEqualTo(0); } @Test + @DisplayName("알맞은 메시지 생성 여부를 확인") void createMessage_ShouldGeneratedExpectedMessage() { String actual1 = NumberBaseball.createMessage(30); String actual2 = NumberBaseball.createMessage(11); @@ -56,4 +57,5 @@ void createMessage_ShouldGeneratedExpectedMessage() { assertThat(actual2).isEqualTo("1 스트라이크 1 볼"); assertThat(actual3).isEqualTo("낫싱"); } + } From 4ca89355c7eebe1b616dd1477dbe93160520361b Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 22:26:59 +0900 Subject: [PATCH 17/19] =?UTF-8?q?refactor:=20isRestart=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/NumberBaseball.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/NumberBaseball.java b/src/main/java/NumberBaseball.java index c08560cb..35401c9a 100644 --- a/src/main/java/NumberBaseball.java +++ b/src/main/java/NumberBaseball.java @@ -40,7 +40,7 @@ public static boolean checkGuess() { System.out.println(createMessage(result)); if (result == 30) { - return isRestart(); + return isRestart(sc.nextInt()); } return true; } @@ -65,8 +65,7 @@ public static int checkSingleDigit(int idx) { return 0; } - public static boolean isRestart() { - int restart = sc.nextInt(); + public static boolean isRestart(int restart) { if (restart == 1) { setAnswer(); return true; From 342a8c891047454622aabb19fa56654ea0631b10 Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 22:42:12 +0900 Subject: [PATCH 18/19] =?UTF-8?q?test:=20isRestart=5FShouldReturnExpectedV?= =?UTF-8?q?alue=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/NumberBaseballTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/NumberBaseballTest.java b/src/test/java/NumberBaseballTest.java index 904e5d26..ddd53a7a 100644 --- a/src/test/java/NumberBaseballTest.java +++ b/src/test/java/NumberBaseballTest.java @@ -58,4 +58,10 @@ void createMessage_ShouldGeneratedExpectedMessage() { assertThat(actual3).isEqualTo("낫싱"); } + @Test + @DisplayName("알맞은 boolean 값을 리턴하는지 확인") + void isRestart_ShouldReturnExpectedValue() { + assertThat(NumberBaseball.isRestart(1)).isTrue(); + assertThat(NumberBaseball.isRestart(2)).isFalse(); + } } From a97fef3d1ccb02385a5d8812d954d1bf2ffb4c1e Mon Sep 17 00:00:00 2001 From: "soony.kwonn" Date: Wed, 21 Dec 2022 22:42:38 +0900 Subject: [PATCH 19/19] =?UTF-8?q?DOCS:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a4f0de46..c6888683 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ### 2. void setGuess(int inputNumber) - 플레이어가 맞추어야 할 정답인 guess 배열을 초기화하는 메소드 - inputNumber를 슬라이싱하여 세 자리수를 만들어 guess를 초기화한다. -### 3. int checkNumber(int idx) +### 3. int checkSingleDigit(int idx) - guess 의 idx 번째 숫자를 확인하여 볼, 스트라이크 여부를 확인하는 메소드 - 스트라이크라면 10를 리턴한다. - 볼이라면 1을 리턴한다. @@ -21,9 +21,14 @@ ### 4. boolean checkGuess() - 0, 1, 2를 각각 checkNumber() 메소드의 arg 로 넣어 리턴값을 모두 result 변수에 넣는다. - result 의 10의 자리는 스트라이크의 수를, 1의 자리는 볼의 수를 의미한다. -- result 값에 따라 알맞은 결과 메시지를 출력한다. -- 정답을 맞춘 경우 isRestart() 메소드를 호출하여 게임의 지속 여부를 결정한다. -### 5. isRestart() +- createMessage() 메소드를 호출하여 result 값에 따라 알맞은 결과 메시지를 출력한다. +- 정답을 맞춘 경우 isRestart() 메소드를 호출하여 게임의 지속 여부를 결정한다. +### 5. createMessage(int result) +- result 값에 따라 알맞은 메시지를 생성하는 메소드이다. +- result가 30이라면 모두 3 스트라이크를 의미하므로 이에 따른 메시지를 리턴한다. +- 이후 result가 0이 아니라면 1의 자리 수는 ball을 의미하므로 알맞은 메시지를 리턴한다. +- 위 두 조건을 모두 충족하지 않는다면 0인 것이므로 "낫싱"을 리턴한다. +### 6. isRestart() - 사용자의 입력값에 따라 게임의 지속 여부를 결정하는 메소드 - 사용자의 입력이 1이라면 setAnswer() 메소드를 호출하여 answer를 변경한 뒤 true를 리턴한다. - 사용자의 입력이 2라면 false를 리턴한다. \ No newline at end of file