From 2c8a53d6b07a12f4fcada9d5d99dc16298b00b3e Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 10:51:10 +0900 Subject: [PATCH 01/25] docs README.md --- src/main/java/baseball/README.md | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/baseball/README.md diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md new file mode 100644 index 000000000..15cdf271f --- /dev/null +++ b/src/main/java/baseball/README.md @@ -0,0 +1,37 @@ +# 숫자야구게임 +### 룰 +1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임 + +같은 수가 같은 자리에 있으면 `스트라이크` + +같은 수가 다른 자리에 있으면 `볼` + +같은 수가 전혀 없으면 `포볼 또는 낫싱` + +여러번 반복해 정보를 얻으며 상대방(컴퓨터)의 수를 맞추면 승리 + +e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스트라이크`, 456을 제시한 경우 : `1볼 1스트라이크`, 789를 제시한 경우 : `낫싱` + +### 작동 방식 + +1) 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택 +2) 사용자는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과 출력 +3) 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임 종료 +4) 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다 + +### 기능 목록 +InputView + +System.in을 담당하는 UI 로직 + +ResultView + +System.out을 담당하는 UI 로직 + +MakeNum + +숫자 3개 랜덤으로 추출하는 메소드 + +CheckNum + +숫자 3개가 맞는지 확인하는 메소드 From 72369e7d7fead0fbc735cab53c26fb8761b36629 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 10:54:51 +0900 Subject: [PATCH 02/25] feat: inputView, resultView --- src/main/java/baseball/Baseball.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/baseball/Baseball.java diff --git a/src/main/java/baseball/Baseball.java b/src/main/java/baseball/Baseball.java new file mode 100644 index 000000000..55a2c8e6e --- /dev/null +++ b/src/main/java/baseball/Baseball.java @@ -0,0 +1,27 @@ +package baseball; + +import java.util.*; + +public class Baseball { + public List inputView() { + Scanner scanner = new Scanner(System.in); + List lst = new ArrayList(); + + for (int i = 0; i < 3; i++) { + int value = scanner.nextInt(); + lst.add(value); + } + return lst; + } + + public void resultView(int[] arr) { + List action = Arrays.asList("볼", "스트라이크", "낫싱"); + for (int i = 0; i < 3; i++) { + if (arr[i] > 0) { + System.out.print(arr[i] + action.get(i) + " "); + } + } + } + + +} From 9ee8c96c47de618f62c576757cb53a97ed931efb Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 14:22:34 +0900 Subject: [PATCH 03/25] =?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 --- src/main/java/baseball/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md index 15cdf271f..162ec5368 100644 --- a/src/main/java/baseball/README.md +++ b/src/main/java/baseball/README.md @@ -20,18 +20,18 @@ e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스 4) 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다 ### 기능 목록 -InputView +inputView System.in을 담당하는 UI 로직 -ResultView +resultView System.out을 담당하는 UI 로직 -MakeNum +makeNum 숫자 3개 랜덤으로 추출하는 메소드 -CheckNum +checkNum 숫자 3개가 맞는지 확인하는 메소드 From 44464e39d32dd9849f11e630c5fd3af3533a8166 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 14:23:26 +0900 Subject: [PATCH 04/25] =?UTF-8?q?test:=20BaseballTest=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/baseball/BaseballTest.java | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/java/baseball/BaseballTest.java diff --git a/src/test/java/baseball/BaseballTest.java b/src/test/java/baseball/BaseballTest.java new file mode 100644 index 000000000..0c4ea0785 --- /dev/null +++ b/src/test/java/baseball/BaseballTest.java @@ -0,0 +1,55 @@ +package baseball; + +import baseball.Baseball; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.*; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BaseballTest { + Baseball baseball; + + @BeforeEach + public void setUp(){ + baseball = new Baseball(); + } + + @Test + @DisplayName("입력 숫자가 잘 저장되는지 확인하는 테스트입니다.") + public void inputViewTest(){ + String input = "345"; + OutputStream out = new ByteArrayOutputStream(); + System.setOut(new PrintStream(out)); + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + List result = baseball.inputView(); + assertThat(result.size()).isEqualTo(3); + } + + @Test + public void resultViewTest(){ + List result = Arrays.asList(3,0,0); + baseball.resultView(result); + } + + @Test + @DisplayName("랜덤 숫자가 잘 생성되는지 확인하는 테스트입니다.") + public void makeNumTest(){ + List result = baseball.makeNum(); + assertThat(result.size()).isEqualTo(3); + assertThat(result.stream().allMatch(v->v>=1 && v<=9)).isTrue(); + System.out.println(result); + } + + @Test + public void checkNumTest(){ + List randomNum = Arrays.asList(3,1,2); + List userNum = Arrays.asList(2,1,3); + assertThat(baseball.checkNum(randomNum, userNum).equals(Arrays.asList(3,0,0))); + } +} \ No newline at end of file From bf277a4151cd575f7fbfd43b1344845359e3b479 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 14:24:12 +0900 Subject: [PATCH 05/25] =?UTF-8?q?feat:=20main=20=ED=81=B4=EB=9E=98?= =?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/main/java/baseball/BaseballMain.java | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/baseball/BaseballMain.java diff --git a/src/main/java/baseball/BaseballMain.java b/src/main/java/baseball/BaseballMain.java new file mode 100644 index 000000000..4f2005f0d --- /dev/null +++ b/src/main/java/baseball/BaseballMain.java @@ -0,0 +1,31 @@ +package baseball; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class BaseballMain { + public static void main(String[] args) { + Baseball baseball = new Baseball(); + + while (true) { + List randomNum = baseball.makeNum(); + + List check = Arrays.asList(0, 0, 0); + + while (check.get(1) != 3) { //3스트라이크 전까지 + System.out.println(randomNum); + List userNum = baseball.inputView(); + + check = baseball.checkNum(randomNum, userNum); + baseball.resultView(check); + } + System.out.println("새로 시작하려면 1, 종료하려면 2를 입력하세요."); + Scanner scanner = new Scanner(System.in); + int resume = scanner.nextInt(); + if (resume == 2) { + break; + } + } + } +} From 2cfa9fbcb94bdd5e1ea60762644eb228dfed2fd9 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sun, 22 May 2022 14:26:04 +0900 Subject: [PATCH 06/25] =?UTF-8?q?feat:=20Baseball=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Baseball.java | 68 +++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 11 deletions(-) diff --git a/src/main/java/baseball/Baseball.java b/src/main/java/baseball/Baseball.java index 55a2c8e6e..539d106b6 100644 --- a/src/main/java/baseball/Baseball.java +++ b/src/main/java/baseball/Baseball.java @@ -1,27 +1,73 @@ package baseball; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class Baseball { public List inputView() { Scanner scanner = new Scanner(System.in); - List lst = new ArrayList(); - for (int i = 0; i < 3; i++) { - int value = scanner.nextInt(); - lst.add(value); - } - return lst; + System.out.print("숫자를 입력해 주세요 : "); + String value = scanner.nextLine(); + + return Stream.of(value.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); } - public void resultView(int[] arr) { + public void resultView(List arr) { + if (arr.stream().mapToInt(i -> i).sum() > 3) { + throw new ArrayIndexOutOfBoundsException("결과의 전체 합이 3 이하여야 합니다"); + } List action = Arrays.asList("볼", "스트라이크", "낫싱"); - for (int i = 0; i < 3; i++) { - if (arr[i] > 0) { - System.out.print(arr[i] + action.get(i) + " "); + if (arr.get(2).equals(3)) { + System.out.println(action.get(2)); //낫싱 + return; + } + if (arr.get(1).equals(3)) { + System.out.println(arr.get(1) + action.get(1)); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return; + } + for (int i = 0; i < 2; i++) { + if (arr.get(i) > 0) { + System.out.print(arr.get(i) + action.get(i) + " "); + } + } + System.out.println(); + } + + public List makeNum() { + Random random = new Random(); + List lst = new ArrayList<>(); + while (lst.size() < 3) { + int value = random.nextInt(9) + 1; + if (!lst.contains(value)) { + lst.add(value); } } + return lst; } + public List checkNum(List randomNum, List userNum) { + List temp = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + temp.add(check(i, randomNum, userNum)); + } + List result = new ArrayList<>(); + + result.add((int) temp.stream().filter(str -> "볼".equals(str)).count()); + result.add((int) temp.stream().filter(str -> "스트라이크".equals(str)).count()); + result.add((int) temp.stream().filter(str -> "낫싱".equals(str)).count()); + + return result; + } -} + public String check(int i, List randomNum, List userNum) { + if (randomNum.get(i).equals(userNum.get(i))) { + return "스트라이크"; + } else if (randomNum.contains(userNum.get(i))) { + return "볼"; + } + return "낫싱"; + } +} \ No newline at end of file From 15c6b05e8ea360f4dbeb35d4784b86aeccf7d7dd Mon Sep 17 00:00:00 2001 From: oliviarla Date: Thu, 26 May 2022 14:47:25 +0900 Subject: [PATCH 07/25] =?UTF-8?q?docs(baseball):=20README.md=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EB=8B=A4=EC=8B=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/Baseball.java | 73 ------------------------ src/main/java/baseball/BaseballMain.java | 31 ---------- src/main/java/baseball/README.md | 29 +++++----- src/test/java/baseball/BaseballTest.java | 55 ------------------ 4 files changed, 15 insertions(+), 173 deletions(-) delete mode 100644 src/main/java/baseball/Baseball.java delete mode 100644 src/main/java/baseball/BaseballMain.java delete mode 100644 src/test/java/baseball/BaseballTest.java diff --git a/src/main/java/baseball/Baseball.java b/src/main/java/baseball/Baseball.java deleted file mode 100644 index 539d106b6..000000000 --- a/src/main/java/baseball/Baseball.java +++ /dev/null @@ -1,73 +0,0 @@ -package baseball; - -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class Baseball { - public List inputView() { - Scanner scanner = new Scanner(System.in); - - System.out.print("숫자를 입력해 주세요 : "); - String value = scanner.nextLine(); - - return Stream.of(value.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); - } - - public void resultView(List arr) { - if (arr.stream().mapToInt(i -> i).sum() > 3) { - throw new ArrayIndexOutOfBoundsException("결과의 전체 합이 3 이하여야 합니다"); - } - List action = Arrays.asList("볼", "스트라이크", "낫싱"); - if (arr.get(2).equals(3)) { - System.out.println(action.get(2)); //낫싱 - return; - } - if (arr.get(1).equals(3)) { - System.out.println(arr.get(1) + action.get(1)); - System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - return; - } - for (int i = 0; i < 2; i++) { - if (arr.get(i) > 0) { - System.out.print(arr.get(i) + action.get(i) + " "); - } - } - System.out.println(); - } - - public List makeNum() { - Random random = new Random(); - List lst = new ArrayList<>(); - while (lst.size() < 3) { - int value = random.nextInt(9) + 1; - if (!lst.contains(value)) { - lst.add(value); - } - } - return lst; - } - - public List checkNum(List randomNum, List userNum) { - List temp = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - temp.add(check(i, randomNum, userNum)); - } - List result = new ArrayList<>(); - - result.add((int) temp.stream().filter(str -> "볼".equals(str)).count()); - result.add((int) temp.stream().filter(str -> "스트라이크".equals(str)).count()); - result.add((int) temp.stream().filter(str -> "낫싱".equals(str)).count()); - - return result; - } - - public String check(int i, List randomNum, List userNum) { - if (randomNum.get(i).equals(userNum.get(i))) { - return "스트라이크"; - } else if (randomNum.contains(userNum.get(i))) { - return "볼"; - } - return "낫싱"; - } -} \ No newline at end of file diff --git a/src/main/java/baseball/BaseballMain.java b/src/main/java/baseball/BaseballMain.java deleted file mode 100644 index 4f2005f0d..000000000 --- a/src/main/java/baseball/BaseballMain.java +++ /dev/null @@ -1,31 +0,0 @@ -package baseball; - -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -public class BaseballMain { - public static void main(String[] args) { - Baseball baseball = new Baseball(); - - while (true) { - List randomNum = baseball.makeNum(); - - List check = Arrays.asList(0, 0, 0); - - while (check.get(1) != 3) { //3스트라이크 전까지 - System.out.println(randomNum); - List userNum = baseball.inputView(); - - check = baseball.checkNum(randomNum, userNum); - baseball.resultView(check); - } - System.out.println("새로 시작하려면 1, 종료하려면 2를 입력하세요."); - Scanner scanner = new Scanner(System.in); - int resume = scanner.nextInt(); - if (resume == 2) { - break; - } - } - } -} diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md index 162ec5368..80a63b0c7 100644 --- a/src/main/java/baseball/README.md +++ b/src/main/java/baseball/README.md @@ -20,18 +20,19 @@ e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스 4) 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다 ### 기능 목록 -inputView -System.in을 담당하는 UI 로직 - -resultView - -System.out을 담당하는 UI 로직 - -makeNum - -숫자 3개 랜덤으로 추출하는 메소드 - -checkNum - -숫자 3개가 맞는지 확인하는 메소드 +엔티티 +- [ ] Ball: 세자리 숫자 저장하는 엔티티 클래스 +- [ ] BallStatus: 유저 Ball과 랜덤 Ball 비교한 결과를 저장하는 엔티티 클래스 +- [ ] Action: 동작들을 담는 enum 클래스 + +서비스 +- [ ] BaseballService + - [ ] isBall: 볼 여부 판별 + - [ ] isStrike: 스트라이크 여부 판별 + - [ ] compare: RandomNum, UserNum 비교해 결과 반환 +- [ ] RandomNumGenerator: 임의의 서로다른 3자리 수 생성 + + +- [ ] InputView: 사용자로부터 입력 받는 뷰 담당하는 클래스 +- [ ] OutputView: 출력 하는 뷰 담당하는 클래스 \ No newline at end of file diff --git a/src/test/java/baseball/BaseballTest.java b/src/test/java/baseball/BaseballTest.java deleted file mode 100644 index 0c4ea0785..000000000 --- a/src/test/java/baseball/BaseballTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package baseball; - -import baseball.Baseball; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.*; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class BaseballTest { - Baseball baseball; - - @BeforeEach - public void setUp(){ - baseball = new Baseball(); - } - - @Test - @DisplayName("입력 숫자가 잘 저장되는지 확인하는 테스트입니다.") - public void inputViewTest(){ - String input = "345"; - OutputStream out = new ByteArrayOutputStream(); - System.setOut(new PrintStream(out)); - InputStream in = new ByteArrayInputStream(input.getBytes()); - System.setIn(in); - List result = baseball.inputView(); - assertThat(result.size()).isEqualTo(3); - } - - @Test - public void resultViewTest(){ - List result = Arrays.asList(3,0,0); - baseball.resultView(result); - } - - @Test - @DisplayName("랜덤 숫자가 잘 생성되는지 확인하는 테스트입니다.") - public void makeNumTest(){ - List result = baseball.makeNum(); - assertThat(result.size()).isEqualTo(3); - assertThat(result.stream().allMatch(v->v>=1 && v<=9)).isTrue(); - System.out.println(result); - } - - @Test - public void checkNumTest(){ - List randomNum = Arrays.asList(3,1,2); - List userNum = Arrays.asList(2,1,3); - assertThat(baseball.checkNum(randomNum, userNum).equals(Arrays.asList(3,0,0))); - } -} \ No newline at end of file From 01dd9749e32c6015720c718dedf90f7bc8e0e071 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Thu, 26 May 2022 16:22:55 +0900 Subject: [PATCH 08/25] =?UTF-8?q?feat(baseball):=20InputView=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/main/java/baseball/view/InputView.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/baseball/view/InputView.java diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java new file mode 100644 index 000000000..38365e456 --- /dev/null +++ b/src/main/java/baseball/view/InputView.java @@ -0,0 +1,26 @@ +package baseball.view; + +import baseball.domain.Ball; + +import java.util.Arrays; +import java.util.Scanner; +import java.util.Set; +import java.util.stream.Collectors; + +public class InputView { + public Ball inputBall() { + Scanner scanner = new Scanner(System.in); + System.out.print("숫자를 입력해 주세요 : "); + String input = scanner.next(); + Set integerSet = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet()); + + return new Ball(integerSet); + } + + public boolean resumeGame() { + Scanner scanner = new Scanner(System.in); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int input = scanner.nextInt(); + return input == 1; + } +} \ No newline at end of file From 80247634b92dd884743ca4f51a66104b56679bfa Mon Sep 17 00:00:00 2001 From: oliviarla Date: Thu, 26 May 2022 16:23:23 +0900 Subject: [PATCH 09/25] test(baseball): InputView test --- .../java/baseball/view/InputViewTest.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/test/java/baseball/view/InputViewTest.java diff --git a/src/test/java/baseball/view/InputViewTest.java b/src/test/java/baseball/view/InputViewTest.java new file mode 100644 index 000000000..2c54e71bc --- /dev/null +++ b/src/test/java/baseball/view/InputViewTest.java @@ -0,0 +1,44 @@ +package baseball.view; + +import baseball.domain.Ball; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.*; + +import static org.assertj.core.api.Assertions.assertThat; + +public class InputViewTest { + InputView inputView; + Ball ball; + + @BeforeEach + void setUp() { + inputView = new InputView(); + String input = "384"; + OutputStream out = new ByteArrayOutputStream(); + System.setOut(new PrintStream(out)); + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + } + + @Test + void countTest() { + ball = inputView.inputBall(); + assertThat(ball.getBalls().size()).isEqualTo(3); + } + + @Test + void rangeTest() { + ball = inputView.inputBall(); + assertThat(ball.getBalls().stream().filter(b -> b < 10 && b > 0).count()).isEqualTo(3); + } + + @Test + void resumeTest() { + String data = "1"; + InputStream in = new ByteArrayInputStream(data.getBytes()); + System.setIn(in); + assertThat(inputView.resumeGame()).isTrue(); + } +} From eb92b3d3a177c6cc18d7968f839c94c37ead5ae7 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Thu, 26 May 2022 16:24:55 +0900 Subject: [PATCH 10/25] =?UTF-8?q?feat(baseball):=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4=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/baseball/domain/Action.java | 5 +++ src/main/java/baseball/domain/Ball.java | 15 +++++++++ src/main/java/baseball/domain/BallStatus.java | 31 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/baseball/domain/Action.java create mode 100644 src/main/java/baseball/domain/Ball.java create mode 100644 src/main/java/baseball/domain/BallStatus.java diff --git a/src/main/java/baseball/domain/Action.java b/src/main/java/baseball/domain/Action.java new file mode 100644 index 000000000..a138e213d --- /dev/null +++ b/src/main/java/baseball/domain/Action.java @@ -0,0 +1,5 @@ +package baseball.domain; + +public enum Action { + 볼, 스트라이크, 낫싱 +} diff --git a/src/main/java/baseball/domain/Ball.java b/src/main/java/baseball/domain/Ball.java new file mode 100644 index 000000000..7fb5307a3 --- /dev/null +++ b/src/main/java/baseball/domain/Ball.java @@ -0,0 +1,15 @@ +package baseball.domain; + +import java.util.Set; + +public class Ball { + Set balls; + + public Ball(Set balls) { + this.balls = balls; + } + + public Set getBalls() { + return balls; + } +} \ No newline at end of file diff --git a/src/main/java/baseball/domain/BallStatus.java b/src/main/java/baseball/domain/BallStatus.java new file mode 100644 index 000000000..f9a72511c --- /dev/null +++ b/src/main/java/baseball/domain/BallStatus.java @@ -0,0 +1,31 @@ +package baseball.domain; + +public class BallStatus { + int ball; + int strike; + + public BallStatus(int ball, int strike) { + this.ball = ball; + this.strike = strike; + } + + public int getBall() { + return ball; + } + + public int getStrike() { + return strike; + } + + public boolean existsNothing(){ + return ball-strike==0; + } + + public boolean existsBall() { + return ball>0; + } + + public boolean existsStrike() { + return strike>0; + } +} From a9185d4c892d9eee64f5a68d825ecc59f39bd99e Mon Sep 17 00:00:00 2001 From: oliviarla Date: Thu, 26 May 2022 16:26:15 +0900 Subject: [PATCH 11/25] docs(baseball): update README.md --- src/main/java/baseball/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md index 80a63b0c7..baa6a36c8 100644 --- a/src/main/java/baseball/README.md +++ b/src/main/java/baseball/README.md @@ -20,7 +20,6 @@ e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스 4) 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다 ### 기능 목록 - 엔티티 - [ ] Ball: 세자리 숫자 저장하는 엔티티 클래스 - [ ] BallStatus: 유저 Ball과 랜덤 Ball 비교한 결과를 저장하는 엔티티 클래스 From 5f8046b69d37eb32e4a2e3d57c8bd3c37b338e89 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:11:32 +0900 Subject: [PATCH 12/25] =?UTF-8?q?feat(baseball):=20OutputView=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/main/java/baseball/view/OutputView.java | 30 +++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/baseball/view/OutputView.java diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java new file mode 100644 index 000000000..a23aad02e --- /dev/null +++ b/src/main/java/baseball/view/OutputView.java @@ -0,0 +1,30 @@ +package baseball.view; + +import baseball.domain.Action; +import baseball.domain.BallStatus; + +public class OutputView { + public String outputBallStatus(BallStatus ballStatus) throws Exception { + String result = ""; + if (!ballStatus.existsBall() && !ballStatus.existsStrike() && !ballStatus.existsNothing()) + throw new Exception("결과를 반환할 수 없습니다"); + if (ballStatus.existsBall()) { + result += ballStatus.getBall() + Action.볼.toString() + " "; + } + if (ballStatus.existsStrike()) { + result += ballStatus.getStrike() + Action.스트라이크.toString(); + } + if (ballStatus.existsNothing()) { + return Action.낫싱.toString(); + } + return result; + } + + public boolean exitGame(BallStatus ballStatus) { + if (ballStatus.exitGame()) { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } + return false; + } +} \ No newline at end of file From b294dca83c16dab6b95a077da3c25d750b1ff8b1 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:11:40 +0900 Subject: [PATCH 13/25] =?UTF-8?q?test(baseball):=20OutputViewTest=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/baseball/view/OutputViewTest.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/test/java/baseball/view/OutputViewTest.java diff --git a/src/test/java/baseball/view/OutputViewTest.java b/src/test/java/baseball/view/OutputViewTest.java new file mode 100644 index 000000000..42c8c7f02 --- /dev/null +++ b/src/test/java/baseball/view/OutputViewTest.java @@ -0,0 +1,35 @@ +package baseball.view; + +import baseball.domain.BallStatus; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import static org.assertj.core.api.Assertions.assertThat; + +public class OutputViewTest { + OutputView outputView; + + @BeforeEach + void setUp() { + outputView = new OutputView(); + } + + @ParameterizedTest + @CsvSource({"1,2,1볼 2스트라이크", "0,0,낫싱", "0,3,3스트라이크"}) + void outputViewTest(int ball, int strike, String expected) throws Exception { + BallStatus ballStatus = new BallStatus(ball, strike); + assertThat(outputView.outputBallStatus(ballStatus)).isEqualTo(expected); + } + + @Test + @DisplayName("조건에 만족하면 게임을 끝내는 메소드 테스트") + void exitGameTest(){ + BallStatus ballStatus = new BallStatus(0, 3); + while(true){ + if(outputView.exitGame(ballStatus)) break; + } + } +} From 19461c498ae1f536613eb2eb59fbe4b9895f10a8 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:12:08 +0900 Subject: [PATCH 14/25] =?UTF-8?q?feat(baseball):=20OutputView=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/main/java/baseball/domain/BallStatus.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/domain/BallStatus.java b/src/main/java/baseball/domain/BallStatus.java index f9a72511c..c644515ab 100644 --- a/src/main/java/baseball/domain/BallStatus.java +++ b/src/main/java/baseball/domain/BallStatus.java @@ -28,4 +28,8 @@ public boolean existsBall() { public boolean existsStrike() { return strike>0; } + + public boolean exitGame(){ + return getStrike()==3; + } } From be73fe25b70c9e33915187ae67ad90a3d9ca1d49 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:30:46 +0900 Subject: [PATCH 15/25] =?UTF-8?q?feat(baseball):=20RandomNumGenerator=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/RandomNumGenerator.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/baseball/service/RandomNumGenerator.java diff --git a/src/main/java/baseball/service/RandomNumGenerator.java b/src/main/java/baseball/service/RandomNumGenerator.java new file mode 100644 index 000000000..fcc6a78be --- /dev/null +++ b/src/main/java/baseball/service/RandomNumGenerator.java @@ -0,0 +1,17 @@ +package baseball.service; + +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + +public class RandomNumGenerator { + public Set makeNum(){ + Random random = new Random(); + Set set = new HashSet<>(); + while(set.size()<3){ + int num = random.nextInt(9)+1; + set.add(num); + } + return set; + } +} \ No newline at end of file From 88290328ded92d079ebd8e1b2387003bc7d45427 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:30:55 +0900 Subject: [PATCH 16/25] =?UTF-8?q?test(baseball):=20RandomNumGenerator=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/baseball/RandomNumTest.java | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/baseball/RandomNumTest.java diff --git a/src/test/java/baseball/RandomNumTest.java b/src/test/java/baseball/RandomNumTest.java new file mode 100644 index 000000000..44e93c837 --- /dev/null +++ b/src/test/java/baseball/RandomNumTest.java @@ -0,0 +1,30 @@ +package baseball; + +import baseball.domain.Ball; +import baseball.service.RandomNumGenerator; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RandomNumTest { + private Ball randomNum; + RandomNumGenerator randomNumGenerator; + @BeforeEach + public void setUp(){ + randomNumGenerator = new RandomNumGenerator(); + } + + @Test + public void makeNumTest(){ + Set set = randomNumGenerator.makeNum(); + assertThat(set.size()).isEqualTo(3); + System.out.println(set); + } + + +} From 967f871795ef506a4ea086600c1e8095be51e9f0 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 18:31:06 +0900 Subject: [PATCH 17/25] =?UTF-8?q?docs(baseball):=20RandomNumGenerator=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md index baa6a36c8..56a02905e 100644 --- a/src/main/java/baseball/README.md +++ b/src/main/java/baseball/README.md @@ -21,17 +21,17 @@ e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스 ### 기능 목록 엔티티 -- [ ] Ball: 세자리 숫자 저장하는 엔티티 클래스 -- [ ] BallStatus: 유저 Ball과 랜덤 Ball 비교한 결과를 저장하는 엔티티 클래스 -- [ ] Action: 동작들을 담는 enum 클래스 +- [x] Ball: 세자리 숫자 저장하는 엔티티 클래스 +- [x] BallStatus: 유저 Ball과 랜덤 Ball 비교한 결과를 저장하는 엔티티 클래스 +- [x] Action: 동작들을 담는 enum 클래스 서비스 - [ ] BaseballService - [ ] isBall: 볼 여부 판별 - [ ] isStrike: 스트라이크 여부 판별 - [ ] compare: RandomNum, UserNum 비교해 결과 반환 -- [ ] RandomNumGenerator: 임의의 서로다른 3자리 수 생성 +- [x] RandomNumGenerator: 임의의 서로다른 3자리 수 생성 -- [ ] InputView: 사용자로부터 입력 받는 뷰 담당하는 클래스 -- [ ] OutputView: 출력 하는 뷰 담당하는 클래스 \ No newline at end of file +- [x] InputView: 사용자로부터 입력 받는 뷰 담당하는 클래스 +- [x] OutputView: 출력 하는 뷰 담당하는 클래스 \ No newline at end of file From a1bb02d7580ab7d08e4d771de4ba2d8b49cc8fab Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:25:50 +0900 Subject: [PATCH 18/25] =?UTF-8?q?refactor(baseball):=20Ball=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EC=9D=98=20=ED=98=BC=EB=8F=99=20=EB=B0=A9=EC=A7=80=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20Baseball=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20+=20Baseball=EC=97=90=EC=84=9C=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EC=A0=95=EB=B3=B4=20=EB=8B=B4=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20Set=20=EB=8C=80=EC=8B=A0=20List=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Ball.java | 15 ------ src/main/java/baseball/domain/BallStatus.java | 35 -------------- src/main/java/baseball/domain/Baseball.java | 15 ++++++ .../java/baseball/domain/BaseballStatus.java | 46 +++++++++++++++++++ .../baseball/service/RandomNumGenerator.java | 9 ++-- src/main/java/baseball/view/InputView.java | 10 ++-- src/main/java/baseball/view/OutputView.java | 22 +++++---- src/test/java/baseball/RandomNumTest.java | 30 ------------ .../java/baseball/service/RandomNumTest.java | 36 +++++++++++++++ .../java/baseball/view/InputViewTest.java | 12 ++--- .../java/baseball/view/OutputViewTest.java | 16 ++++--- 11 files changed, 135 insertions(+), 111 deletions(-) delete mode 100644 src/main/java/baseball/domain/Ball.java delete mode 100644 src/main/java/baseball/domain/BallStatus.java create mode 100644 src/main/java/baseball/domain/Baseball.java create mode 100644 src/main/java/baseball/domain/BaseballStatus.java delete mode 100644 src/test/java/baseball/RandomNumTest.java create mode 100644 src/test/java/baseball/service/RandomNumTest.java diff --git a/src/main/java/baseball/domain/Ball.java b/src/main/java/baseball/domain/Ball.java deleted file mode 100644 index 7fb5307a3..000000000 --- a/src/main/java/baseball/domain/Ball.java +++ /dev/null @@ -1,15 +0,0 @@ -package baseball.domain; - -import java.util.Set; - -public class Ball { - Set balls; - - public Ball(Set balls) { - this.balls = balls; - } - - public Set getBalls() { - return balls; - } -} \ No newline at end of file diff --git a/src/main/java/baseball/domain/BallStatus.java b/src/main/java/baseball/domain/BallStatus.java deleted file mode 100644 index c644515ab..000000000 --- a/src/main/java/baseball/domain/BallStatus.java +++ /dev/null @@ -1,35 +0,0 @@ -package baseball.domain; - -public class BallStatus { - int ball; - int strike; - - public BallStatus(int ball, int strike) { - this.ball = ball; - this.strike = strike; - } - - public int getBall() { - return ball; - } - - public int getStrike() { - return strike; - } - - public boolean existsNothing(){ - return ball-strike==0; - } - - public boolean existsBall() { - return ball>0; - } - - public boolean existsStrike() { - return strike>0; - } - - public boolean exitGame(){ - return getStrike()==3; - } -} diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java new file mode 100644 index 000000000..4d35524c7 --- /dev/null +++ b/src/main/java/baseball/domain/Baseball.java @@ -0,0 +1,15 @@ +package baseball.domain; + +import java.util.List; + +public class Baseball { + List baseballs; + + public Baseball(List balls) { + this.baseballs = balls; + } + + public List getBaseballs() { + return baseballs; + } +} \ No newline at end of file diff --git a/src/main/java/baseball/domain/BaseballStatus.java b/src/main/java/baseball/domain/BaseballStatus.java new file mode 100644 index 000000000..415bab941 --- /dev/null +++ b/src/main/java/baseball/domain/BaseballStatus.java @@ -0,0 +1,46 @@ +package baseball.domain; + +public class BaseballStatus { + int ball; + int strike; + + public int getBall() { + return ball; + } + + public int getStrike() { + return strike; + } + + public void setBall(int ball) { + this.ball = ball; + } + + public void setStrike(int strike) { + this.strike = strike; + } + + @Override + public String toString() { + return "BaseballStatus{" + + "ball=" + ball + + ", strike=" + strike + + '}'; + } + + public boolean nothing() { + return strike == 0 && ball == 0; + } + + public boolean existsBall() { + return ball > 0; + } + + public boolean existsStrike() { + return strike > 0; + } + + public boolean exitGame() { + return getStrike() == 3; + } +} diff --git a/src/main/java/baseball/service/RandomNumGenerator.java b/src/main/java/baseball/service/RandomNumGenerator.java index fcc6a78be..187a9914a 100644 --- a/src/main/java/baseball/service/RandomNumGenerator.java +++ b/src/main/java/baseball/service/RandomNumGenerator.java @@ -1,17 +1,16 @@ package baseball.service; -import java.util.HashSet; -import java.util.Random; -import java.util.Set; +import java.util.*; public class RandomNumGenerator { - public Set makeNum(){ + public List makeNum(){ Random random = new Random(); Set set = new HashSet<>(); + while(set.size()<3){ int num = random.nextInt(9)+1; set.add(num); } - return set; + return new ArrayList<>(set); } } \ No newline at end of file diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 38365e456..dcfd368ac 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -1,20 +1,20 @@ package baseball.view; -import baseball.domain.Ball; +import baseball.domain.Baseball; import java.util.Arrays; +import java.util.List; import java.util.Scanner; -import java.util.Set; import java.util.stream.Collectors; public class InputView { - public Ball inputBall() { + public Baseball inputBall() { Scanner scanner = new Scanner(System.in); System.out.print("숫자를 입력해 주세요 : "); String input = scanner.next(); - Set integerSet = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet()); + List list = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); - return new Ball(integerSet); + return new Baseball(list); } public boolean resumeGame() { diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index a23aad02e..e649912e4 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -1,26 +1,30 @@ package baseball.view; import baseball.domain.Action; -import baseball.domain.BallStatus; +import baseball.domain.BaseballStatus; public class OutputView { - public String outputBallStatus(BallStatus ballStatus) throws Exception { + public String outputBaseballStatus(BaseballStatus baseballStatus) throws Exception { String result = ""; - if (!ballStatus.existsBall() && !ballStatus.existsStrike() && !ballStatus.existsNothing()) + if (!baseballStatus.existsBall() && !baseballStatus.existsStrike() && !baseballStatus.nothing()) throw new Exception("결과를 반환할 수 없습니다"); - if (ballStatus.existsBall()) { - result += ballStatus.getBall() + Action.볼.toString() + " "; + if (baseballStatus.existsBall()) { + result += baseballStatus.getBall() + Action.볼.toString() + " "; } - if (ballStatus.existsStrike()) { - result += ballStatus.getStrike() + Action.스트라이크.toString(); + if (baseballStatus.existsStrike()) { + result += baseballStatus.getStrike() + Action.스트라이크.toString(); } - if (ballStatus.existsNothing()) { + if (baseballStatus.nothing()) { return Action.낫싱.toString(); } return result; } - public boolean exitGame(BallStatus ballStatus) { + public void printBaseballStatus(BaseballStatus baseballStatus) throws Exception { + System.out.println(outputBaseballStatus(baseballStatus)); + } + + public boolean exitGame(BaseballStatus ballStatus) { if (ballStatus.exitGame()) { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); return true; diff --git a/src/test/java/baseball/RandomNumTest.java b/src/test/java/baseball/RandomNumTest.java deleted file mode 100644 index 44e93c837..000000000 --- a/src/test/java/baseball/RandomNumTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package baseball; - -import baseball.domain.Ball; -import baseball.service.RandomNumGenerator; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; - -public class RandomNumTest { - private Ball randomNum; - RandomNumGenerator randomNumGenerator; - @BeforeEach - public void setUp(){ - randomNumGenerator = new RandomNumGenerator(); - } - - @Test - public void makeNumTest(){ - Set set = randomNumGenerator.makeNum(); - assertThat(set.size()).isEqualTo(3); - System.out.println(set); - } - - -} diff --git a/src/test/java/baseball/service/RandomNumTest.java b/src/test/java/baseball/service/RandomNumTest.java new file mode 100644 index 000000000..ae8af088a --- /dev/null +++ b/src/test/java/baseball/service/RandomNumTest.java @@ -0,0 +1,36 @@ +package baseball.service; + +import baseball.domain.Baseball; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RandomNumTest { + RandomNumGenerator randomNumGenerator; + + @BeforeEach + public void setUp() { + randomNumGenerator = new RandomNumGenerator(); + } + + @Test + @DisplayName("3개의 서로다른 숫자가 생성되는지 확인하는 테스트입니다.") + public void makeNumTest() { + List list = randomNumGenerator.makeNum(); + + Baseball randomNum = new Baseball(list); + assertThat(randomNum.getBaseballs().size()).isEqualTo(3); + } + + @Test + @DisplayName("1부터 9 사이의 값인지 확인하는 테스트입니다.") + public void rangeTest() { + List list = randomNumGenerator.makeNum(); + + assertThat(list.stream().filter(integer -> integer >= 1 && integer <= 9).count()).isEqualTo(3); + } +} diff --git a/src/test/java/baseball/view/InputViewTest.java b/src/test/java/baseball/view/InputViewTest.java index 2c54e71bc..fa06b6ee4 100644 --- a/src/test/java/baseball/view/InputViewTest.java +++ b/src/test/java/baseball/view/InputViewTest.java @@ -1,6 +1,6 @@ package baseball.view; -import baseball.domain.Ball; +import baseball.domain.Baseball; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -10,7 +10,7 @@ public class InputViewTest { InputView inputView; - Ball ball; + Baseball baseball; @BeforeEach void setUp() { @@ -24,14 +24,14 @@ void setUp() { @Test void countTest() { - ball = inputView.inputBall(); - assertThat(ball.getBalls().size()).isEqualTo(3); + baseball = inputView.inputBall(); + assertThat(baseball.getBaseballs().size()).isEqualTo(3); } @Test void rangeTest() { - ball = inputView.inputBall(); - assertThat(ball.getBalls().stream().filter(b -> b < 10 && b > 0).count()).isEqualTo(3); + baseball = inputView.inputBall(); + assertThat(baseball.getBaseballs().stream().filter(b -> b < 10 && b > 0).count()).isEqualTo(3); } @Test diff --git a/src/test/java/baseball/view/OutputViewTest.java b/src/test/java/baseball/view/OutputViewTest.java index 42c8c7f02..11f1ab2cd 100644 --- a/src/test/java/baseball/view/OutputViewTest.java +++ b/src/test/java/baseball/view/OutputViewTest.java @@ -1,6 +1,6 @@ package baseball.view; -import baseball.domain.BallStatus; +import baseball.domain.BaseballStatus; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -18,18 +18,22 @@ void setUp() { } @ParameterizedTest - @CsvSource({"1,2,1볼 2스트라이크", "0,0,낫싱", "0,3,3스트라이크"}) + @CsvSource({"1,2,1볼 2스트라이크", "0,0,낫싱", "0,2,2스트라이크"}) void outputViewTest(int ball, int strike, String expected) throws Exception { - BallStatus ballStatus = new BallStatus(ball, strike); - assertThat(outputView.outputBallStatus(ballStatus)).isEqualTo(expected); + BaseballStatus baseballStatus = new BaseballStatus(); + baseballStatus.setBall(ball); + baseballStatus.setStrike(strike); + assertThat(outputView.outputBaseballStatus(baseballStatus)).isEqualTo(expected); } @Test @DisplayName("조건에 만족하면 게임을 끝내는 메소드 테스트") void exitGameTest(){ - BallStatus ballStatus = new BallStatus(0, 3); + BaseballStatus baseballStatus = new BaseballStatus(); + baseballStatus.setBall(0); + baseballStatus.setStrike(3); while(true){ - if(outputView.exitGame(ballStatus)) break; + if(outputView.exitGame(baseballStatus)) break; } } } From f13c04b35d971bbaf492bdc1125d05dcab2d794d Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:27:19 +0900 Subject: [PATCH 19/25] =?UTF-8?q?feat(baseball):=20BaseballService=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/BaseballService.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/baseball/service/BaseballService.java diff --git a/src/main/java/baseball/service/BaseballService.java b/src/main/java/baseball/service/BaseballService.java new file mode 100644 index 000000000..0c4e6b00b --- /dev/null +++ b/src/main/java/baseball/service/BaseballService.java @@ -0,0 +1,34 @@ +package baseball.service; + +import baseball.domain.Baseball; +import baseball.domain.BaseballStatus; + +public class BaseballService { + public boolean isStrike(int userNum, int randomNum) { + return userNum == randomNum; + } + + public boolean isBall(int userNum, int userIdx, Baseball randomBall) { + if (!isStrike(userNum, randomBall.getBaseballs().get(userIdx))) { + return randomBall.getBaseballs().contains(userNum); + } + return false; + } + + public BaseballStatus compare(Baseball userBall, Baseball randomBall) { + int strike = 0, ball = 0; + for (int i = 0; i < userBall.getBaseballs().size(); i++) { + if (isStrike(userBall.getBaseballs().get(i), randomBall.getBaseballs().get(i))) { + strike++; + continue; + } + if (isBall(userBall.getBaseballs().get(i), i, randomBall)) { + ball++; + } + } + BaseballStatus baseballStatus = new BaseballStatus(); + baseballStatus.setBall(ball); + baseballStatus.setStrike(strike); + return baseballStatus; + } +} From 01e34cb6ccaa1fb6f805ebcbe38664bf2766f274 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:27:24 +0900 Subject: [PATCH 20/25] =?UTF-8?q?docs(baseball):=20BaseballService=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/README.md b/src/main/java/baseball/README.md index 56a02905e..e81ff95f2 100644 --- a/src/main/java/baseball/README.md +++ b/src/main/java/baseball/README.md @@ -26,10 +26,10 @@ e.g. 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : `1스 - [x] Action: 동작들을 담는 enum 클래스 서비스 -- [ ] BaseballService - - [ ] isBall: 볼 여부 판별 - - [ ] isStrike: 스트라이크 여부 판별 - - [ ] compare: RandomNum, UserNum 비교해 결과 반환 +- [x] BaseballService + - isBall: 볼 여부 판별 + - isStrike: 스트라이크 여부 판별 + - compare: RandomNum, UserNum 비교해 BallStatus 반환 - [x] RandomNumGenerator: 임의의 서로다른 3자리 수 생성 From 5b260ec4d7cb99e3352801024c6017009356bfc5 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:27:35 +0900 Subject: [PATCH 21/25] =?UTF-8?q?test(baseball):=20BaseballService=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/service/BaseballServiceTest.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/test/java/baseball/service/BaseballServiceTest.java diff --git a/src/test/java/baseball/service/BaseballServiceTest.java b/src/test/java/baseball/service/BaseballServiceTest.java new file mode 100644 index 000000000..f39407b65 --- /dev/null +++ b/src/test/java/baseball/service/BaseballServiceTest.java @@ -0,0 +1,48 @@ +package baseball.service; + +import baseball.domain.Baseball; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BaseballServiceTest { + BaseballService baseballService; + + @BeforeEach + void setUp(){ + baseballService= new BaseballService(); + } + + @Test + void isStrikeTest(){ + Baseball userBall = new Baseball(Arrays.asList(1,2,3)); + Baseball randomBall = new Baseball(Arrays.asList(1,2,3)); + for(int i=0;i<3;i++){ + assertThat(baseballService.isStrike(userBall.getBaseballs().get(i), randomBall.getBaseballs().get(i))).isTrue(); + } + } + + @Test + void isBallTest(){ + Baseball userBall = new Baseball(Arrays.asList(1,3,2)); + Baseball randomBall = new Baseball(Arrays.asList(2,1,3)); + for(int i=0;i<3;i++){ + assertThat(baseballService.isBall(userBall.getBaseballs().get(i), i, randomBall)).isTrue(); + } + } + + @ParameterizedTest + @CsvSource({"1,2,6,1,9,2,1,1", "3,7,5,7,3,9,2,0", "1,2,3,4,5,6,0,0", "3,4,8,3,4,2,0,2"}) + void compareTest(int u1,int u2,int u3,int r1,int r2,int r3, int e1, int e2){ + Baseball userBall = new Baseball(Arrays.asList(u1, u2, u3)); + Baseball randomBall = new Baseball(Arrays.asList(r1, r2, r3)); + + assertThat(new int[]{baseballService.compare(userBall, randomBall).getBall(), baseballService.compare(userBall, randomBall).getStrike()}).isEqualTo(new int[]{e1, e2}); + //assertThat().isEqualTo(ballStatus.getStrike()); + } +} \ No newline at end of file From 6c2a62cfaf2d546ec6df69dc3895cd48e35a83b9 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:28:11 +0900 Subject: [PATCH 22/25] =?UTF-8?q?feat(baseball):=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=95=A0=ED=94=8C=EB=A6=AC=EC=BC=80=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/application.java | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/baseball/application.java diff --git a/src/main/java/baseball/application.java b/src/main/java/baseball/application.java new file mode 100644 index 000000000..936161177 --- /dev/null +++ b/src/main/java/baseball/application.java @@ -0,0 +1,34 @@ +package baseball; + +import baseball.domain.Baseball; +import baseball.domain.BaseballStatus; +import baseball.service.BaseballService; +import baseball.service.RandomNumGenerator; +import baseball.view.InputView; +import baseball.view.OutputView; + +import java.util.Arrays; + +public class application { + public static void main(String[] args) throws Exception { + InputView inputView = new InputView(); + OutputView outputView = new OutputView(); + RandomNumGenerator randomNumGenerator = new RandomNumGenerator(); + BaseballService baseballService = new BaseballService(); + + while(true){ + //Baseball randomBaseball = new Baseball(randomNumGenerator.makeNum()); + Baseball randomBaseball = new Baseball(Arrays.asList(4,2,5)); + BaseballStatus baseballStatus = new BaseballStatus(); + + while(!outputView.exitGame(baseballStatus)){ + Baseball userBaseball = inputView.inputBall(); + baseballStatus = baseballService.compare(userBaseball, randomBaseball); + outputView.printBaseballStatus(baseballStatus); + } + if(!inputView.resumeGame()){ + break; + } + } + } +} From 65d6ef8bf902e4a371495d91cb31dff329f3a0a3 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:32:35 +0900 Subject: [PATCH 23/25] =?UTF-8?q?refactor(baseball):=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=20=EC=95=A0=ED=94=8C=EB=A6=AC=EC=BC=80=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/application.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/baseball/application.java b/src/main/java/baseball/application.java index 936161177..5923c152a 100644 --- a/src/main/java/baseball/application.java +++ b/src/main/java/baseball/application.java @@ -7,8 +7,6 @@ import baseball.view.InputView; import baseball.view.OutputView; -import java.util.Arrays; - public class application { public static void main(String[] args) throws Exception { InputView inputView = new InputView(); @@ -17,8 +15,7 @@ public static void main(String[] args) throws Exception { BaseballService baseballService = new BaseballService(); while(true){ - //Baseball randomBaseball = new Baseball(randomNumGenerator.makeNum()); - Baseball randomBaseball = new Baseball(Arrays.asList(4,2,5)); + Baseball randomBaseball = new Baseball(randomNumGenerator.makeNum()); BaseballStatus baseballStatus = new BaseballStatus(); while(!outputView.exitGame(baseballStatus)){ From bbf4efa7b1be525a57f09542392e9ee12b800d35 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Fri, 27 May 2022 22:33:11 +0900 Subject: [PATCH 24/25] =?UTF-8?q?refactor(baseball):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EC=88=AB=EC=9E=90=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/view/InputView.java | 5 ++++- src/test/java/baseball/view/InputViewTest.java | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index dcfd368ac..a94dba70f 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -8,11 +8,14 @@ import java.util.stream.Collectors; public class InputView { - public Baseball inputBall() { + public Baseball inputBall() throws Exception { Scanner scanner = new Scanner(System.in); System.out.print("숫자를 입력해 주세요 : "); String input = scanner.next(); List list = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); + if(list.size()!=3){ + throw new Exception("3자리 숫자여야 합니다."); + } return new Baseball(list); } diff --git a/src/test/java/baseball/view/InputViewTest.java b/src/test/java/baseball/view/InputViewTest.java index fa06b6ee4..07a2d80c6 100644 --- a/src/test/java/baseball/view/InputViewTest.java +++ b/src/test/java/baseball/view/InputViewTest.java @@ -15,7 +15,7 @@ public class InputViewTest { @BeforeEach void setUp() { inputView = new InputView(); - String input = "384"; + String input = "349"; OutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); InputStream in = new ByteArrayInputStream(input.getBytes()); @@ -23,13 +23,13 @@ void setUp() { } @Test - void countTest() { + void countTest() throws Exception { baseball = inputView.inputBall(); assertThat(baseball.getBaseballs().size()).isEqualTo(3); } @Test - void rangeTest() { + void rangeTest() throws Exception { baseball = inputView.inputBall(); assertThat(baseball.getBaseballs().stream().filter(b -> b < 10 && b > 0).count()).isEqualTo(3); } From f7a0fa7ff3b413e499e2b781afc6cf8216369d07 Mon Sep 17 00:00:00 2001 From: oliviarla Date: Sat, 4 Jun 2022 14:34:32 +0900 Subject: [PATCH 25/25] =?UTF-8?q?refactor(baseball):=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=B6=88?= =?UTF-8?q?=EB=B3=80=20=EA=B0=9D=EC=B2=B4=EB=A1=9C=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=20Ball=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/application.java | 24 +++++++-------- src/main/java/baseball/domain/Ball.java | 13 ++++++++ src/main/java/baseball/domain/Baseball.java | 25 ++++++++++++---- .../java/baseball/domain/BaseballStatus.java | 23 +++++++------- .../baseball/service/BaseballService.java | 25 +++++++--------- .../baseball/service/RandomBallGenerator.java | 27 +++++++++++++++++ .../baseball/service/RandomNumGenerator.java | 16 ---------- src/main/java/baseball/view/InputView.java | 30 ++++++++++++------- src/main/java/baseball/view/OutputView.java | 9 +++--- .../baseball/service/BaseballServiceTest.java | 20 ++++++------- ...RandomNumTest.java => RandomBallTest.java} | 13 ++++---- .../java/baseball/view/InputViewTest.java | 6 ++-- .../java/baseball/view/OutputViewTest.java | 21 ++++++------- 13 files changed, 150 insertions(+), 102 deletions(-) create mode 100644 src/main/java/baseball/domain/Ball.java create mode 100644 src/main/java/baseball/service/RandomBallGenerator.java delete mode 100644 src/main/java/baseball/service/RandomNumGenerator.java rename src/test/java/baseball/service/{RandomNumTest.java => RandomBallTest.java} (64%) diff --git a/src/main/java/baseball/application.java b/src/main/java/baseball/application.java index 5923c152a..c40103916 100644 --- a/src/main/java/baseball/application.java +++ b/src/main/java/baseball/application.java @@ -1,31 +1,31 @@ package baseball; +import baseball.domain.Ball; import baseball.domain.Baseball; import baseball.domain.BaseballStatus; import baseball.service.BaseballService; -import baseball.service.RandomNumGenerator; +import baseball.service.RandomBallGenerator; import baseball.view.InputView; import baseball.view.OutputView; +import java.util.stream.Collectors; + public class application { public static void main(String[] args) throws Exception { InputView inputView = new InputView(); OutputView outputView = new OutputView(); - RandomNumGenerator randomNumGenerator = new RandomNumGenerator(); + RandomBallGenerator randomBallGenerator = new RandomBallGenerator(); BaseballService baseballService = new BaseballService(); - while(true){ - Baseball randomBaseball = new Baseball(randomNumGenerator.makeNum()); - BaseballStatus baseballStatus = new BaseballStatus(); - - while(!outputView.exitGame(baseballStatus)){ + do { + Baseball randomBaseball = new Baseball(randomBallGenerator.makeNum()); + BaseballStatus baseballStatus; + do { Baseball userBaseball = inputView.inputBall(); baseballStatus = baseballService.compare(userBaseball, randomBaseball); outputView.printBaseballStatus(baseballStatus); - } - if(!inputView.resumeGame()){ - break; - } - } + } while (!outputView.exitGame(baseballStatus)); + + }while(inputView.resumeGame()); } } diff --git a/src/main/java/baseball/domain/Ball.java b/src/main/java/baseball/domain/Ball.java new file mode 100644 index 000000000..6670ec54b --- /dev/null +++ b/src/main/java/baseball/domain/Ball.java @@ -0,0 +1,13 @@ +package baseball.domain; + +public class Ball { + private final int number; + + public Ball(final int number) { + this.number = number; + } + + public int getNumber() { + return number; + } +} diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index 4d35524c7..82531ee08 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -1,15 +1,28 @@ package baseball.domain; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class Baseball { - List baseballs; + private final List baseballs; - public Baseball(List balls) { - this.baseballs = balls; + public Baseball(final List ballList){ + this.baseballs= new ArrayList<>(ballList); + isDistinct(); } - public List getBaseballs() { - return baseballs; + public List getBaseballs() { + return Collections.unmodifiableList(baseballs); } -} \ No newline at end of file + + public void isDistinct(){ + for(int i=0;i ball.getNumber()==userBall.getNumber()); } - public BaseballStatus compare(Baseball userBall, Baseball randomBall) { - int strike = 0, ball = 0; + public BaseballStatus compare(Baseball userBall, Baseball randomBall) throws Exception { + int strike = 0; + int ball = 0; for (int i = 0; i < userBall.getBaseballs().size(); i++) { if (isStrike(userBall.getBaseballs().get(i), randomBall.getBaseballs().get(i))) { strike++; continue; } - if (isBall(userBall.getBaseballs().get(i), i, randomBall)) { + if (isBall(userBall.getBaseballs().get(i), randomBall)) { ball++; } } - BaseballStatus baseballStatus = new BaseballStatus(); - baseballStatus.setBall(ball); - baseballStatus.setStrike(strike); - return baseballStatus; + return new BaseballStatus(ball, strike); } } diff --git a/src/main/java/baseball/service/RandomBallGenerator.java b/src/main/java/baseball/service/RandomBallGenerator.java new file mode 100644 index 000000000..6b544e1e5 --- /dev/null +++ b/src/main/java/baseball/service/RandomBallGenerator.java @@ -0,0 +1,27 @@ +package baseball.service; + +import baseball.domain.Ball; + +import java.util.*; + +public class RandomBallGenerator { + static int MAX_SIZE = 3; + static int MAX_NUM = 9; + + public List makeNum(){ + Random random = new Random(); + Set set = new HashSet<>(); + + while(set.size() balls = new ArrayList<>(); + for(int e: set){ + Ball ball = new Ball(e); + balls.add(ball); + } + return balls; + } +} diff --git a/src/main/java/baseball/service/RandomNumGenerator.java b/src/main/java/baseball/service/RandomNumGenerator.java deleted file mode 100644 index 187a9914a..000000000 --- a/src/main/java/baseball/service/RandomNumGenerator.java +++ /dev/null @@ -1,16 +0,0 @@ -package baseball.service; - -import java.util.*; - -public class RandomNumGenerator { - public List makeNum(){ - Random random = new Random(); - Set set = new HashSet<>(); - - while(set.size()<3){ - int num = random.nextInt(9)+1; - set.add(num); - } - return new ArrayList<>(set); - } -} \ No newline at end of file diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index a94dba70f..b98216ed0 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -1,22 +1,30 @@ package baseball.view; +import baseball.domain.Ball; import baseball.domain.Baseball; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; +import java.util.*; import java.util.stream.Collectors; + public class InputView { - public Baseball inputBall() throws Exception { + static int MAX_SIZE = 3; + + private void isValidInput(List ballList) throws RuntimeException{ + if(ballList.size()!=MAX_SIZE){ + throw new RuntimeException("3자리 숫자여야 합니다."); + } + if(!ballList.stream().allMatch(ball -> ball.getNumber()>0 && ball.getNumber()<=9)){ + throw new RuntimeException("범위를 벗어납니다."); + } + } + + public Baseball inputBall() throws RuntimeException { Scanner scanner = new Scanner(System.in); System.out.print("숫자를 입력해 주세요 : "); String input = scanner.next(); - List list = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); - if(list.size()!=3){ - throw new Exception("3자리 숫자여야 합니다."); - } - + List list = Arrays.stream(input.split("")).mapToInt(Integer::parseInt).mapToObj(Ball::new).collect(Collectors.toList()); + isValidInput(list); return new Baseball(list); } @@ -26,4 +34,6 @@ public boolean resumeGame() { int input = scanner.nextInt(); return input == 1; } -} \ No newline at end of file + + +} diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index e649912e4..1ed7c6d1e 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -4,10 +4,9 @@ import baseball.domain.BaseballStatus; public class OutputView { - public String outputBaseballStatus(BaseballStatus baseballStatus) throws Exception { + public String outputBaseballStatus(BaseballStatus baseballStatus) { String result = ""; - if (!baseballStatus.existsBall() && !baseballStatus.existsStrike() && !baseballStatus.nothing()) - throw new Exception("결과를 반환할 수 없습니다"); + if (baseballStatus.existsBall()) { result += baseballStatus.getBall() + Action.볼.toString() + " "; } @@ -20,7 +19,7 @@ public String outputBaseballStatus(BaseballStatus baseballStatus) throws Excepti return result; } - public void printBaseballStatus(BaseballStatus baseballStatus) throws Exception { + public void printBaseballStatus(BaseballStatus baseballStatus) { System.out.println(outputBaseballStatus(baseballStatus)); } @@ -31,4 +30,4 @@ public boolean exitGame(BaseballStatus ballStatus) { } return false; } -} \ No newline at end of file +} diff --git a/src/test/java/baseball/service/BaseballServiceTest.java b/src/test/java/baseball/service/BaseballServiceTest.java index f39407b65..f3ec8422a 100644 --- a/src/test/java/baseball/service/BaseballServiceTest.java +++ b/src/test/java/baseball/service/BaseballServiceTest.java @@ -1,5 +1,6 @@ package baseball.service; +import baseball.domain.Ball; import baseball.domain.Baseball; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,8 +21,8 @@ void setUp(){ @Test void isStrikeTest(){ - Baseball userBall = new Baseball(Arrays.asList(1,2,3)); - Baseball randomBall = new Baseball(Arrays.asList(1,2,3)); + Baseball userBall = new Baseball(Arrays.asList(new Ball(1),new Ball(2),new Ball(3))); + Baseball randomBall = new Baseball(Arrays.asList(new Ball(1),new Ball(2),new Ball(3))); for(int i=0;i<3;i++){ assertThat(baseballService.isStrike(userBall.getBaseballs().get(i), randomBall.getBaseballs().get(i))).isTrue(); } @@ -29,20 +30,19 @@ void isStrikeTest(){ @Test void isBallTest(){ - Baseball userBall = new Baseball(Arrays.asList(1,3,2)); - Baseball randomBall = new Baseball(Arrays.asList(2,1,3)); + Baseball userBall = new Baseball(Arrays.asList(new Ball(1),new Ball(3),new Ball(2))); + Baseball randomBall = new Baseball(Arrays.asList(new Ball(2),new Ball(1),new Ball(3))); for(int i=0;i<3;i++){ - assertThat(baseballService.isBall(userBall.getBaseballs().get(i), i, randomBall)).isTrue(); + assertThat(baseballService.isBall(userBall.getBaseballs().get(i), randomBall)).isTrue(); } } @ParameterizedTest @CsvSource({"1,2,6,1,9,2,1,1", "3,7,5,7,3,9,2,0", "1,2,3,4,5,6,0,0", "3,4,8,3,4,2,0,2"}) - void compareTest(int u1,int u2,int u3,int r1,int r2,int r3, int e1, int e2){ - Baseball userBall = new Baseball(Arrays.asList(u1, u2, u3)); - Baseball randomBall = new Baseball(Arrays.asList(r1, r2, r3)); + void compareTest(int u1,int u2,int u3,int r1,int r2,int r3, int e1, int e2) throws Exception { + Baseball userBall = new Baseball(Arrays.asList(new Ball(u1),new Ball(u2),new Ball(u3))); + Baseball randomBall = new Baseball(Arrays.asList(new Ball(r1),new Ball(r2),new Ball(r3))); assertThat(new int[]{baseballService.compare(userBall, randomBall).getBall(), baseballService.compare(userBall, randomBall).getStrike()}).isEqualTo(new int[]{e1, e2}); - //assertThat().isEqualTo(ballStatus.getStrike()); } -} \ No newline at end of file +} diff --git a/src/test/java/baseball/service/RandomNumTest.java b/src/test/java/baseball/service/RandomBallTest.java similarity index 64% rename from src/test/java/baseball/service/RandomNumTest.java rename to src/test/java/baseball/service/RandomBallTest.java index ae8af088a..27182bc5c 100644 --- a/src/test/java/baseball/service/RandomNumTest.java +++ b/src/test/java/baseball/service/RandomBallTest.java @@ -1,5 +1,6 @@ package baseball.service; +import baseball.domain.Ball; import baseball.domain.Baseball; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -9,18 +10,18 @@ import static org.assertj.core.api.Assertions.assertThat; -public class RandomNumTest { - RandomNumGenerator randomNumGenerator; +public class RandomBallTest { + RandomBallGenerator randomBallGenerator; @BeforeEach public void setUp() { - randomNumGenerator = new RandomNumGenerator(); + randomBallGenerator = new RandomBallGenerator(); } @Test @DisplayName("3개의 서로다른 숫자가 생성되는지 확인하는 테스트입니다.") public void makeNumTest() { - List list = randomNumGenerator.makeNum(); + List list = randomBallGenerator.makeNum(); Baseball randomNum = new Baseball(list); assertThat(randomNum.getBaseballs().size()).isEqualTo(3); @@ -29,8 +30,8 @@ public void makeNumTest() { @Test @DisplayName("1부터 9 사이의 값인지 확인하는 테스트입니다.") public void rangeTest() { - List list = randomNumGenerator.makeNum(); + List list = randomBallGenerator.makeNum(); - assertThat(list.stream().filter(integer -> integer >= 1 && integer <= 9).count()).isEqualTo(3); + assertThat(list.stream().filter(ball -> ball.getNumber() >= 1 && ball.getNumber() <= 9).count()).isEqualTo(3); } } diff --git a/src/test/java/baseball/view/InputViewTest.java b/src/test/java/baseball/view/InputViewTest.java index 07a2d80c6..dc0ad2009 100644 --- a/src/test/java/baseball/view/InputViewTest.java +++ b/src/test/java/baseball/view/InputViewTest.java @@ -23,15 +23,15 @@ void setUp() { } @Test - void countTest() throws Exception { + void countTest() throws RuntimeException { baseball = inputView.inputBall(); assertThat(baseball.getBaseballs().size()).isEqualTo(3); } @Test - void rangeTest() throws Exception { + void rangeTest() throws RuntimeException { baseball = inputView.inputBall(); - assertThat(baseball.getBaseballs().stream().filter(b -> b < 10 && b > 0).count()).isEqualTo(3); + assertThat(baseball.getBaseballs().stream().filter(b -> b.getNumber() < 10 && b.getNumber() > 0).count()).isEqualTo(3); } @Test diff --git a/src/test/java/baseball/view/OutputViewTest.java b/src/test/java/baseball/view/OutputViewTest.java index 11f1ab2cd..788fcbedf 100644 --- a/src/test/java/baseball/view/OutputViewTest.java +++ b/src/test/java/baseball/view/OutputViewTest.java @@ -20,20 +20,21 @@ void setUp() { @ParameterizedTest @CsvSource({"1,2,1볼 2스트라이크", "0,0,낫싱", "0,2,2스트라이크"}) void outputViewTest(int ball, int strike, String expected) throws Exception { - BaseballStatus baseballStatus = new BaseballStatus(); - baseballStatus.setBall(ball); - baseballStatus.setStrike(strike); + BaseballStatus baseballStatus = new BaseballStatus(ball, strike); assertThat(outputView.outputBaseballStatus(baseballStatus)).isEqualTo(expected); } @Test @DisplayName("조건에 만족하면 게임을 끝내는 메소드 테스트") - void exitGameTest(){ - BaseballStatus baseballStatus = new BaseballStatus(); - baseballStatus.setBall(0); - baseballStatus.setStrike(3); - while(true){ - if(outputView.exitGame(baseballStatus)) break; - } + void exitGameTest() throws Exception { + BaseballStatus baseballStatus = new BaseballStatus(0,3); + assertThat(outputView.exitGame(baseballStatus)).isTrue(); + } + + @Test + @DisplayName("조건에 만족하지 않으면 게임 계속하는 메소드 테스트") + void exitGameFalseTest() throws Exception { + BaseballStatus baseballStatus = new BaseballStatus(1,2); + assertThat(outputView.exitGame(baseballStatus)).isFalse(); } }