From 274324ce63f8a53cf4fc08cabeaf91a651672796 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Thu, 15 Dec 2022 18:04:49 +0900 Subject: [PATCH 1/8] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index fcf3f057..cebd4051 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,13 @@ ## 과제 제출 과정 * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) + +## 구현할 기능 목록 +- [ ] 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. +- [ ] 사용자에게 3개의 숫자를 입력 받고 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. + - 숫자와 위치가 일치하는 경우: 스트라이크 + - 숫자는 일치하지만 위치가 일치하지 않는 경우: 볼 + - 스트라이크, 볼에 해당하는 숫자가 없는 경우: 낫싱 + - 컴퓨터가 선택한 3개의 숫자와 사용자가 입력한 3개의 숫자가 일치하면 게임이 종료된다. +- [ ] 게임이 종료된 후 1을 입력하면 게임을 다시 시작할 수 있다. +- [ ] 게임이 종료된 후 2를 입력하면 프로그램을 완전히 종료할 수 있다. From 773cec58e910ec33f98a6f269bbd57f27b1ebc76 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Thu, 15 Dec 2022 19:26:49 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=EC=9D=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=ED=95=98=EB=A9=B4=201=EC=97=90=EC=84=9C=209?= =?UTF-8?q?=EA=B9=8C=EC=A7=80=20=EC=84=9C=EB=A1=9C=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EC=9E=84=EC=9D=98=EC=9D=98=20=EC=88=98=203=EA=B0=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Baseball.java | 16 +++++++++++ src/test/java/BaseballTest.java | 26 +++++++++++++++++ src/test/java/study/SetTest.java | 44 +++++++++++++++++++++++++++++ src/test/java/study/StringTest.java | 23 +++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 src/main/java/Baseball.java create mode 100644 src/test/java/BaseballTest.java create mode 100644 src/test/java/study/SetTest.java diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java new file mode 100644 index 00000000..c0cbffa6 --- /dev/null +++ b/src/main/java/Baseball.java @@ -0,0 +1,16 @@ +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Random; +import java.util.Set; + +public class Baseball { + public static void main(String[] args) { + /* 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. */ + Set numbers = new LinkedHashSet<>(); + Random random = new Random(); + + while (numbers.size() < 3) { + numbers.add(random.nextInt(10)); + } + } +} diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java new file mode 100644 index 00000000..fd328321 --- /dev/null +++ b/src/test/java/BaseballTest.java @@ -0,0 +1,26 @@ +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Random; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class BaseballTest { + + @Test + @DisplayName("게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다.") + void create3Number() { + Set numbers = new LinkedHashSet<>(); + Random random = new Random(); + + while (numbers.size() < 3) { + numbers.add(random.nextInt(10)); + } + + assertThat(numbers.size()).isEqualTo(3); + } +} \ No newline at end of file diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java new file mode 100644 index 00000000..d9ffec45 --- /dev/null +++ b/src/test/java/study/SetTest.java @@ -0,0 +1,44 @@ +package study; + +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 org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SetTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @Test + void size() { + int setSize = numbers.size(); + assertThat(setSize).isEqualTo(3); + } + + @ParameterizedTest + @ValueSource(ints = {1,2,3}) + void contains(int number) { + assertThat(numbers.contains(number)).isTrue(); + } + + @ParameterizedTest + @CsvSource(value = {"1:True","2:True","3:True","4:False","5:False"}, delimiterString = ":") + void contains2(int number, boolean result) { + assertEquals(numbers.contains(number), result); + } + +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d90..8aeb31bb 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -1,8 +1,11 @@ package study; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.platform.commons.annotation.Testable; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class StringTest { @Test @@ -10,4 +13,24 @@ void replace() { String actual = "abc".replace("b", "d"); assertThat(actual).isEqualTo("adc"); } + + @Test + void split() { + String [] actual = "1,2".split(","); + assertThat(actual).containsExactly("1", "2"); + } + + @Test + void substring() { + String actual = "(1,2)".substring(1, 4); + assertThat(actual).isEqualTo("1,2"); + } + + @Test + @DisplayName("StringIndexOutOfBoundsException 테스트") + void charAt() { + assertThatThrownBy(() -> "abc".charAt(3)) + .isInstanceOf(StringIndexOutOfBoundsException.class) + .hasMessageContaining("Index 3 out of bounds for length 3"); + } } From 77828e1b50c26b1f3c501a8312216c5502d092d5 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Thu, 15 Dec 2022 19:39:14 +0900 Subject: [PATCH 3/8] =?UTF-8?q?refactor:=20=EB=82=9C=EC=88=98=203=EA=B0=9C?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/Baseball.java | 11 +++++++++-- src/test/java/BaseballTest.java | 10 +++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cebd4051..465f2b04 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ * [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse) ## 구현할 기능 목록 -- [ ] 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. +- [X] 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. - [ ] 사용자에게 3개의 숫자를 입력 받고 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. - 숫자와 위치가 일치하는 경우: 스트라이크 - 숫자는 일치하지만 위치가 일치하지 않는 경우: 볼 diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index c0cbffa6..7c566abc 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -4,9 +4,16 @@ import java.util.Set; public class Baseball { + + private static Set numbers = new LinkedHashSet<>(); public static void main(String[] args) { - /* 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. */ - Set numbers = new LinkedHashSet<>(); + create3Number(); + + } + + /* 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. */ + public static void create3Number() { + numbers.clear(); Random random = new Random(); while (numbers.size() < 3) { diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java index fd328321..2634a481 100644 --- a/src/test/java/BaseballTest.java +++ b/src/test/java/BaseballTest.java @@ -11,10 +11,12 @@ class BaseballTest { + private Set numbers = new LinkedHashSet<>(); + @Test @DisplayName("게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다.") void create3Number() { - Set numbers = new LinkedHashSet<>(); + numbers.clear(); Random random = new Random(); while (numbers.size() < 3) { @@ -23,4 +25,10 @@ void create3Number() { assertThat(numbers.size()).isEqualTo(3); } + + @Test + @DisplayName("사용자에게 3개의 숫자를 입력 받고 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다.") + void insert3Number() { + + } } \ No newline at end of file From 4e5c1ba1fb675c2454539579f0f78328eaa7fc8c Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Fri, 16 Dec 2022 11:40:27 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=97=90=EA=B2=8C=203=EA=B0=9C=EC=9D=98=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- src/main/java/Baseball.java | 19 ++++++++++++++----- src/test/java/BaseballTest.java | 19 ++++++++++++++----- src/test/java/TestUtil.java | 27 +++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 src/test/java/TestUtil.java diff --git a/README.md b/README.md index 465f2b04..cbf405e2 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,8 @@ ## 구현할 기능 목록 - [X] 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. -- [ ] 사용자에게 3개의 숫자를 입력 받고 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. +- [X] 사용자에게 3개의 숫자를 입력 받는다. +- [ ] 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. - 숫자와 위치가 일치하는 경우: 스트라이크 - 숫자는 일치하지만 위치가 일치하지 않는 경우: 볼 - 스트라이크, 볼에 해당하는 숫자가 없는 경우: 낫싱 diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 7c566abc..0c8ad760 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -1,14 +1,12 @@ -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Random; -import java.util.Set; +import java.util.*; public class Baseball { private static Set numbers = new LinkedHashSet<>(); + private static Set numbers2 = new LinkedHashSet<>(); public static void main(String[] args) { create3Number(); - + insert3Number(); } /* 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. */ @@ -20,4 +18,15 @@ public static void create3Number() { numbers.add(random.nextInt(10)); } } + + public static void insert3Number() { + Scanner sc = new Scanner(System.in); + System.out.print("숫자를 입력해주세요 : "); + String number = sc.nextLine(); + + for (int i = 0; i < number.length(); i++) + { + numbers2.add(number.charAt(i) - '0'); + } + } } diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java index 2634a481..893c974c 100644 --- a/src/test/java/BaseballTest.java +++ b/src/test/java/BaseballTest.java @@ -1,10 +1,10 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Random; -import java.util.Set; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.*; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -12,6 +12,7 @@ class BaseballTest { private Set numbers = new LinkedHashSet<>(); + private Set numbers2 = new LinkedHashSet<>(); @Test @DisplayName("게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다.") @@ -27,8 +28,16 @@ void create3Number() { } @Test - @DisplayName("사용자에게 3개의 숫자를 입력 받고 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다.") + @DisplayName("사용자에게 3개의 숫자를 입력 받는다.") void insert3Number() { + Scanner sc = TestUtil.getScanner("123"); + String number = sc.nextLine(); + for (int i = 0; i < number.length(); i++) + { + numbers2.add(number.charAt(i) - '0'); + } + + assertThat(numbers2.size()).isEqualTo(3); } } \ No newline at end of file diff --git a/src/test/java/TestUtil.java b/src/test/java/TestUtil.java new file mode 100644 index 00000000..f9ffb1ad --- /dev/null +++ b/src/test/java/TestUtil.java @@ -0,0 +1,27 @@ +import java.io.*; +import java.util.Scanner; + +public class TestUtil { + + public static Scanner getScanner(String input) { + InputStream in = new ByteArrayInputStream(input.getBytes()); + + return new Scanner(in); + } + + public static ByteArrayOutputStream setOutToByteArray() { + final ByteArrayOutputStream output = new ByteArrayOutputStream(); + System.setOut(new PrintStream(output)); + + return output; + } + + public static void clearSetOutToByteArray(ByteArrayOutputStream output) { + System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out))); + try { + output.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} From 4e2e6c729aae6998ac5cb3d47f208193b596692e Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Fri, 16 Dec 2022 13:53:24 +0900 Subject: [PATCH 5/8] =?UTF-8?q?fix:=20=EB=82=9C=EC=88=98=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EB=B2=94=EC=9C=84=200=20~=209=EC=97=90=EC=84=9C=201?= =?UTF-8?q?=20~=209=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Baseball.java | 3 ++- src/test/java/BaseballTest.java | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 0c8ad760..144cc570 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -15,11 +15,12 @@ public static void create3Number() { Random random = new Random(); while (numbers.size() < 3) { - numbers.add(random.nextInt(10)); + numbers.add(random.nextInt(9) + 1); } } public static void insert3Number() { + numbers2.clear(); Scanner sc = new Scanner(System.in); System.out.print("숫자를 입력해주세요 : "); String number = sc.nextLine(); diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java index 893c974c..ac8442da 100644 --- a/src/test/java/BaseballTest.java +++ b/src/test/java/BaseballTest.java @@ -1,3 +1,4 @@ +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,6 +15,19 @@ class BaseballTest { private Set numbers = new LinkedHashSet<>(); private Set numbers2 = new LinkedHashSet<>(); + @BeforeEach + void setUp() { + numbers = new LinkedHashSet<>(); + numbers.add(1); + numbers.add(2); + numbers.add(3); + + numbers2 = new LinkedHashSet<>(); + numbers2.add(1); + numbers2.add(2); + numbers2.add(3); + } + @Test @DisplayName("게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다.") void create3Number() { @@ -21,7 +35,7 @@ void create3Number() { Random random = new Random(); while (numbers.size() < 3) { - numbers.add(random.nextInt(10)); + numbers.add(random.nextInt(9) + 1); } assertThat(numbers.size()).isEqualTo(3); @@ -30,6 +44,7 @@ void create3Number() { @Test @DisplayName("사용자에게 3개의 숫자를 입력 받는다.") void insert3Number() { + numbers2.clear(); Scanner sc = TestUtil.getScanner("123"); String number = sc.nextLine(); @@ -40,4 +55,10 @@ void insert3Number() { assertThat(numbers2.size()).isEqualTo(3); } + + @Test + void checkResult() { + numbers.forEach(number -> { + }); + } } \ No newline at end of file From 5157f2cb2f83311ee0f5a24ca22ec2bbd8ea8eb3 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Fri, 16 Dec 2022 14:44:58 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=ED=95=9C=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EC=99=80=20=EC=9E=84=EC=9D=98=EC=9D=98=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EB=A5=BC=20=EB=B9=84=EA=B5=90=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/Baseball.java | 9 ++++++++- src/main/java/CountBallStrike.java | 31 ++++++++++++++++++++++++++++++ src/main/java/Result.java | 27 ++++++++++++++++++++++++++ src/test/java/BaseballTest.java | 11 ++++++----- 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 src/main/java/CountBallStrike.java create mode 100644 src/main/java/Result.java diff --git a/README.md b/README.md index cbf405e2..79cc90fb 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 구현할 기능 목록 - [X] 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. - [X] 사용자에게 3개의 숫자를 입력 받는다. -- [ ] 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. +- [X] 입력한 숫자와 임의의 숫자를 비교하여 결과를 출력한다. - 숫자와 위치가 일치하는 경우: 스트라이크 - 숫자는 일치하지만 위치가 일치하지 않는 경우: 볼 - 스트라이크, 볼에 해당하는 숫자가 없는 경우: 낫싱 diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 144cc570..41f2916f 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -5,8 +5,15 @@ public class Baseball { private static Set numbers = new LinkedHashSet<>(); private static Set numbers2 = new LinkedHashSet<>(); public static void main(String[] args) { + String result = ""; + create3Number(); - insert3Number(); + + while (!result.equals("3개의 숫자를 모두 맞히셨습니다! 게임 종료")){ + insert3Number(); + result = Result.getResult(numbers, numbers2); + System.out.println(result); + } } /* 게임을 시작하면 1에서 9까지 서로 다른 임의의 수 3개가 생성된다. */ diff --git a/src/main/java/CountBallStrike.java b/src/main/java/CountBallStrike.java new file mode 100644 index 00000000..2321148a --- /dev/null +++ b/src/main/java/CountBallStrike.java @@ -0,0 +1,31 @@ +import java.util.Set; + +public class CountBallStrike { + public static int countBall(Set numbers, Set numbers2) { + int ball = 0; + + for (Integer number : numbers) { + if (numbers2.contains(number)) { + ball++; + } + } + + return ball; + } + + public static int countStrike(Set numbers, Set numbers2) { + int strike = 0; + + Integer[] nums = numbers.toArray(new Integer[0]); + Integer[] nums2 = numbers2.toArray(new Integer[0]); + + for (int i = 0; i < 3; i++) { + if (nums[i] == nums2[i]) { + strike++; + } + } + + return strike; + } + +} diff --git a/src/main/java/Result.java b/src/main/java/Result.java new file mode 100644 index 00000000..6a5d3973 --- /dev/null +++ b/src/main/java/Result.java @@ -0,0 +1,27 @@ +import java.util.Set; + +public class Result { + + public static String getResult(Set numbers, Set numbers2) { + int ball = CountBallStrike.countBall(numbers, numbers2); + int strike = CountBallStrike.countStrike(numbers, numbers2); + + ball = ball - strike; + String result="낫싱"; + + if (strike == 3) { + result = "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; + } + else if (strike > 0 && ball > 0 ) { + result = strike + "스트라이크 " + ball + "볼"; + } + else if (strike > 0) { + result = strike + "스트라이크"; + } + else if (ball > 0) { + result = ball + "볼"; + } + + return result; + } +} diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java index ac8442da..94ca4de7 100644 --- a/src/test/java/BaseballTest.java +++ b/src/test/java/BaseballTest.java @@ -23,9 +23,9 @@ void setUp() { numbers.add(3); numbers2 = new LinkedHashSet<>(); - numbers2.add(1); - numbers2.add(2); numbers2.add(3); + numbers2.add(2); + numbers2.add(1); } @Test @@ -57,8 +57,9 @@ void insert3Number() { } @Test - void checkResult() { - numbers.forEach(number -> { - }); + @DisplayName("입력한 숫자와 임의의 숫자를 비교한다.") + void getResult() { + String result = Result.getResult(numbers, numbers2); + assertThat(result).isEqualTo("1스트라이크 2볼"); } } \ No newline at end of file From 7b689fbe0ab0de82c845697f38f8f1fa7a852753 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Fri, 16 Dec 2022 14:53:17 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=EC=9D=B4=20?= =?UTF-8?q?=EC=A2=85=EB=A3=8C=EB=90=9C=20=ED=9B=84=201=EC=9D=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=95=98=EB=A9=B4=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=EC=9D=84=20=EB=8B=A4=EC=8B=9C=20=EC=8B=9C=EC=9E=91=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=EC=9D=B4=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=ED=9B=84=202=EB=A5=BC=20=EC=9E=85=EB=A0=A5=ED=95=98=EB=A9=B4?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=A8=EC=9D=84=20=EC=99=84?= =?UTF-8?q?=EC=A0=84=ED=9E=88=20=EC=A2=85=EB=A3=8C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/Baseball.java | 32 ++++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 79cc90fb..856914fb 100644 --- a/README.md +++ b/README.md @@ -14,5 +14,5 @@ - 숫자는 일치하지만 위치가 일치하지 않는 경우: 볼 - 스트라이크, 볼에 해당하는 숫자가 없는 경우: 낫싱 - 컴퓨터가 선택한 3개의 숫자와 사용자가 입력한 3개의 숫자가 일치하면 게임이 종료된다. -- [ ] 게임이 종료된 후 1을 입력하면 게임을 다시 시작할 수 있다. -- [ ] 게임이 종료된 후 2를 입력하면 프로그램을 완전히 종료할 수 있다. +- [X] 게임이 종료된 후 1을 입력하면 게임을 다시 시작할 수 있다. +- [X] 게임이 종료된 후 2를 입력하면 프로그램을 완전히 종료할 수 있다. diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 41f2916f..4c7190af 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -5,14 +5,26 @@ public class Baseball { private static Set numbers = new LinkedHashSet<>(); private static Set numbers2 = new LinkedHashSet<>(); public static void main(String[] args) { - String result = ""; - create3Number(); + while (true){ + String result = ""; - while (!result.equals("3개의 숫자를 모두 맞히셨습니다! 게임 종료")){ - insert3Number(); - result = Result.getResult(numbers, numbers2); - System.out.println(result); + create3Number(); + + while (!result.equals("3개의 숫자를 모두 맞히셨습니다! 게임 종료")){ + insert3Number(); + result = Result.getResult(numbers, numbers2); + System.out.println(result); + } + + int choice = endOrRestart(); + + if (choice == 1) { + continue; + } + else if (choice == 2) { + break; + } } } @@ -37,4 +49,12 @@ public static void insert3Number() { numbers2.add(number.charAt(i) - '0'); } } + + public static int endOrRestart() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + Scanner sc = new Scanner(System.in); + int choice = sc.nextInt(); + + return choice; + } } From bbbf647397218d534e093cac529967e161361391 Mon Sep 17 00:00:00 2001 From: "aaron.j" Date: Fri, 16 Dec 2022 15:49:34 +0900 Subject: [PATCH 8/8] =?UTF-8?q?refactor:=20=EB=A9=94=EC=86=8C=EB=93=9C=201?= =?UTF-8?q?0=EC=A4=84=20=EC=9D=B4=ED=95=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD,?= =?UTF-8?q?=20else=20=EC=98=88=EC=95=BD=EC=96=B4=20=EC=A0=9C=EA=B1=B0,=20o?= =?UTF-8?q?ptimize=20imports=20=EC=8B=A4=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Baseball.java | 37 ++++++++++++++++------------- src/main/java/CountBallStrike.java | 12 ++-------- src/main/java/Result.java | 26 ++++++++++---------- src/test/java/BaseballTest.java | 24 ++++++++++++------- src/test/java/TestUtil.java | 18 ++------------ src/test/java/study/SetTest.java | 2 +- src/test/java/study/StringTest.java | 1 - 7 files changed, 53 insertions(+), 67 deletions(-) diff --git a/src/main/java/Baseball.java b/src/main/java/Baseball.java index 4c7190af..2bea2502 100644 --- a/src/main/java/Baseball.java +++ b/src/main/java/Baseball.java @@ -1,30 +1,31 @@ -import java.util.*; +import java.util.LinkedHashSet; +import java.util.Random; +import java.util.Scanner; +import java.util.Set; public class Baseball { private static Set numbers = new LinkedHashSet<>(); private static Set numbers2 = new LinkedHashSet<>(); - public static void main(String[] args) { + public static void main(String[] args) { while (true){ - String result = ""; - create3Number(); + playGame(); + int choice = endOrRestart(); - while (!result.equals("3개의 숫자를 모두 맞히셨습니다! 게임 종료")){ - insert3Number(); - result = Result.getResult(numbers, numbers2); - System.out.println(result); - } + if (choice == 1) continue; + if (choice == 2) break; + } + } - int choice = endOrRestart(); + public static void playGame() { + String result = ""; - if (choice == 1) { - continue; - } - else if (choice == 2) { - break; - } + while (!result.equals("3개의 숫자를 모두 맞히셨습니다! 게임 종료")){ + insert3Number(); + result = Result.getResult(numbers, numbers2); + System.out.println(result); } } @@ -44,6 +45,10 @@ public static void insert3Number() { System.out.print("숫자를 입력해주세요 : "); String number = sc.nextLine(); + stringToSet(number); + } + + public static void stringToSet(String number) { for (int i = 0; i < number.length(); i++) { numbers2.add(number.charAt(i) - '0'); diff --git a/src/main/java/CountBallStrike.java b/src/main/java/CountBallStrike.java index 2321148a..13ff6b78 100644 --- a/src/main/java/CountBallStrike.java +++ b/src/main/java/CountBallStrike.java @@ -5,27 +5,19 @@ public static int countBall(Set numbers, Set numbers2) { int ball = 0; for (Integer number : numbers) { - if (numbers2.contains(number)) { - ball++; - } + if (numbers2.contains(number)) ball++; } - return ball; } - public static int countStrike(Set numbers, Set numbers2) { + public static int countStrike(Integer[] nums, Integer[] nums2) { int strike = 0; - Integer[] nums = numbers.toArray(new Integer[0]); - Integer[] nums2 = numbers2.toArray(new Integer[0]); - for (int i = 0; i < 3; i++) { if (nums[i] == nums2[i]) { strike++; } } - return strike; } - } diff --git a/src/main/java/Result.java b/src/main/java/Result.java index 6a5d3973..60729c7a 100644 --- a/src/main/java/Result.java +++ b/src/main/java/Result.java @@ -4,24 +4,22 @@ public class Result { public static String getResult(Set numbers, Set numbers2) { int ball = CountBallStrike.countBall(numbers, numbers2); - int strike = CountBallStrike.countStrike(numbers, numbers2); - + int strike = CountBallStrike.countStrike(numbers.toArray(new Integer[0]), numbers2.toArray(new Integer[0])); ball = ball - strike; - String result="낫싱"; if (strike == 3) { - result = "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; - } - else if (strike > 0 && ball > 0 ) { - result = strike + "스트라이크 " + ball + "볼"; - } - else if (strike > 0) { - result = strike + "스트라이크"; - } - else if (ball > 0) { - result = ball + "볼"; + return "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; } + return getStringResult(ball, strike); + } + + public static String getStringResult(int ball, int strike) { + if (strike > 0 && ball > 0 ) return strike + "스트라이크 " + ball + "볼"; + + if (strike > 0) return strike + "스트라이크"; + + if (ball > 0) return ball + "볼"; - return result; + return "낫싱"; } } diff --git a/src/test/java/BaseballTest.java b/src/test/java/BaseballTest.java index 94ca4de7..aca2762e 100644 --- a/src/test/java/BaseballTest.java +++ b/src/test/java/BaseballTest.java @@ -2,27 +2,29 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.util.*; +import java.util.LinkedHashSet; +import java.util.Random; +import java.util.Scanner; +import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class BaseballTest { private Set numbers = new LinkedHashSet<>(); private Set numbers2 = new LinkedHashSet<>(); + void init() { + numbers = new LinkedHashSet<>(); + numbers2 = new LinkedHashSet<>(); + } @BeforeEach void setUp() { - numbers = new LinkedHashSet<>(); + init(); numbers.add(1); numbers.add(2); numbers.add(3); - numbers2 = new LinkedHashSet<>(); numbers2.add(3); numbers2.add(2); numbers2.add(1); @@ -48,12 +50,16 @@ void insert3Number() { Scanner sc = TestUtil.getScanner("123"); String number = sc.nextLine(); + stringToSet(number); + + assertThat(numbers2.size()).isEqualTo(3); + } + + void stringToSet(String number) { for (int i = 0; i < number.length(); i++) { numbers2.add(number.charAt(i) - '0'); } - - assertThat(numbers2.size()).isEqualTo(3); } @Test diff --git a/src/test/java/TestUtil.java b/src/test/java/TestUtil.java index f9ffb1ad..0d3ab8fb 100644 --- a/src/test/java/TestUtil.java +++ b/src/test/java/TestUtil.java @@ -1,4 +1,5 @@ -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.Scanner; public class TestUtil { @@ -9,19 +10,4 @@ public static Scanner getScanner(String input) { return new Scanner(in); } - public static ByteArrayOutputStream setOutToByteArray() { - final ByteArrayOutputStream output = new ByteArrayOutputStream(); - System.setOut(new PrintStream(output)); - - return output; - } - - public static void clearSetOutToByteArray(ByteArrayOutputStream output) { - System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out))); - try { - output.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } } diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java index d9ffec45..3253dd18 100644 --- a/src/test/java/study/SetTest.java +++ b/src/test/java/study/SetTest.java @@ -9,7 +9,7 @@ import java.util.HashSet; import java.util.Set; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; public class SetTest { diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 8aeb31bb..14a9e68b 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -2,7 +2,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.platform.commons.annotation.Testable; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy;