From c00c332399aae8fd6bb259ed7ac36c762082307b Mon Sep 17 00:00:00 2001 From: heehun Date: Wed, 4 Sep 2024 17:59:58 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=5F=EB=84=98?= =?UTF-8?q?=EB=B2=84=5F=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++----------------- .../validationUtil/Validation.java | 10 +++++++ .../baseballGame/RandomNoGenerateTest.java | 7 +++++ .../baseballGame/RandomValidationTest.java | 16 +++++++++++ 4 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 src/main/java/study/baseballGame/validationUtil/Validation.java create mode 100644 src/test/java/study/baseballGame/RandomNoGenerateTest.java create mode 100644 src/test/java/study/baseballGame/RandomValidationTest.java diff --git a/README.md b/README.md index 8fe711203..83ceb2c47 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,2 @@ -## [NEXTSTEP 플레이그라운드의 미션 진행 과정](https://github.com/next-step/nextstep-docs/blob/master/playground/README.md) - ---- -## 학습 효과를 높이기 위해 추천하는 미션 진행 방법 - ---- -1. 피드백 강의 전까지 미션 진행 -> 피드백 강의 전까지 혼자 힘으로 미션 진행. 미션을 진행하면서 하나의 작업이 끝날 때 마다 add, commit -> 예를 들어 다음 숫자 야구 게임의 경우 0, 1, 2단계까지 구현을 완료한 후 push - -![mission baseball](https://raw.githubusercontent.com/next-step/nextstep-docs/master/playground/images/mission_baseball.png) - ---- -2. 피드백 앞 단계까지 미션 구현을 완료한 후 피드백 강의를 학습한다. - ---- -3. Git 브랜치를 master 또는 main으로 변경한 후 피드백을 반영하기 위한 새로운 브랜치를 생성한 후 처음부터 다시 미션 구현을 도전한다. - -``` -git branch -a // 모든 로컬 브랜치 확인 -git checkout master // 기본 브랜치가 master인 경우 -git checkout main // 기본 브랜치가 main인 경우 - -git checkout -b 브랜치이름 -ex) git checkout -b apply-feedback -``` +1. 랜덤 넘버 validation +1 - 9까지의 숫자만 허용 \ No newline at end of file diff --git a/src/main/java/study/baseballGame/validationUtil/Validation.java b/src/main/java/study/baseballGame/validationUtil/Validation.java new file mode 100644 index 000000000..63dfce4b4 --- /dev/null +++ b/src/main/java/study/baseballGame/validationUtil/Validation.java @@ -0,0 +1,10 @@ +package study.baseballGame.validationUtil; + +public class Validation { + public static final int MIN_NO = 0; + public static final int MAX_NO = 10; + + public static boolean RandomValidator(int no) { + return MIN_NO< no && no < MAX_NO; + } +} diff --git a/src/test/java/study/baseballGame/RandomNoGenerateTest.java b/src/test/java/study/baseballGame/RandomNoGenerateTest.java new file mode 100644 index 000000000..d88b61a4d --- /dev/null +++ b/src/test/java/study/baseballGame/RandomNoGenerateTest.java @@ -0,0 +1,7 @@ +//package study.baseballGame; +// +//import org.junit.jupiter.api.DisplayName; +// +//public class RandomNoGenerateTest { +// @DisplayName("램") +//} diff --git a/src/test/java/study/baseballGame/RandomValidationTest.java b/src/test/java/study/baseballGame/RandomValidationTest.java new file mode 100644 index 000000000..0a4907637 --- /dev/null +++ b/src/test/java/study/baseballGame/RandomValidationTest.java @@ -0,0 +1,16 @@ +package study.baseballGame; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import study.baseballGame.validationUtil.Validation; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RandomValidationTest { + @DisplayName("랜덤_넘버_테스트") + @Test + void 랜덤_넘버_테스트(){ + assertThat(Validation.RandomValidator(9)).isTrue(); + assertThat(Validation.RandomValidator(1)).isTrue(); + } +} From 98e91452909c7319a3d6b14c434a2fa71a0bca47 Mon Sep 17 00:00:00 2001 From: heehun Date: Wed, 4 Sep 2024 18:56:27 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=5F=EB=84=98?= =?UTF-8?q?=EB=B2=84=5F=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++- .../study/baseballGame/utils/Generate.java | 32 ++++++++++++ .../{validationUtil => utils}/Validation.java | 2 +- .../baseballGame/RandomNoGenerateTest.java | 51 ++++++++++++++++--- .../baseballGame/RandomValidationTest.java | 2 +- 5 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 src/main/java/study/baseballGame/utils/Generate.java rename src/main/java/study/baseballGame/{validationUtil => utils}/Validation.java (83%) diff --git a/README.md b/README.md index 83ceb2c47..8462cbbb2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ 1. 랜덤 넘버 validation -1 - 9까지의 숫자만 허용 \ No newline at end of file +1 - 9까지의 숫자만 허용 + +2. 랜덤 넘버 generate +흠.. 1번에서 만든 메소드랑 엮어서 ? +그럼 클래스를 분리 할 이유가 있나? \ No newline at end of file diff --git a/src/main/java/study/baseballGame/utils/Generate.java b/src/main/java/study/baseballGame/utils/Generate.java new file mode 100644 index 000000000..8835471de --- /dev/null +++ b/src/main/java/study/baseballGame/utils/Generate.java @@ -0,0 +1,32 @@ +package study.baseballGame.utils; + +import java.util.ArrayList; +import java.util.Random; + +public class Generate { + + public static String generateNumber(Random r) { + ArrayList list = new ArrayList<>(); + while (list.size() < 3) { + int no = r.nextInt(10); + insertNo(no,list); + } + // 리스트 값을 하나의 문자열로 변환 + StringBuilder sb = new StringBuilder(); + for (int num : list) { + sb.append(num); // 각 숫자를 문자열로 추가 + } + + return sb.toString(); // "123" 형식으로 반환 + } + + public static void insertNo(int no, ArrayList list){ + if(list.isEmpty()){ + list.add(no); + return; + } + if(!list.contains(no)){ + list.add(no); + } + } +} diff --git a/src/main/java/study/baseballGame/validationUtil/Validation.java b/src/main/java/study/baseballGame/utils/Validation.java similarity index 83% rename from src/main/java/study/baseballGame/validationUtil/Validation.java rename to src/main/java/study/baseballGame/utils/Validation.java index 63dfce4b4..9b5064cef 100644 --- a/src/main/java/study/baseballGame/validationUtil/Validation.java +++ b/src/main/java/study/baseballGame/utils/Validation.java @@ -1,4 +1,4 @@ -package study.baseballGame.validationUtil; +package study.baseballGame.utils; public class Validation { public static final int MIN_NO = 0; diff --git a/src/test/java/study/baseballGame/RandomNoGenerateTest.java b/src/test/java/study/baseballGame/RandomNoGenerateTest.java index d88b61a4d..6da85b47e 100644 --- a/src/test/java/study/baseballGame/RandomNoGenerateTest.java +++ b/src/test/java/study/baseballGame/RandomNoGenerateTest.java @@ -1,7 +1,44 @@ -//package study.baseballGame; -// -//import org.junit.jupiter.api.DisplayName; -// -//public class RandomNoGenerateTest { -// @DisplayName("램") -//} +package study.baseballGame; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import study.baseballGame.utils.Generate; + + +import java.util.ArrayList; +import java.util.Random; + +import static org.assertj.core.api.Assertions.assertThat; +import static study.baseballGame.utils.Generate.insertNo; + +public class RandomNoGenerateTest { + + private Random rand; + + @BeforeEach + void setUp() { + rand = new Random(); + } + + @DisplayName("숫자_입력") + @Test + void insertNoTest() { + int no = 1; + ArrayList list = new ArrayList<>(); + insertNo(no,list); + assertThat(list.size()).isNotEqualTo(0); + } + + @DisplayName("램덤_숫자_생성") + @Test + void randomNoGenerateTest() { + String randomNo = Generate.generateNumber(rand); + System.out.println("randomNo = " + randomNo); + String[] splitNo = randomNo.split(""); + assertThat(randomNo.length()).isEqualTo(3); + assertThat(splitNo[0]).isNotEqualTo(splitNo[1]); + assertThat(splitNo[1]).isNotEqualTo(splitNo[2]); + assertThat(splitNo[0]).isNotEqualTo(splitNo[2]); + } +} diff --git a/src/test/java/study/baseballGame/RandomValidationTest.java b/src/test/java/study/baseballGame/RandomValidationTest.java index 0a4907637..5ed4dc59d 100644 --- a/src/test/java/study/baseballGame/RandomValidationTest.java +++ b/src/test/java/study/baseballGame/RandomValidationTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import study.baseballGame.validationUtil.Validation; +import study.baseballGame.utils.Validation; import static org.assertj.core.api.Assertions.assertThat; From 07daa2c490e5d31d2b09d81e0296a6a04a51d205 Mon Sep 17 00:00:00 2001 From: heehun Date: Wed, 4 Sep 2024 19:46:36 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=EA=B3=B5=5F1=EA=B0=9C=5F=EB=B3=BC?= =?UTF-8?q?=5F=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4=ED=81=AC=5F=EA=B2=80?= =?UTF-8?q?=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++- src/main/java/study/baseballGame/Ball.java | 21 +++++++++++++++ .../java/study/baseballGame/BallStatus.java | 5 ++++ .../study/baseballGame/utils/Generate.java | 10 ++----- .../java/study/baseballGame/BallTest.java | 26 +++++++++++++++++++ .../baseballGame/RandomNoGenerateTest.java | 12 ++++----- 6 files changed, 69 insertions(+), 16 deletions(-) create mode 100644 src/main/java/study/baseballGame/Ball.java create mode 100644 src/main/java/study/baseballGame/BallStatus.java create mode 100644 src/test/java/study/baseballGame/BallTest.java diff --git a/README.md b/README.md index 8462cbbb2..222befb54 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,13 @@ 2. 랜덤 넘버 generate 흠.. 1번에서 만든 메소드랑 엮어서 ? -그럼 클래스를 분리 할 이유가 있나? \ No newline at end of file +그럼 클래스를 분리 할 이유가 있나? + +3. 공 비교 테스트 +공 객체를 생성 -> 필요한 필드 : number, location +공 1개 당 ball,strike 판정함 -> 비교 대상은 0 0 0 +볼 클래스, 비교 대상 볼 3개 +-> 2번 리팩토링 기존처럼 string 으로 ball 을 받을 이유가 없어짐 +ArrayList로 변경 +-> Enum 추가 STRIKE,BALL,NOTHING +4. \ No newline at end of file diff --git a/src/main/java/study/baseballGame/Ball.java b/src/main/java/study/baseballGame/Ball.java new file mode 100644 index 000000000..cfffd24a4 --- /dev/null +++ b/src/main/java/study/baseballGame/Ball.java @@ -0,0 +1,21 @@ +package study.baseballGame; + +import java.util.ArrayList; + +public class Ball { + private final int number; + private final int location; + + public Ball(int number, int location) { + this.number = number; + this.location = location; + } + //given 좀 이상한디.. + public BallStatus play(ArrayList given) { + if (given.get(this.location-1) == this.number) + return BallStatus.STRIKE; + if (given.contains(this.number)) + return BallStatus.BALL; + return BallStatus.NOTHING; + } +} diff --git a/src/main/java/study/baseballGame/BallStatus.java b/src/main/java/study/baseballGame/BallStatus.java new file mode 100644 index 000000000..cfaf5de89 --- /dev/null +++ b/src/main/java/study/baseballGame/BallStatus.java @@ -0,0 +1,5 @@ +package study.baseballGame; + +public enum BallStatus { + STRIKE,BALL,NOTHING +} diff --git a/src/main/java/study/baseballGame/utils/Generate.java b/src/main/java/study/baseballGame/utils/Generate.java index 8835471de..6583d8f49 100644 --- a/src/main/java/study/baseballGame/utils/Generate.java +++ b/src/main/java/study/baseballGame/utils/Generate.java @@ -5,19 +5,13 @@ public class Generate { - public static String generateNumber(Random r) { + public static ArrayList generateNumber(Random r) { ArrayList list = new ArrayList<>(); while (list.size() < 3) { int no = r.nextInt(10); insertNo(no,list); } - // 리스트 값을 하나의 문자열로 변환 - StringBuilder sb = new StringBuilder(); - for (int num : list) { - sb.append(num); // 각 숫자를 문자열로 추가 - } - - return sb.toString(); // "123" 형식으로 반환 + return list; } public static void insertNo(int no, ArrayList list){ diff --git a/src/test/java/study/baseballGame/BallTest.java b/src/test/java/study/baseballGame/BallTest.java new file mode 100644 index 000000000..c34de09f6 --- /dev/null +++ b/src/test/java/study/baseballGame/BallTest.java @@ -0,0 +1,26 @@ +package study.baseballGame; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BallTest { + @DisplayName("볼_스트라이크_검증") + @Test + void playTest() { + Ball ball = new Ball(4,1); + ArrayList given = new ArrayList<>(Arrays.asList(4, 1, 3)); + ArrayList given1 = new ArrayList<>(Arrays.asList(2, 3, 4)); + ArrayList given2 = new ArrayList<>(Arrays.asList(3, 9, 5)); + + assertThat(ball.play(given)).isEqualTo(BallStatus.STRIKE); + assertThat(ball.play(given1)).isEqualTo(BallStatus.BALL); + assertThat(ball.play(given2)).isEqualTo(BallStatus.NOTHING); + + } +} diff --git a/src/test/java/study/baseballGame/RandomNoGenerateTest.java b/src/test/java/study/baseballGame/RandomNoGenerateTest.java index 6da85b47e..7b9a61a80 100644 --- a/src/test/java/study/baseballGame/RandomNoGenerateTest.java +++ b/src/test/java/study/baseballGame/RandomNoGenerateTest.java @@ -33,12 +33,10 @@ void insertNoTest() { @DisplayName("램덤_숫자_생성") @Test void randomNoGenerateTest() { - String randomNo = Generate.generateNumber(rand); - System.out.println("randomNo = " + randomNo); - String[] splitNo = randomNo.split(""); - assertThat(randomNo.length()).isEqualTo(3); - assertThat(splitNo[0]).isNotEqualTo(splitNo[1]); - assertThat(splitNo[1]).isNotEqualTo(splitNo[2]); - assertThat(splitNo[0]).isNotEqualTo(splitNo[2]); + ArrayList randomNo = Generate.generateNumber(rand); + assertThat(randomNo.size()).isEqualTo(3); + assertThat(randomNo.get(0)).isNotEqualTo(randomNo.get(1)); + assertThat(randomNo.get(1)).isNotEqualTo(randomNo.get(2)); + assertThat(randomNo.get(0)).isNotEqualTo(randomNo.get(2)); } } From 18588748dbe39f024fd4d51abefb37ceaf454cb7 Mon Sep 17 00:00:00 2001 From: heehun Date: Thu, 5 Sep 2024 13:25:24 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20=EA=B3=B5=5F=EC=97=AC=EB=9F=AC?= =?UTF-8?q?=EA=B0=9C=5F=EB=B3=BC=5F=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=ED=81=AC=5F=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++- src/main/java/study/baseballGame/Balls.java | 22 ++++++++++++++++ .../java/study/baseballGame/BallTest.java | 2 +- .../java/study/baseballGame/BallsTest.java | 25 +++++++++++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/main/java/study/baseballGame/Balls.java create mode 100644 src/test/java/study/baseballGame/BallsTest.java diff --git a/README.md b/README.md index 222befb54..a4af218de 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,11 @@ -> 2번 리팩토링 기존처럼 string 으로 ball 을 받을 이유가 없어짐 ArrayList로 변경 -> Enum 추가 STRIKE,BALL,NOTHING -4. \ No newline at end of file + +4. 공 비교 심화 +Ball 객체를 엔티티를 가지고 있는 Balls 클래스 ? +ArrayList를 Balls 엔티티 -> 이 방식이 나을듯, 위 방식은 입력을 +ball 객체로 다 따로 만들어줘야해서 별로인듯 + +0 1 3 | 2 5 6 +공 1개마다 ball.play()로 비교 \ No newline at end of file diff --git a/src/main/java/study/baseballGame/Balls.java b/src/main/java/study/baseballGame/Balls.java new file mode 100644 index 000000000..6414c7cf1 --- /dev/null +++ b/src/main/java/study/baseballGame/Balls.java @@ -0,0 +1,22 @@ +package study.baseballGame; + +import java.util.ArrayList; +import java.util.stream.Collectors; + +public class Balls { + + private final ArrayList balls; + + public Balls(ArrayList ballNumbers) { + this.balls = ballNumbers.stream() + .map(input -> new Ball(input, ballNumbers.indexOf(input)+1)) + .collect(Collectors.toCollection(ArrayList::new)); + } + + public ArrayList play(ArrayList randomInput) { + return this.balls.stream() + .map(ball -> ball.play(randomInput)) + .filter(status -> status != BallStatus.NOTHING) + .collect(Collectors.toCollection(ArrayList::new)); + } +} diff --git a/src/test/java/study/baseballGame/BallTest.java b/src/test/java/study/baseballGame/BallTest.java index c34de09f6..e96d2356d 100644 --- a/src/test/java/study/baseballGame/BallTest.java +++ b/src/test/java/study/baseballGame/BallTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class BallTest { - @DisplayName("볼_스트라이크_검증") + @DisplayName("공_1개_볼_스트라이크_검증") @Test void playTest() { Ball ball = new Ball(4,1); diff --git a/src/test/java/study/baseballGame/BallsTest.java b/src/test/java/study/baseballGame/BallsTest.java new file mode 100644 index 000000000..a5c6db8fa --- /dev/null +++ b/src/test/java/study/baseballGame/BallsTest.java @@ -0,0 +1,25 @@ +package study.baseballGame; + + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BallsTest { + + @DisplayName("공_여러개_볼_스트라이크_테스트") + @Test + void playTest() { + ArrayList userInput = new ArrayList<>(Arrays.asList(4, 1, 3)); // 랜덤 값 + ArrayList randomInput = new ArrayList<>(Arrays.asList(2, 5, 3)); // 랜덤 값 + ArrayList randomInput2 = new ArrayList<>(Arrays.asList(4, 1, 3)); // 랜덤 값 + Balls balls = new Balls(userInput); + assertThat(balls.play(randomInput)).isEqualTo(Arrays.asList(BallStatus.STRIKE)); + assertThat(balls.play(randomInput2)).isEqualTo(Arrays.asList(BallStatus.STRIKE,BallStatus.STRIKE,BallStatus.STRIKE)); + + } +} From 625c17454f810097c831e83f23248270cd524d81 Mon Sep 17 00:00:00 2001 From: heehun Date: Thu, 5 Sep 2024 14:37:09 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20=EB=B3=BC-=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=ED=81=AC=20=ED=8C=90=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++--- .../study/baseballGame/utils/Validation.java | 14 +++++++++- .../java/study/baseballGame/BallsTest.java | 1 - .../baseballGame/RandomValidationTest.java | 4 +-- .../baseballGame/ResultValidationTest.java | 26 +++++++++++++++++++ 5 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/test/java/study/baseballGame/ResultValidationTest.java diff --git a/README.md b/README.md index a4af218de..d3ad51654 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,14 @@ ArrayList로 변경 -> Enum 추가 STRIKE,BALL,NOTHING 4. 공 비교 심화 -Ball 객체를 엔티티를 가지고 있는 Balls 클래스 ? -ArrayList를 Balls 엔티티 -> 이 방식이 나을듯, 위 방식은 입력을 +a. Ball 객체를 엔티티를 가지고 있는 Balls 클래스 ? +b. ArrayList 를 Balls 엔티티 -> 이 방식이 나을듯, 위 방식은 입력을 ball 객체로 다 따로 만들어줘야해서 별로인듯 - +-> 하다 보니 a 방식으로 진행 +ball.play 를 사용하기 위해 0 1 3 | 2 5 6 -공 1개마다 ball.play()로 비교 \ No newline at end of file +공 1개마다 ball.play()로 비교 + +5. 볼-스트라이크 판정 +스트라이크 3개 -> 정답 +그 외 경우 -> 오답 \ No newline at end of file diff --git a/src/main/java/study/baseballGame/utils/Validation.java b/src/main/java/study/baseballGame/utils/Validation.java index 9b5064cef..c384ec981 100644 --- a/src/main/java/study/baseballGame/utils/Validation.java +++ b/src/main/java/study/baseballGame/utils/Validation.java @@ -1,10 +1,22 @@ package study.baseballGame.utils; +import study.baseballGame.BallStatus; + +import java.util.ArrayList; + public class Validation { public static final int MIN_NO = 0; public static final int MAX_NO = 10; - public static boolean RandomValidator(int no) { + public static boolean randomValidator(int no) { return MIN_NO< no && no < MAX_NO; } + + public static boolean resultValidation(ArrayList results) { + if (results.isEmpty()) + return false; + if (results.size() < 3) + return false; + return results.stream().allMatch(result -> result == BallStatus.STRIKE); + } } diff --git a/src/test/java/study/baseballGame/BallsTest.java b/src/test/java/study/baseballGame/BallsTest.java index a5c6db8fa..fba13d1b2 100644 --- a/src/test/java/study/baseballGame/BallsTest.java +++ b/src/test/java/study/baseballGame/BallsTest.java @@ -20,6 +20,5 @@ void playTest() { Balls balls = new Balls(userInput); assertThat(balls.play(randomInput)).isEqualTo(Arrays.asList(BallStatus.STRIKE)); assertThat(balls.play(randomInput2)).isEqualTo(Arrays.asList(BallStatus.STRIKE,BallStatus.STRIKE,BallStatus.STRIKE)); - } } diff --git a/src/test/java/study/baseballGame/RandomValidationTest.java b/src/test/java/study/baseballGame/RandomValidationTest.java index 5ed4dc59d..ebfe0bf2e 100644 --- a/src/test/java/study/baseballGame/RandomValidationTest.java +++ b/src/test/java/study/baseballGame/RandomValidationTest.java @@ -10,7 +10,7 @@ public class RandomValidationTest { @DisplayName("랜덤_넘버_테스트") @Test void 랜덤_넘버_테스트(){ - assertThat(Validation.RandomValidator(9)).isTrue(); - assertThat(Validation.RandomValidator(1)).isTrue(); + assertThat(Validation.randomValidator(9)).isTrue(); + assertThat(Validation.randomValidator(1)).isTrue(); } } diff --git a/src/test/java/study/baseballGame/ResultValidationTest.java b/src/test/java/study/baseballGame/ResultValidationTest.java new file mode 100644 index 000000000..3974310ec --- /dev/null +++ b/src/test/java/study/baseballGame/ResultValidationTest.java @@ -0,0 +1,26 @@ +package study.baseballGame; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import study.baseballGame.utils.Validation; + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ResultValidationTest { + + @DisplayName("볼-스트라이크 판정") + @Test + void resultValidationTest() { + ArrayList result = new ArrayList<>(Arrays.asList(BallStatus.STRIKE,BallStatus.STRIKE,BallStatus.STRIKE)); + ArrayList result1 = new ArrayList<>(); + ArrayList result2 = new ArrayList<>(Arrays.asList(BallStatus.STRIKE)); + + assertThat(Validation.resultValidation(result)).isTrue(); + assertThat(Validation.resultValidation(result1)).isFalse(); + assertThat(Validation.resultValidation(result2)).isFalse(); + } +} From 7eab0ef20b1da4c8873b248b48ed92399158bd77 Mon Sep 17 00:00:00 2001 From: heehun Date: Thu, 5 Sep 2024 16:11:15 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20=EA=B8=B0=EB=8A=A5=EA=B5=AC?= =?UTF-8?q?=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 --- .../java/study/baseballGame/BaseballGame.java | 38 ++++++++++++++ .../study/baseballGame/utils/Generate.java | 2 +- .../study/baseballGame/utils/Validation.java | 2 +- .../study/baseballGame/views/InputView.java | 31 ++++++++++++ .../study/baseballGame/views/ResultView.java | 49 +++++++++++++++++++ 5 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 src/main/java/study/baseballGame/BaseballGame.java create mode 100644 src/main/java/study/baseballGame/views/InputView.java create mode 100644 src/main/java/study/baseballGame/views/ResultView.java diff --git a/src/main/java/study/baseballGame/BaseballGame.java b/src/main/java/study/baseballGame/BaseballGame.java new file mode 100644 index 000000000..a9b95e595 --- /dev/null +++ b/src/main/java/study/baseballGame/BaseballGame.java @@ -0,0 +1,38 @@ +package study.baseballGame; + +import study.baseballGame.utils.Generate; +import study.baseballGame.utils.Validation; +import study.baseballGame.views.InputView; +import study.baseballGame.views.ResultView; + +import java.util.ArrayList; +import java.util.Random; +import java.util.Scanner; + +public class BaseballGame { + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + Random rand = new Random(); + + //랜덤 넘버 생성 + ArrayList randomNumbers = Generate.generateNumber(rand); + System.out.println("randomNumbers = " + randomNumbers); + while (true) { + InputView.print(); + ArrayList userInput = InputView.input(sc); + Balls userBall = new Balls(userInput); + if (!Validation.resultValidation(userBall.play(randomNumbers))){ + ResultView.print(userBall.play(randomNumbers)); + System.out.println(); + continue; + } + ResultView.print(); + if (ResultView.input(sc) == 2) + break; + randomNumbers = Generate.generateNumber(rand); + System.out.println("randomNumbers = " + randomNumbers); + + } + } +} diff --git a/src/main/java/study/baseballGame/utils/Generate.java b/src/main/java/study/baseballGame/utils/Generate.java index 6583d8f49..380ffcde3 100644 --- a/src/main/java/study/baseballGame/utils/Generate.java +++ b/src/main/java/study/baseballGame/utils/Generate.java @@ -19,7 +19,7 @@ public static void insertNo(int no, ArrayList list){ list.add(no); return; } - if(!list.contains(no)){ + if(!list.contains(no) && Validation.randomValidator(no)){ list.add(no); } } diff --git a/src/main/java/study/baseballGame/utils/Validation.java b/src/main/java/study/baseballGame/utils/Validation.java index c384ec981..ea39d5dc6 100644 --- a/src/main/java/study/baseballGame/utils/Validation.java +++ b/src/main/java/study/baseballGame/utils/Validation.java @@ -9,7 +9,7 @@ public class Validation { public static final int MAX_NO = 10; public static boolean randomValidator(int no) { - return MIN_NO< no && no < MAX_NO; + return MIN_NO < no && no < MAX_NO; } public static boolean resultValidation(ArrayList results) { diff --git a/src/main/java/study/baseballGame/views/InputView.java b/src/main/java/study/baseballGame/views/InputView.java new file mode 100644 index 000000000..42b081cc6 --- /dev/null +++ b/src/main/java/study/baseballGame/views/InputView.java @@ -0,0 +1,31 @@ +package study.baseballGame.views; + +import java.util.ArrayList; +import java.util.Scanner; + +public class InputView { + + public static final String inputWord = "숫자를 입력해 주세요 : "; + public static final int BALL_NO = 3; + + public static void print() { + System.out.print(inputWord); + } + public static ArrayList input(Scanner sc) { + ArrayList list = new ArrayList<>(); + int number = sc.nextInt(); // 숫자를 문자열로 변환한 후, 각 문자를 하나씩 ArrayList에 추가 + String numberStr = Integer.toString(number); + + //3자리 아니면 에러 로직 + + // 각 자리를 배열에 넣기 + for (int i = 0; i < BALL_NO; i++) { + int digit = Character.getNumericValue(numberStr.charAt(i)); + list.add(digit); + } + + return list; // 숫자의 각 자리가 담긴 리스트 반환 + } + + +} diff --git a/src/main/java/study/baseballGame/views/ResultView.java b/src/main/java/study/baseballGame/views/ResultView.java new file mode 100644 index 000000000..ff9c7e28c --- /dev/null +++ b/src/main/java/study/baseballGame/views/ResultView.java @@ -0,0 +1,49 @@ +package study.baseballGame.views; + +import study.baseballGame.BallStatus; + +import javax.lang.model.SourceVersion; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; + +public class ResultView { + + + public static final String resultWord = "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n" + + "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; + + public static void print() { + System.out.println(resultWord); + } + + public static void print(ArrayList results) { + AtomicInteger ballNum = new AtomicInteger(); + AtomicInteger strikeNum = new AtomicInteger(); + + results.stream().forEach(result -> { + if (result == BallStatus.STRIKE) { + strikeNum.getAndIncrement(); + } else if (result == BallStatus.BALL) { + ballNum.getAndIncrement(); + } + }); + int ball = ballNum.get(); + int strike = strikeNum.get(); + if (ball==0 &&strike==0) { + System.out.print("나띵"); + return; + } + if (ball!=0) { + System.out.print(ball+"볼"); + } + if (strike!=0) { + System.out.print(strike+"스트라이크"); + } + + } + + public static int input(Scanner sc) { + return sc.nextInt(); + } +} From 744d808a4fcfdb5fc4c8796366ed1593a5463f0b Mon Sep 17 00:00:00 2001 From: heehun Date: Thu, 5 Sep 2024 16:12:23 +0900 Subject: [PATCH 7/9] readMe --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d3ad51654..5b09c1dcc 100644 --- a/README.md +++ b/README.md @@ -24,4 +24,10 @@ ball.play 를 사용하기 위해 5. 볼-스트라이크 판정 스트라이크 3개 -> 정답 -그 외 경우 -> 오답 \ No newline at end of file +그 외 경우 -> 오답 + + +----------------------------------------------------------- +다 끝내고 생각 +NOTHING ENUM 안썼네 +테스트 코드 단위로 짜다보니깐 메인으로 합칠때 편하다 \ No newline at end of file From 82825c751efa1092b2579399b10eacd3bafbe540 Mon Sep 17 00:00:00 2001 From: heehun Date: Thu, 5 Sep 2024 18:32:45 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[feat]=20:=20=EC=B5=9C=EC=A2=85=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EA=B0=9D=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++- src/main/java/study/baseballGame/Ball.java | 1 + src/main/java/study/baseballGame/Balls.java | 8 +++- .../java/study/baseballGame/BaseballGame.java | 12 ++++- .../java/study/baseballGame/PlayResult.java | 48 +++++++++++++++++++ .../study/baseballGame/utils/Generate.java | 7 ++- .../study/baseballGame/views/InputView.java | 7 +-- .../study/baseballGame/views/ResultView.java | 21 +++----- .../baseballGame/ResultGenerateTest.java | 24 ++++++++++ 9 files changed, 111 insertions(+), 23 deletions(-) create mode 100644 src/main/java/study/baseballGame/PlayResult.java create mode 100644 src/test/java/study/baseballGame/ResultGenerateTest.java diff --git a/README.md b/README.md index 5b09c1dcc..f1329ec43 100644 --- a/README.md +++ b/README.md @@ -30,4 +30,8 @@ ball.play 를 사용하기 위해 ----------------------------------------------------------- 다 끝내고 생각 NOTHING ENUM 안썼네 -테스트 코드 단위로 짜다보니깐 메인으로 합칠때 편하다 \ No newline at end of file +테스트 코드 단위로 짜다보니깐 메인으로 합칠때 편하다 +1. 객체 값에 직접 접근하고 있었음 -> 객체에 메세지를 보낸다고 생각 +2. 결과를 ResultView 에서 불완전한 result 리스트를 처리해서 출력중 + 2-1. result 객체를 만들어서 저 데이터를 처리해주자 +3. diff --git a/src/main/java/study/baseballGame/Ball.java b/src/main/java/study/baseballGame/Ball.java index cfffd24a4..0461f3c21 100644 --- a/src/main/java/study/baseballGame/Ball.java +++ b/src/main/java/study/baseballGame/Ball.java @@ -18,4 +18,5 @@ public BallStatus play(ArrayList given) { return BallStatus.BALL; return BallStatus.NOTHING; } + } diff --git a/src/main/java/study/baseballGame/Balls.java b/src/main/java/study/baseballGame/Balls.java index 6414c7cf1..4e0b5920a 100644 --- a/src/main/java/study/baseballGame/Balls.java +++ b/src/main/java/study/baseballGame/Balls.java @@ -8,9 +8,15 @@ public class Balls { private final ArrayList balls; public Balls(ArrayList ballNumbers) { - this.balls = ballNumbers.stream() + balls = mapToBalls(ballNumbers); + } + + private ArrayList mapToBalls(ArrayList ballNumbers) { + final ArrayList balls; + balls = ballNumbers.stream() .map(input -> new Ball(input, ballNumbers.indexOf(input)+1)) .collect(Collectors.toCollection(ArrayList::new)); + return balls; } public ArrayList play(ArrayList randomInput) { diff --git a/src/main/java/study/baseballGame/BaseballGame.java b/src/main/java/study/baseballGame/BaseballGame.java index a9b95e595..4ab3d14ac 100644 --- a/src/main/java/study/baseballGame/BaseballGame.java +++ b/src/main/java/study/baseballGame/BaseballGame.java @@ -21,15 +21,23 @@ public static void main(String[] args) { while (true) { InputView.print(); ArrayList userInput = InputView.input(sc); + Balls userBall = new Balls(userInput); - if (!Validation.resultValidation(userBall.play(randomNumbers))){ - ResultView.print(userBall.play(randomNumbers)); + ArrayList result = userBall.play(randomNumbers); + + PlayResult playResult = new PlayResult(); + playResult.generateResult(result); + + if (!playResult.isGameOver()){ + ResultView.print(playResult); System.out.println(); continue; } + ResultView.print(); if (ResultView.input(sc) == 2) break; + randomNumbers = Generate.generateNumber(rand); System.out.println("randomNumbers = " + randomNumbers); diff --git a/src/main/java/study/baseballGame/PlayResult.java b/src/main/java/study/baseballGame/PlayResult.java new file mode 100644 index 000000000..17bd6f2c3 --- /dev/null +++ b/src/main/java/study/baseballGame/PlayResult.java @@ -0,0 +1,48 @@ +package study.baseballGame; + +import java.util.ArrayList; + +public class PlayResult { + + private int strike = 0; + private int ball = 0; + private int nothing = 0; + + private final static int GAME_OVER = 3; + + // 결과 생성 메서드 + public void generateResult(ArrayList tempResults) { + tempResults.forEach( + this::checkBallStatus // 스트림의 각 요소에 대해 checkBallStatus를 호출 + ); + } + + public boolean isGameOver() { + return this.strike == GAME_OVER; + } + + private void checkBallStatus(BallStatus ballStatus) { + if (ballStatus == BallStatus.STRIKE) { + this.strike++; + } + if (ballStatus == BallStatus.BALL) { + this.ball++; + } + if (ballStatus == BallStatus.NOTHING) { + this.nothing++; + } + } + + public int getStrike() { + return strike; + } + + public int getBall() { + return ball; + } + + public int getNothing() { + return nothing; + } + +} diff --git a/src/main/java/study/baseballGame/utils/Generate.java b/src/main/java/study/baseballGame/utils/Generate.java index 380ffcde3..d93f8f85d 100644 --- a/src/main/java/study/baseballGame/utils/Generate.java +++ b/src/main/java/study/baseballGame/utils/Generate.java @@ -1,13 +1,17 @@ package study.baseballGame.utils; +import study.baseballGame.BallStatus; + import java.util.ArrayList; import java.util.Random; public class Generate { + public static final int MAX_SIZE = 3; + public static ArrayList generateNumber(Random r) { ArrayList list = new ArrayList<>(); - while (list.size() < 3) { + while (list.size() < MAX_SIZE) { int no = r.nextInt(10); insertNo(no,list); } @@ -23,4 +27,5 @@ public static void insertNo(int no, ArrayList list){ list.add(no); } } + } diff --git a/src/main/java/study/baseballGame/views/InputView.java b/src/main/java/study/baseballGame/views/InputView.java index 42b081cc6..da95bc4a4 100644 --- a/src/main/java/study/baseballGame/views/InputView.java +++ b/src/main/java/study/baseballGame/views/InputView.java @@ -11,13 +11,14 @@ public class InputView { public static void print() { System.out.print(inputWord); } + public static ArrayList input(Scanner sc) { ArrayList list = new ArrayList<>(); - int number = sc.nextInt(); // 숫자를 문자열로 변환한 후, 각 문자를 하나씩 ArrayList에 추가 + + int number = sc.nextInt(); String numberStr = Integer.toString(number); - //3자리 아니면 에러 로직 - + // 각 자리를 배열에 넣기 for (int i = 0; i < BALL_NO; i++) { int digit = Character.getNumericValue(numberStr.charAt(i)); diff --git a/src/main/java/study/baseballGame/views/ResultView.java b/src/main/java/study/baseballGame/views/ResultView.java index ff9c7e28c..1e2aa883d 100644 --- a/src/main/java/study/baseballGame/views/ResultView.java +++ b/src/main/java/study/baseballGame/views/ResultView.java @@ -1,6 +1,7 @@ package study.baseballGame.views; import study.baseballGame.BallStatus; +import study.baseballGame.PlayResult; import javax.lang.model.SourceVersion; import java.util.ArrayList; @@ -10,26 +11,17 @@ public class ResultView { - public static final String resultWord = "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n" + + private static final String resultWord = "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n" + "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; public static void print() { System.out.println(resultWord); } - public static void print(ArrayList results) { - AtomicInteger ballNum = new AtomicInteger(); - AtomicInteger strikeNum = new AtomicInteger(); - - results.stream().forEach(result -> { - if (result == BallStatus.STRIKE) { - strikeNum.getAndIncrement(); - } else if (result == BallStatus.BALL) { - ballNum.getAndIncrement(); - } - }); - int ball = ballNum.get(); - int strike = strikeNum.get(); + public static void print(PlayResult playResult) { + + int ball = playResult.getBall(); + int strike = playResult.getStrike();; if (ball==0 &&strike==0) { System.out.print("나띵"); return; @@ -40,7 +32,6 @@ public static void print(ArrayList results) { if (strike!=0) { System.out.print(strike+"스트라이크"); } - } public static int input(Scanner sc) { diff --git a/src/test/java/study/baseballGame/ResultGenerateTest.java b/src/test/java/study/baseballGame/ResultGenerateTest.java new file mode 100644 index 000000000..c2843f041 --- /dev/null +++ b/src/test/java/study/baseballGame/ResultGenerateTest.java @@ -0,0 +1,24 @@ +package study.baseballGame; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ResultGenerateTest { + + @DisplayName("최종_결과_생성_테스트") + @Test + void resultGenerateTest() { + ArrayList tempResult = new ArrayList<>(Arrays.asList(BallStatus.BALL, BallStatus.STRIKE, BallStatus.STRIKE)); + PlayResult playResult = new PlayResult(); + playResult.generateResult(tempResult); + assertThat(playResult.getBall()).isEqualTo(1); + assertThat(playResult.getStrike()).isEqualTo(2); + + } +} From 4d3fa69034d0d719b78ef1626b0b6f4075ad849f Mon Sep 17 00:00:00 2001 From: heehunjung <114041681+heehunjung@users.noreply.github.com> Date: Thu, 5 Sep 2024 18:36:37 +0900 Subject: [PATCH 9/9] =?UTF-8?q?Revert=20"=EB=81=97"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 51 ++++++++----------- src/main/java/study/baseballGame/Ball.java | 22 -------- .../java/study/baseballGame/BallStatus.java | 5 -- src/main/java/study/baseballGame/Balls.java | 28 ---------- .../java/study/baseballGame/BaseballGame.java | 46 ----------------- .../java/study/baseballGame/PlayResult.java | 48 ----------------- .../study/baseballGame/utils/Generate.java | 31 ----------- .../study/baseballGame/utils/Validation.java | 22 -------- .../study/baseballGame/views/InputView.java | 32 ------------ .../study/baseballGame/views/ResultView.java | 40 --------------- .../java/study/baseballGame/BallTest.java | 26 ---------- .../java/study/baseballGame/BallsTest.java | 24 --------- .../baseballGame/RandomNoGenerateTest.java | 42 --------------- .../baseballGame/RandomValidationTest.java | 16 ------ .../baseballGame/ResultGenerateTest.java | 24 --------- .../baseballGame/ResultValidationTest.java | 26 ---------- 16 files changed, 20 insertions(+), 463 deletions(-) delete mode 100644 src/main/java/study/baseballGame/Ball.java delete mode 100644 src/main/java/study/baseballGame/BallStatus.java delete mode 100644 src/main/java/study/baseballGame/Balls.java delete mode 100644 src/main/java/study/baseballGame/BaseballGame.java delete mode 100644 src/main/java/study/baseballGame/PlayResult.java delete mode 100644 src/main/java/study/baseballGame/utils/Generate.java delete mode 100644 src/main/java/study/baseballGame/utils/Validation.java delete mode 100644 src/main/java/study/baseballGame/views/InputView.java delete mode 100644 src/main/java/study/baseballGame/views/ResultView.java delete mode 100644 src/test/java/study/baseballGame/BallTest.java delete mode 100644 src/test/java/study/baseballGame/BallsTest.java delete mode 100644 src/test/java/study/baseballGame/RandomNoGenerateTest.java delete mode 100644 src/test/java/study/baseballGame/RandomValidationTest.java delete mode 100644 src/test/java/study/baseballGame/ResultGenerateTest.java delete mode 100644 src/test/java/study/baseballGame/ResultValidationTest.java diff --git a/README.md b/README.md index f1329ec43..8fe711203 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,26 @@ -1. 랜덤 넘버 validation -1 - 9까지의 숫자만 허용 +## [NEXTSTEP 플레이그라운드의 미션 진행 과정](https://github.com/next-step/nextstep-docs/blob/master/playground/README.md) -2. 랜덤 넘버 generate -흠.. 1번에서 만든 메소드랑 엮어서 ? -그럼 클래스를 분리 할 이유가 있나? +--- +## 학습 효과를 높이기 위해 추천하는 미션 진행 방법 -3. 공 비교 테스트 -공 객체를 생성 -> 필요한 필드 : number, location -공 1개 당 ball,strike 판정함 -> 비교 대상은 0 0 0 -볼 클래스, 비교 대상 볼 3개 --> 2번 리팩토링 기존처럼 string 으로 ball 을 받을 이유가 없어짐 -ArrayList로 변경 --> Enum 추가 STRIKE,BALL,NOTHING +--- +1. 피드백 강의 전까지 미션 진행 +> 피드백 강의 전까지 혼자 힘으로 미션 진행. 미션을 진행하면서 하나의 작업이 끝날 때 마다 add, commit +> 예를 들어 다음 숫자 야구 게임의 경우 0, 1, 2단계까지 구현을 완료한 후 push -4. 공 비교 심화 -a. Ball 객체를 엔티티를 가지고 있는 Balls 클래스 ? -b. ArrayList 를 Balls 엔티티 -> 이 방식이 나을듯, 위 방식은 입력을 -ball 객체로 다 따로 만들어줘야해서 별로인듯 --> 하다 보니 a 방식으로 진행 -ball.play 를 사용하기 위해 -0 1 3 | 2 5 6 -공 1개마다 ball.play()로 비교 +![mission baseball](https://raw.githubusercontent.com/next-step/nextstep-docs/master/playground/images/mission_baseball.png) -5. 볼-스트라이크 판정 -스트라이크 3개 -> 정답 -그 외 경우 -> 오답 +--- +2. 피드백 앞 단계까지 미션 구현을 완료한 후 피드백 강의를 학습한다. +--- +3. Git 브랜치를 master 또는 main으로 변경한 후 피드백을 반영하기 위한 새로운 브랜치를 생성한 후 처음부터 다시 미션 구현을 도전한다. ------------------------------------------------------------ -다 끝내고 생각 -NOTHING ENUM 안썼네 -테스트 코드 단위로 짜다보니깐 메인으로 합칠때 편하다 -1. 객체 값에 직접 접근하고 있었음 -> 객체에 메세지를 보낸다고 생각 -2. 결과를 ResultView 에서 불완전한 result 리스트를 처리해서 출력중 - 2-1. result 객체를 만들어서 저 데이터를 처리해주자 -3. +``` +git branch -a // 모든 로컬 브랜치 확인 +git checkout master // 기본 브랜치가 master인 경우 +git checkout main // 기본 브랜치가 main인 경우 + +git checkout -b 브랜치이름 +ex) git checkout -b apply-feedback +``` diff --git a/src/main/java/study/baseballGame/Ball.java b/src/main/java/study/baseballGame/Ball.java deleted file mode 100644 index 0461f3c21..000000000 --- a/src/main/java/study/baseballGame/Ball.java +++ /dev/null @@ -1,22 +0,0 @@ -package study.baseballGame; - -import java.util.ArrayList; - -public class Ball { - private final int number; - private final int location; - - public Ball(int number, int location) { - this.number = number; - this.location = location; - } - //given 좀 이상한디.. - public BallStatus play(ArrayList given) { - if (given.get(this.location-1) == this.number) - return BallStatus.STRIKE; - if (given.contains(this.number)) - return BallStatus.BALL; - return BallStatus.NOTHING; - } - -} diff --git a/src/main/java/study/baseballGame/BallStatus.java b/src/main/java/study/baseballGame/BallStatus.java deleted file mode 100644 index cfaf5de89..000000000 --- a/src/main/java/study/baseballGame/BallStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package study.baseballGame; - -public enum BallStatus { - STRIKE,BALL,NOTHING -} diff --git a/src/main/java/study/baseballGame/Balls.java b/src/main/java/study/baseballGame/Balls.java deleted file mode 100644 index 4e0b5920a..000000000 --- a/src/main/java/study/baseballGame/Balls.java +++ /dev/null @@ -1,28 +0,0 @@ -package study.baseballGame; - -import java.util.ArrayList; -import java.util.stream.Collectors; - -public class Balls { - - private final ArrayList balls; - - public Balls(ArrayList ballNumbers) { - balls = mapToBalls(ballNumbers); - } - - private ArrayList mapToBalls(ArrayList ballNumbers) { - final ArrayList balls; - balls = ballNumbers.stream() - .map(input -> new Ball(input, ballNumbers.indexOf(input)+1)) - .collect(Collectors.toCollection(ArrayList::new)); - return balls; - } - - public ArrayList play(ArrayList randomInput) { - return this.balls.stream() - .map(ball -> ball.play(randomInput)) - .filter(status -> status != BallStatus.NOTHING) - .collect(Collectors.toCollection(ArrayList::new)); - } -} diff --git a/src/main/java/study/baseballGame/BaseballGame.java b/src/main/java/study/baseballGame/BaseballGame.java deleted file mode 100644 index 4ab3d14ac..000000000 --- a/src/main/java/study/baseballGame/BaseballGame.java +++ /dev/null @@ -1,46 +0,0 @@ -package study.baseballGame; - -import study.baseballGame.utils.Generate; -import study.baseballGame.utils.Validation; -import study.baseballGame.views.InputView; -import study.baseballGame.views.ResultView; - -import java.util.ArrayList; -import java.util.Random; -import java.util.Scanner; - -public class BaseballGame { - - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - Random rand = new Random(); - - //랜덤 넘버 생성 - ArrayList randomNumbers = Generate.generateNumber(rand); - System.out.println("randomNumbers = " + randomNumbers); - while (true) { - InputView.print(); - ArrayList userInput = InputView.input(sc); - - Balls userBall = new Balls(userInput); - ArrayList result = userBall.play(randomNumbers); - - PlayResult playResult = new PlayResult(); - playResult.generateResult(result); - - if (!playResult.isGameOver()){ - ResultView.print(playResult); - System.out.println(); - continue; - } - - ResultView.print(); - if (ResultView.input(sc) == 2) - break; - - randomNumbers = Generate.generateNumber(rand); - System.out.println("randomNumbers = " + randomNumbers); - - } - } -} diff --git a/src/main/java/study/baseballGame/PlayResult.java b/src/main/java/study/baseballGame/PlayResult.java deleted file mode 100644 index 17bd6f2c3..000000000 --- a/src/main/java/study/baseballGame/PlayResult.java +++ /dev/null @@ -1,48 +0,0 @@ -package study.baseballGame; - -import java.util.ArrayList; - -public class PlayResult { - - private int strike = 0; - private int ball = 0; - private int nothing = 0; - - private final static int GAME_OVER = 3; - - // 결과 생성 메서드 - public void generateResult(ArrayList tempResults) { - tempResults.forEach( - this::checkBallStatus // 스트림의 각 요소에 대해 checkBallStatus를 호출 - ); - } - - public boolean isGameOver() { - return this.strike == GAME_OVER; - } - - private void checkBallStatus(BallStatus ballStatus) { - if (ballStatus == BallStatus.STRIKE) { - this.strike++; - } - if (ballStatus == BallStatus.BALL) { - this.ball++; - } - if (ballStatus == BallStatus.NOTHING) { - this.nothing++; - } - } - - public int getStrike() { - return strike; - } - - public int getBall() { - return ball; - } - - public int getNothing() { - return nothing; - } - -} diff --git a/src/main/java/study/baseballGame/utils/Generate.java b/src/main/java/study/baseballGame/utils/Generate.java deleted file mode 100644 index d93f8f85d..000000000 --- a/src/main/java/study/baseballGame/utils/Generate.java +++ /dev/null @@ -1,31 +0,0 @@ -package study.baseballGame.utils; - -import study.baseballGame.BallStatus; - -import java.util.ArrayList; -import java.util.Random; - -public class Generate { - - public static final int MAX_SIZE = 3; - - public static ArrayList generateNumber(Random r) { - ArrayList list = new ArrayList<>(); - while (list.size() < MAX_SIZE) { - int no = r.nextInt(10); - insertNo(no,list); - } - return list; - } - - public static void insertNo(int no, ArrayList list){ - if(list.isEmpty()){ - list.add(no); - return; - } - if(!list.contains(no) && Validation.randomValidator(no)){ - list.add(no); - } - } - -} diff --git a/src/main/java/study/baseballGame/utils/Validation.java b/src/main/java/study/baseballGame/utils/Validation.java deleted file mode 100644 index ea39d5dc6..000000000 --- a/src/main/java/study/baseballGame/utils/Validation.java +++ /dev/null @@ -1,22 +0,0 @@ -package study.baseballGame.utils; - -import study.baseballGame.BallStatus; - -import java.util.ArrayList; - -public class Validation { - public static final int MIN_NO = 0; - public static final int MAX_NO = 10; - - public static boolean randomValidator(int no) { - return MIN_NO < no && no < MAX_NO; - } - - public static boolean resultValidation(ArrayList results) { - if (results.isEmpty()) - return false; - if (results.size() < 3) - return false; - return results.stream().allMatch(result -> result == BallStatus.STRIKE); - } -} diff --git a/src/main/java/study/baseballGame/views/InputView.java b/src/main/java/study/baseballGame/views/InputView.java deleted file mode 100644 index da95bc4a4..000000000 --- a/src/main/java/study/baseballGame/views/InputView.java +++ /dev/null @@ -1,32 +0,0 @@ -package study.baseballGame.views; - -import java.util.ArrayList; -import java.util.Scanner; - -public class InputView { - - public static final String inputWord = "숫자를 입력해 주세요 : "; - public static final int BALL_NO = 3; - - public static void print() { - System.out.print(inputWord); - } - - public static ArrayList input(Scanner sc) { - ArrayList list = new ArrayList<>(); - - int number = sc.nextInt(); - String numberStr = Integer.toString(number); - - - // 각 자리를 배열에 넣기 - for (int i = 0; i < BALL_NO; i++) { - int digit = Character.getNumericValue(numberStr.charAt(i)); - list.add(digit); - } - - return list; // 숫자의 각 자리가 담긴 리스트 반환 - } - - -} diff --git a/src/main/java/study/baseballGame/views/ResultView.java b/src/main/java/study/baseballGame/views/ResultView.java deleted file mode 100644 index 1e2aa883d..000000000 --- a/src/main/java/study/baseballGame/views/ResultView.java +++ /dev/null @@ -1,40 +0,0 @@ -package study.baseballGame.views; - -import study.baseballGame.BallStatus; -import study.baseballGame.PlayResult; - -import javax.lang.model.SourceVersion; -import java.util.ArrayList; -import java.util.Scanner; -import java.util.concurrent.atomic.AtomicInteger; - -public class ResultView { - - - private static final String resultWord = "3개의 숫자를 모두 맞히셨습니다! 게임 종료\n" + - "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; - - public static void print() { - System.out.println(resultWord); - } - - public static void print(PlayResult playResult) { - - int ball = playResult.getBall(); - int strike = playResult.getStrike();; - if (ball==0 &&strike==0) { - System.out.print("나띵"); - return; - } - if (ball!=0) { - System.out.print(ball+"볼"); - } - if (strike!=0) { - System.out.print(strike+"스트라이크"); - } - } - - public static int input(Scanner sc) { - return sc.nextInt(); - } -} diff --git a/src/test/java/study/baseballGame/BallTest.java b/src/test/java/study/baseballGame/BallTest.java deleted file mode 100644 index e96d2356d..000000000 --- a/src/test/java/study/baseballGame/BallTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package study.baseballGame; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Arrays; - -import static org.assertj.core.api.Assertions.assertThat; - -public class BallTest { - @DisplayName("공_1개_볼_스트라이크_검증") - @Test - void playTest() { - Ball ball = new Ball(4,1); - ArrayList given = new ArrayList<>(Arrays.asList(4, 1, 3)); - ArrayList given1 = new ArrayList<>(Arrays.asList(2, 3, 4)); - ArrayList given2 = new ArrayList<>(Arrays.asList(3, 9, 5)); - - assertThat(ball.play(given)).isEqualTo(BallStatus.STRIKE); - assertThat(ball.play(given1)).isEqualTo(BallStatus.BALL); - assertThat(ball.play(given2)).isEqualTo(BallStatus.NOTHING); - - } -} diff --git a/src/test/java/study/baseballGame/BallsTest.java b/src/test/java/study/baseballGame/BallsTest.java deleted file mode 100644 index fba13d1b2..000000000 --- a/src/test/java/study/baseballGame/BallsTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package study.baseballGame; - - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Arrays; - -import static org.assertj.core.api.Assertions.assertThat; - -public class BallsTest { - - @DisplayName("공_여러개_볼_스트라이크_테스트") - @Test - void playTest() { - ArrayList userInput = new ArrayList<>(Arrays.asList(4, 1, 3)); // 랜덤 값 - ArrayList randomInput = new ArrayList<>(Arrays.asList(2, 5, 3)); // 랜덤 값 - ArrayList randomInput2 = new ArrayList<>(Arrays.asList(4, 1, 3)); // 랜덤 값 - Balls balls = new Balls(userInput); - assertThat(balls.play(randomInput)).isEqualTo(Arrays.asList(BallStatus.STRIKE)); - assertThat(balls.play(randomInput2)).isEqualTo(Arrays.asList(BallStatus.STRIKE,BallStatus.STRIKE,BallStatus.STRIKE)); - } -} diff --git a/src/test/java/study/baseballGame/RandomNoGenerateTest.java b/src/test/java/study/baseballGame/RandomNoGenerateTest.java deleted file mode 100644 index 7b9a61a80..000000000 --- a/src/test/java/study/baseballGame/RandomNoGenerateTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package study.baseballGame; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import study.baseballGame.utils.Generate; - - -import java.util.ArrayList; -import java.util.Random; - -import static org.assertj.core.api.Assertions.assertThat; -import static study.baseballGame.utils.Generate.insertNo; - -public class RandomNoGenerateTest { - - private Random rand; - - @BeforeEach - void setUp() { - rand = new Random(); - } - - @DisplayName("숫자_입력") - @Test - void insertNoTest() { - int no = 1; - ArrayList list = new ArrayList<>(); - insertNo(no,list); - assertThat(list.size()).isNotEqualTo(0); - } - - @DisplayName("램덤_숫자_생성") - @Test - void randomNoGenerateTest() { - ArrayList randomNo = Generate.generateNumber(rand); - assertThat(randomNo.size()).isEqualTo(3); - assertThat(randomNo.get(0)).isNotEqualTo(randomNo.get(1)); - assertThat(randomNo.get(1)).isNotEqualTo(randomNo.get(2)); - assertThat(randomNo.get(0)).isNotEqualTo(randomNo.get(2)); - } -} diff --git a/src/test/java/study/baseballGame/RandomValidationTest.java b/src/test/java/study/baseballGame/RandomValidationTest.java deleted file mode 100644 index ebfe0bf2e..000000000 --- a/src/test/java/study/baseballGame/RandomValidationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package study.baseballGame; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import study.baseballGame.utils.Validation; - -import static org.assertj.core.api.Assertions.assertThat; - -public class RandomValidationTest { - @DisplayName("랜덤_넘버_테스트") - @Test - void 랜덤_넘버_테스트(){ - assertThat(Validation.randomValidator(9)).isTrue(); - assertThat(Validation.randomValidator(1)).isTrue(); - } -} diff --git a/src/test/java/study/baseballGame/ResultGenerateTest.java b/src/test/java/study/baseballGame/ResultGenerateTest.java deleted file mode 100644 index c2843f041..000000000 --- a/src/test/java/study/baseballGame/ResultGenerateTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package study.baseballGame; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - - -import java.util.ArrayList; -import java.util.Arrays; - -import static org.assertj.core.api.Assertions.assertThat; - -public class ResultGenerateTest { - - @DisplayName("최종_결과_생성_테스트") - @Test - void resultGenerateTest() { - ArrayList tempResult = new ArrayList<>(Arrays.asList(BallStatus.BALL, BallStatus.STRIKE, BallStatus.STRIKE)); - PlayResult playResult = new PlayResult(); - playResult.generateResult(tempResult); - assertThat(playResult.getBall()).isEqualTo(1); - assertThat(playResult.getStrike()).isEqualTo(2); - - } -} diff --git a/src/test/java/study/baseballGame/ResultValidationTest.java b/src/test/java/study/baseballGame/ResultValidationTest.java deleted file mode 100644 index 3974310ec..000000000 --- a/src/test/java/study/baseballGame/ResultValidationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package study.baseballGame; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import study.baseballGame.utils.Validation; - -import java.util.ArrayList; -import java.util.Arrays; - -import static org.assertj.core.api.Assertions.assertThat; - -public class ResultValidationTest { - - @DisplayName("볼-스트라이크 판정") - @Test - void resultValidationTest() { - ArrayList result = new ArrayList<>(Arrays.asList(BallStatus.STRIKE,BallStatus.STRIKE,BallStatus.STRIKE)); - ArrayList result1 = new ArrayList<>(); - ArrayList result2 = new ArrayList<>(Arrays.asList(BallStatus.STRIKE)); - - assertThat(Validation.resultValidation(result)).isTrue(); - assertThat(Validation.resultValidation(result1)).isFalse(); - assertThat(Validation.resultValidation(result2)).isFalse(); - } -}