From aa29092f7c85141817014fd1175557fde8dadff2 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 09:51:11 +0900 Subject: [PATCH 01/10] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20(README.md)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index fcf3f057..3a96af2c 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,11 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + +## 구현할 기능 목록 +* 유저에게 메세지를 출력하는 기능 + * 유저에게 인풋을 요구하는 메세지 + * 결과 메세지 +* 유저의 인풋을 저장하는 기능 +* 유저의 인풋에 대한 결과를 확인하는 기능 +* 서로 다른 3개의 digit으로 이루어진 랜덤한 세자리 숫자 선정하는 기능 From 89855e137e4d892fa2f8e7bbe120111cc54caf71 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 14:38:10 +0900 Subject: [PATCH 02/10] feat: Console --- src/main/java/baseball/Console.java | 34 ++++++++++++++++++++++++++ src/main/java/baseball/Controller.java | 8 ++++++ src/main/java/baseball/Engine.java | 4 +++ 3 files changed, 46 insertions(+) create mode 100644 src/main/java/baseball/Console.java create mode 100644 src/main/java/baseball/Controller.java create mode 100644 src/main/java/baseball/Engine.java diff --git a/src/main/java/baseball/Console.java b/src/main/java/baseball/Console.java new file mode 100644 index 00000000..7f941027 --- /dev/null +++ b/src/main/java/baseball/Console.java @@ -0,0 +1,34 @@ +package baseball; +import java.util.Scanner; + +public class Console { + public String getInput() { + System.out.print("숫자를 입력해주세요 : "); + Scanner scanner = new Scanner(System.in); + String input = scanner.next(); + return input; + } + + public void printResult(int strike, int ball) { + if (strike + ball == 0) { + System.out.println("낫씽"); + } + else if (strike == 0) { + System.out.println(ball + " 볼"); + } + else if (ball == 0) { + System.out.println(strike + " 스트라이크"); + } + else { + System.out.println(strike + " 스트라이크 " + ball + " 볼"); + } + } + + public int endGame() { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println("게임을 새로 시작하시려면 1, 종료하려면 2를 입력하세요."); + Scanner scanner = new Scanner(System.in); + int input = scanner.nextInt(); + return input; + } +} diff --git a/src/main/java/baseball/Controller.java b/src/main/java/baseball/Controller.java new file mode 100644 index 00000000..f3680592 --- /dev/null +++ b/src/main/java/baseball/Controller.java @@ -0,0 +1,8 @@ +package baseball; + +public class Controller { + public static void main(String[] args) { + Console console = new Console(); + console.getInput(); + } +} diff --git a/src/main/java/baseball/Engine.java b/src/main/java/baseball/Engine.java new file mode 100644 index 00000000..24916afb --- /dev/null +++ b/src/main/java/baseball/Engine.java @@ -0,0 +1,4 @@ +package baseball; + +public class Engine { +} From 08944777126df6cbdf2d8986ed0a0e371d1759b5 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 15:31:16 +0900 Subject: [PATCH 03/10] feat: Engine --- src/main/java/baseball/Controller.java | 4 ++-- src/main/java/baseball/Engine.java | 27 ++++++++++++++++++++++++++ src/main/java/baseball/Pitcher.java | 7 +++++++ src/main/java/baseball/Referee.java | 8 ++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/main/java/baseball/Pitcher.java create mode 100644 src/main/java/baseball/Referee.java diff --git a/src/main/java/baseball/Controller.java b/src/main/java/baseball/Controller.java index f3680592..6789cf13 100644 --- a/src/main/java/baseball/Controller.java +++ b/src/main/java/baseball/Controller.java @@ -2,7 +2,7 @@ public class Controller { public static void main(String[] args) { - Console console = new Console(); - console.getInput(); + Engine engine = new Engine(); + engine.playBall(); } } diff --git a/src/main/java/baseball/Engine.java b/src/main/java/baseball/Engine.java index 24916afb..bc37d007 100644 --- a/src/main/java/baseball/Engine.java +++ b/src/main/java/baseball/Engine.java @@ -1,4 +1,31 @@ package baseball; public class Engine { + public void playBall() { + int flag = 1; + while (flag == 1) { + flag = match(); + } + } + + private int match() { + Console console = new Console(); + Pitcher pitcher = new Pitcher(); + String target = pitcher.generateNumber(); + batting(console, target); + return console.endGame(); + } + + private void batting(Console console, String target) { + int strike = 0; + int ball; + Referee referee = new Referee(); + while (strike != 3) { + String input = console.getInput(); + int[] result = referee.judge(target, input); + strike = result[0]; + ball = result[1]; + console.printResult(strike, ball); + } + } } diff --git a/src/main/java/baseball/Pitcher.java b/src/main/java/baseball/Pitcher.java new file mode 100644 index 00000000..1135c6aa --- /dev/null +++ b/src/main/java/baseball/Pitcher.java @@ -0,0 +1,7 @@ +package baseball; + +public class Pitcher { + public String generateNumber() { + return "123"; + } +} diff --git a/src/main/java/baseball/Referee.java b/src/main/java/baseball/Referee.java new file mode 100644 index 00000000..5274de41 --- /dev/null +++ b/src/main/java/baseball/Referee.java @@ -0,0 +1,8 @@ +package baseball; + +public class Referee { + public int[] judge(String target, String input) { + int[] result = {2, 2}; + return result; + } +} From 2b8ea407b0875d55f9a986912e9f89c796ef8a1a Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 17:22:20 +0900 Subject: [PATCH 04/10] feat: generateNumber in Pitcher --- src/main/java/baseball/Pitcher.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Pitcher.java b/src/main/java/baseball/Pitcher.java index 1135c6aa..33586ee1 100644 --- a/src/main/java/baseball/Pitcher.java +++ b/src/main/java/baseball/Pitcher.java @@ -1,7 +1,19 @@ package baseball; +import java.util.Random; +import java.util.ArrayList; +import java.util.Arrays; public class Pitcher { public String generateNumber() { - return "123"; + Random random = new Random(); + ArrayList digits = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); + StringBuilder number = new StringBuilder(); + for (int i = 0; i < 3; i++) { + int randomIndex = random.nextInt(digits.size()); + number.append(digits.get(randomIndex)); + digits.remove(randomIndex); + } + + return number.toString(); } } From 8703e75a379cd38eb89ac162d305f05a84c280d1 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 17:29:57 +0900 Subject: [PATCH 05/10] style: fit to Java code convention --- src/main/java/baseball/Console.java | 15 +++++---------- src/main/java/baseball/Pitcher.java | 1 - 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/baseball/Console.java b/src/main/java/baseball/Console.java index 7f941027..fc03a852 100644 --- a/src/main/java/baseball/Console.java +++ b/src/main/java/baseball/Console.java @@ -5,21 +5,17 @@ public class Console { public String getInput() { System.out.print("숫자를 입력해주세요 : "); Scanner scanner = new Scanner(System.in); - String input = scanner.next(); - return input; + return scanner.next(); } public void printResult(int strike, int ball) { if (strike + ball == 0) { System.out.println("낫씽"); - } - else if (strike == 0) { + } else if (strike == 0) { System.out.println(ball + " 볼"); - } - else if (ball == 0) { + } else if (ball == 0) { System.out.println(strike + " 스트라이크"); - } - else { + } else { System.out.println(strike + " 스트라이크 " + ball + " 볼"); } } @@ -28,7 +24,6 @@ public int endGame() { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); System.out.println("게임을 새로 시작하시려면 1, 종료하려면 2를 입력하세요."); Scanner scanner = new Scanner(System.in); - int input = scanner.nextInt(); - return input; + return scanner.nextInt(); } } diff --git a/src/main/java/baseball/Pitcher.java b/src/main/java/baseball/Pitcher.java index 33586ee1..fe58e6e0 100644 --- a/src/main/java/baseball/Pitcher.java +++ b/src/main/java/baseball/Pitcher.java @@ -13,7 +13,6 @@ public String generateNumber() { number.append(digits.get(randomIndex)); digits.remove(randomIndex); } - return number.toString(); } } From 8272343de437ecd5c07fa1726234c9e32c30d661 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 18:08:51 +0900 Subject: [PATCH 06/10] feat: Referee --- src/main/java/baseball/Referee.java | 41 +++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Referee.java b/src/main/java/baseball/Referee.java index 5274de41..1ecc0be0 100644 --- a/src/main/java/baseball/Referee.java +++ b/src/main/java/baseball/Referee.java @@ -1,8 +1,45 @@ package baseball; +import java.util.ArrayList; +import java.util.List; public class Referee { public int[] judge(String target, String input) { - int[] result = {2, 2}; - return result; + return new int[] {countStrike(convert(target), convert(input)), countBall(convert(target), convert(input))}; + } + + private List convert(String string) { + List career = new ArrayList<>(); + for(String number: string.split("")) { + career.add(Integer.parseInt(number)); + } + return career; + } + + private int countBall(List target, List input) { + int ball = 0; + if (target.get(0) == input.get(1) || target.get(0) == input.get(2)) { + ball++; + } + if (target.get(1) == input.get(0) || target.get(1) == input.get(2)) { + ball++; + } + if (target.get(2) == input.get(0) || target.get(2) == input.get(1)) { + ball++; + } + return ball; + } + + private int countStrike(List target, List input) { + int strike = 0; + if (target.get(0) == input.get(0)) { + strike ++; + } + if (target.get(1) == input.get(1)) { + strike ++; + } + if (target.get(2) == input.get(2)) { + strike ++; + } + return strike; } } From 0821d5db055ca5f7118250ec29cea4dead7e5e48 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 18:10:14 +0900 Subject: [PATCH 07/10] test: PitcherTest, RefereeTest --- src/test/java/baseball/PitcherTest.java | 22 ++++++++++++++++++++++ src/test/java/baseball/RefereeTest.java | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/test/java/baseball/PitcherTest.java create mode 100644 src/test/java/baseball/RefereeTest.java diff --git a/src/test/java/baseball/PitcherTest.java b/src/test/java/baseball/PitcherTest.java new file mode 100644 index 00000000..fac14d88 --- /dev/null +++ b/src/test/java/baseball/PitcherTest.java @@ -0,0 +1,22 @@ +package baseball; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class PitcherTest { + Pitcher pitcher; + + @BeforeEach + void setUp() { + pitcher = new Pitcher(); + } + + @Test + @DisplayName("랜덤 세자리 숫자 생성 확인") + void lengthTest() { + String number = pitcher.generateNumber(); + assertThat(3).isEqualTo(number.length()); + } +} diff --git a/src/test/java/baseball/RefereeTest.java b/src/test/java/baseball/RefereeTest.java new file mode 100644 index 00000000..f7989f73 --- /dev/null +++ b/src/test/java/baseball/RefereeTest.java @@ -0,0 +1,21 @@ +package baseball; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class RefereeTest { + Referee referee; + + @BeforeEach + void setUp() { + referee = new Referee(); + } + + @Test + @DisplayName("스트라이크 볼 판단 확인") + void judgeTest() { + assertThat(new int[] {2, 0}).isEqualTo(referee.judge("123", "125")); + } +} From 15107da9083e2f674d8608b00875cb4554852aaa Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 18:14:37 +0900 Subject: [PATCH 08/10] chore: remove string test --- src/test/java/study/StringTest.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/test/java/study/StringTest.java diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java deleted file mode 100644 index 43e47d90..00000000 --- a/src/test/java/study/StringTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package study; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class StringTest { - @Test - void replace() { - String actual = "abc".replace("b", "d"); - assertThat(actual).isEqualTo("adc"); - } -} From 94e5b49de34136480ec14a4889dd7f258df6c21b Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 18:16:05 +0900 Subject: [PATCH 09/10] docs: Updated To-do --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3a96af2c..1c36dc47 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,7 @@ * 유저의 인풋을 저장하는 기능 * 유저의 인풋에 대한 결과를 확인하는 기능 * 서로 다른 3개의 digit으로 이루어진 랜덤한 세자리 숫자 선정하는 기능 + +## 구현하면 좋을 기능 +* input의 validity check 기능 +* 더 많은 Test들 From 9f88cfafca8ec5ce4cc9745544e04051116432b6 Mon Sep 17 00:00:00 2001 From: kakao Date: Thu, 22 Dec 2022 18:59:46 +0900 Subject: [PATCH 10/10] fix: remove usage of else statement --- src/main/java/baseball/Console.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/baseball/Console.java b/src/main/java/baseball/Console.java index fc03a852..ede8eb2d 100644 --- a/src/main/java/baseball/Console.java +++ b/src/main/java/baseball/Console.java @@ -10,14 +10,15 @@ public String getInput() { public void printResult(int strike, int ball) { if (strike + ball == 0) { - System.out.println("낫씽"); - } else if (strike == 0) { - System.out.println(ball + " 볼"); - } else if (ball == 0) { - System.out.println(strike + " 스트라이크"); - } else { - System.out.println(strike + " 스트라이크 " + ball + " 볼"); + System.out.print("낫씽"); } + if (strike != 0) { + System.out.print(strike + " 스트라이크 "); + } + if (ball != 0) { + System.out.print(ball + " 볼"); + } + System.out.println(); } public int endGame() {