From 4a47bcb560dba3add34caa01e3d299eb7e6553a3 Mon Sep 17 00:00:00 2001 From: JackJack Date: Sat, 1 Jul 2023 16:59:37 +0900 Subject: [PATCH 01/15] feat(BaseballGame) implement BaseballGame --- README.md | 20 +++++ build.gradle | 2 +- src/main/java/baseball/Application.java | 12 ++- src/main/java/baseball/BaseballGame.java | 105 +++++++++++++++++++++++ 4 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 src/main/java/baseball/BaseballGame.java diff --git a/README.md b/README.md index 04dc4f6ae..e487327c2 100644 --- a/README.md +++ b/README.md @@ -127,3 +127,23 @@ - Random 값 추출은 `camp.nextstep.edu.missionutils.Randoms`의 `pickNumberInRange()`를 활용한다. - 사용자가 입력하는 값은 `camp.nextstep.edu.missionutils.Console`의 `readLine()`을 활용한다. - 프로그램 구현을 완료했을 때 `src/test/java` 디렉터리의 `ApplicationTest`에 있는 모든 테스트 케이스가 성공해야 한다. **테스트가 실패할 경우 0점 처리한다.** + +### 기능구현 + +1. 랜덤 숫자 생성 + -예외처리 + *중복 불가 + *3자리 숫자 + *pickUniqueNumbersInRange() 함수를 이용하여 구현 +2. 유저 숫자 입력 받기 + -예외처리 + *숫자 값 + *중복 불가 + *3자리 숫자 +3. 입력값과 출력값 비교 + -정답(3스트라이크) 시 종료 + -오답 시 스트라이크, 볼, 낫싱 값 출력 +4. 재시작/종료 기능 + -1 입력 시 재시작 + -2 입력 시 종료 + -그 외 값 입력 시 예외처리 diff --git a/build.gradle b/build.gradle index 12ae76bcd..9989a1fc7 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ dependencies { java { toolchain { - languageVersion = JavaLanguageVersion.of(14) + languageVersion = JavaLanguageVersion.of(11) } } diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 7f1901b8b..5c3dc176e 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,17 @@ package baseball; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.List; + public class Application { public static void main(String[] args) { - //TODO: 숫자 야구 게임 구현 + + BaseballGame game = new BaseballGame(); + game.run(); + } + } diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java new file mode 100644 index 000000000..d72b1f969 --- /dev/null +++ b/src/main/java/baseball/BaseballGame.java @@ -0,0 +1,105 @@ +package baseball; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +public class BaseballGame { + private String userNumber = ""; + public void run(){ + while(true) { + playGame(); + + if(questRestartGame()){ + continue; + } + break; + } + } + + private void playGame(){ + ArrayList randomNumber = new ArrayList(); + createRandomNumber(randomNumber); + countCalculate(randomNumber); + } + private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫자 받기 + + while(randomNumber.size() < 3){ //중복 불가 3자리 수 + int tmp = Randoms.pickNumberInRange(1, 9); + + if(!randomNumber.contains(tmp)){ + randomNumber.add(tmp); + } + } + } + + private void giveUserNumber(){ //유저 숫자 받기 + System.out.print("숫자를 입력해 주세요 : "); + userNumber = Console.readLine(); + + if(userNumber.length() != 3){ //입력 받은 숫자가 3자리가 아닐경우 예외처리 + throw new IllegalArgumentException(); + } + + for(int i=0; i<3; i++){ //입력 받은 값이 숫자 이외의 값인 경우 에외처리 + if(!Character.isDigit(userNumber.charAt(i))){ + throw new IllegalArgumentException(); + } + } + + Set set = new HashSet(); //입력 받은 숫자가 중복된 경우 예외처리 + for(int i=0; i<3; i++){ + set.add(userNumber.charAt(i)); + } + if(!(set.size() == 3)){ + throw new IllegalArgumentException(); + } + } + + private void countCalculate(ArrayList randomNumber){ + while(true) { + giveUserNumber(); + + int ballCount = 0; + int strikeCount = 0; + + for (int i=0; i<3; i++) { + int tmp = userNumber.charAt(i) - '0'; + + if (randomNumber.indexOf(tmp) == i) { + strikeCount++; + } + if (randomNumber.contains(tmp)) { + ballCount++; + } + } + + if (strikeCount == 3) { + System.out.println("3스트라이크"); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + break; + } else if (strikeCount == 0 && ballCount == 0) { + System.out.println("낫싱"); + continue; + } + System.out.println((ballCount-strikeCount) + "볼 " + strikeCount + "스트라이크"); + } + } + + private boolean questRestartGame(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String cmd = Console.readLine(); + + if(!cmd.equals(1) && !cmd.equals(2)){ + throw new IllegalArgumentException(); + } + + if(cmd.equals("1")){ + return true; + } + return false; + } + +} From a5cee28240bd28137ecb8045911590c2d6940035 Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 17:44:16 +0900 Subject: [PATCH 02/15] feat(Message) add Enum --- src/main/java/baseball/Message.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/baseball/Message.java diff --git a/src/main/java/baseball/Message.java b/src/main/java/baseball/Message.java new file mode 100644 index 000000000..8946aa81b --- /dev/null +++ b/src/main/java/baseball/Message.java @@ -0,0 +1,2 @@ +package baseball;public enum Message { +} From a59afb6d424ed76e5128ae373edf8b01fe0e6a7f Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 17:45:36 +0900 Subject: [PATCH 03/15] feat(Message) add Enum --- README.md | 129 ----------------------- src/main/java/baseball/BaseballGame.java | 4 - src/main/java/baseball/Message.java | 15 ++- 3 files changed, 14 insertions(+), 134 deletions(-) diff --git a/README.md b/README.md index e487327c2..9d7920032 100644 --- a/README.md +++ b/README.md @@ -1,132 +1,3 @@ -# 과제 - 숫자 야구 게임 - -## 🔍 진행 방식 - -- 과제는 **기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항** 세 가지로 구성되어 있다. -- 세 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다. -- 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다. - ---- - -## 📈 과제 진행 및 제출 방법 - -- 과제는 [java-baseball](https://github.com/LandvibeDev/java-baseball) 저장소를 Fork/Clone해 시작한다. -- **기능을 구현하기 전에 java-baseball-precourse/README.md 파일에 구현할 기능 목록을 정리**해 추가한다. -- **Git의 커밋 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위**로 추가한다. - - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 참고해 commit log를 남긴다. -- 과제 진행 및 제출 방법은 [우아한코스 과제 제출 문서](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 를 참고한다. - - base repository를 `LandvibeDev/java-baseball`로 지정해서 PR 생성하면됨 - -
- -### 테스트 실행 가이드 - -- 터미널에서 `java -version`을 실행하여 Java 버전이 14인지 확인한다. 또는 Eclipse 또는 IntelliJ IDEA와 같은 IDE에서 Java 14로 실행되는지 확인한다. -- 터미널에서 Mac 또는 Linux 사용자의 경우 `./gradlew clean test` 명령을 실행 하고, - Windows 사용자의 경우 `gradlew.bat clean test` 명령을 실행할 때 동작 하는지 만 확인(테스트는 실패). - ---- - -## 🚀 기능 요구사항 - -기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. - -- 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. - - 예) 상대방(컴퓨터)의 수가 425일 때 - - 123을 제시한 경우 : 1스트라이크 - - 456을 제시한 경우 : 1볼 1스트라이크 - - 789를 제시한 경우 : 낫싱 -- 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. -- 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. -- 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. -- 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시킨 후 애플리케이션은 종료되어야 한다. -- 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다. - -
- -## ✍🏻 입출력 요구사항 - -### ⌨️ 입력 - -- 3자리의 수 -- 게임이 끝난 경우 재시작/종료를 구분하는 1과 2 중 하나의 수 - -### 🖥 출력 - -- 입력한 수에 대한 결과를 볼, 스트라이크 개수로 표시 - -``` -1볼 1스트라이크 -``` - -- 하나도 없는 경우 - -``` -낫싱 -``` - -- 3개의 숫자를 모두 맞힐 경우 - -``` -3스트라이크 -3개의 숫자를 모두 맞히셨습니다! 게임 종료 -``` - -### 💻 실행 결과 예시 - -``` -숫자를 입력해주세요 : 123 -1볼 1스트라이크 -숫자를 입력해주세요 : 145 -1볼 -숫자를 입력해주세요 : 671 -2볼 -숫자를 입력해주세요 : 216 -1스트라이크 -숫자를 입력해주세요 : 713 -3스트라이크 -3개의 숫자를 모두 맞히셨습니다! 게임 종료 -게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요. -1 -숫자를 입력해주세요 : 123 -1볼 -… -``` - -
- ---- - -## 🎱 프로그래밍 요구사항 -- -- JDK 14 버전에서 실행 가능해야 한다. -- 프로그램을 실행하는 시작점은 `Application`의 `main()`이다. -- `build.gradle` 파일을 변경할 수 없고, 외부 라이브러리를 사용하지 않는다. -- [Java 코드 컨벤션](https://naver.github.io/hackday-conventions-java) 가이드를 준수하며 프로그래밍한다. -- 프로그램 종료 시 `System.exit()`를 호출하지 않는다. -- 프로그램 구현이 완료되면 `ApplicationTest`의 모든 테스트가 성공해야 한다. -- 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 이름을 수정하거나 이동하지 않는다. -- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. - - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. - - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. -- 3항 연산자를 쓰지 않는다. -- 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라. -- JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다. -- 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다. - - 함수(또는 메서드)가 한 가지 일만 잘 하도록 구현한다. -- else 예약어를 쓰지 않는다. - - 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다. - - else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. -- Java Enum을 적용한다. -- 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. - - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. - -### 라이브러리 - Randoms, Console - -- JDK에서 기본 제공하는 Random, Scanner API 대신 [`camp.nextstep.edu.missionutils`](https://github.com/woowacourse-projects/mission-utils)에서 제공하는 `Randoms`, `Console` API를 활용해 구현해야 한다. - - Random 값 추출은 `camp.nextstep.edu.missionutils.Randoms`의 `pickNumberInRange()`를 활용한다. - - 사용자가 입력하는 값은 `camp.nextstep.edu.missionutils.Console`의 `readLine()`을 활용한다. -- 프로그램 구현을 완료했을 때 `src/test/java` 디렉터리의 `ApplicationTest`에 있는 모든 테스트 케이스가 성공해야 한다. **테스트가 실패할 경우 0점 처리한다.** ### 기능구현 diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index d72b1f969..dc7bb3bee 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -92,10 +92,6 @@ private boolean questRestartGame(){ System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String cmd = Console.readLine(); - if(!cmd.equals(1) && !cmd.equals(2)){ - throw new IllegalArgumentException(); - } - if(cmd.equals("1")){ return true; } diff --git a/src/main/java/baseball/Message.java b/src/main/java/baseball/Message.java index 8946aa81b..178f9cf74 100644 --- a/src/main/java/baseball/Message.java +++ b/src/main/java/baseball/Message.java @@ -1,2 +1,15 @@ -package baseball;public enum Message { +package baseball; + +public enum Message { + INPUT_USERNUMBER_MESSAGE("숫자를 입력해 주세요 : "), + STRIKE_MESSAGE("스트라이크"), + BALL_MESSAGE("볼 "), + NOTHING_MESSAGE("낫싱"), + RESTART_QUESTION_MESSAGE("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") + ; + + private String message; + Message(String message) { + this.message = message; + } } From c19d34fe4663cd24aa06e6e33f3ae9e1e105a520 Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 21:11:03 +0900 Subject: [PATCH 04/15] style(BaseballGame) apply Message Enum --- src/main/java/baseball/BaseballGame.java | 13 +++++++------ src/main/java/baseball/Message.java | 9 ++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index dc7bb3bee..7e5a9af63 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -22,6 +22,7 @@ public void run(){ private void playGame(){ ArrayList randomNumber = new ArrayList(); createRandomNumber(randomNumber); + System.out.println(randomNumber); countCalculate(randomNumber); } private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫자 받기 @@ -36,7 +37,7 @@ private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫 } private void giveUserNumber(){ //유저 숫자 받기 - System.out.print("숫자를 입력해 주세요 : "); + System.out.print(Message.INPUT_USERNUMBER_MESSAGE.getMessage()); userNumber = Console.readLine(); if(userNumber.length() != 3){ //입력 받은 숫자가 3자리가 아닐경우 예외처리 @@ -77,19 +78,19 @@ private void countCalculate(ArrayList randomNumber){ } if (strikeCount == 3) { - System.out.println("3스트라이크"); - System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println(strikeCount + Message.STRIKE_MESSAGE.getMessage()); + System.out.println(Message.CORRECT_MESSAGE.getMessage()); break; } else if (strikeCount == 0 && ballCount == 0) { - System.out.println("낫싱"); + System.out.println(Message.NOTHING_MESSAGE.getMessage()); continue; } - System.out.println((ballCount-strikeCount) + "볼 " + strikeCount + "스트라이크"); + System.out.println((ballCount-strikeCount) + Message.BALL_MESSAGE.getMessage() + strikeCount + Message.STRIKE_MESSAGE.getMessage()); } } private boolean questRestartGame(){ - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + System.out.println(Message.RESTART_QUESTION_MESSAGE.getMessage()); String cmd = Console.readLine(); if(cmd.equals("1")){ diff --git a/src/main/java/baseball/Message.java b/src/main/java/baseball/Message.java index 178f9cf74..2eb477205 100644 --- a/src/main/java/baseball/Message.java +++ b/src/main/java/baseball/Message.java @@ -5,11 +5,18 @@ public enum Message { STRIKE_MESSAGE("스트라이크"), BALL_MESSAGE("볼 "), NOTHING_MESSAGE("낫싱"), + CORRECT_MESSAGE("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), RESTART_QUESTION_MESSAGE("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") ; - private String message; + + private final String message; Message(String message) { this.message = message; } + + public String getMessage(){ + return message; + } + } From c05fc618cde2b20f6178261af26915a28d18aaba Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 21:37:44 +0900 Subject: [PATCH 05/15] feat(NumberInfo) add NumberInfo Enum --- src/main/java/baseball/Application.java | 6 ------ src/main/java/baseball/BaseballGame.java | 3 +-- src/main/java/baseball/NumberInfo.java | 19 +++++++++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 src/main/java/baseball/NumberInfo.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 5c3dc176e..d4ebf8f3a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,10 +1,4 @@ package baseball; -import camp.nextstep.edu.missionutils.Randoms; -import camp.nextstep.edu.missionutils.Console; - -import java.util.ArrayList; -import java.util.List; - public class Application { public static void main(String[] args) { diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 7e5a9af63..4686e1972 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -7,7 +7,7 @@ import java.util.Set; public class BaseballGame { - private String userNumber = ""; + private String userNumber; public void run(){ while(true) { playGame(); @@ -22,7 +22,6 @@ public void run(){ private void playGame(){ ArrayList randomNumber = new ArrayList(); createRandomNumber(randomNumber); - System.out.println(randomNumber); countCalculate(randomNumber); } private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫자 받기 diff --git a/src/main/java/baseball/NumberInfo.java b/src/main/java/baseball/NumberInfo.java new file mode 100644 index 000000000..6b31352c4 --- /dev/null +++ b/src/main/java/baseball/NumberInfo.java @@ -0,0 +1,19 @@ +package baseball; + +public enum NumberInfo { + SIZE_OF_NUMBER(3), + START_OF_RANGE(1), + END_OF_RANGE(9), + RESTART_TRUE_NUMBER(1), + RESTART_FALSE_NUMBER(2); + + + private final int numberInfo; + NumberInfo(int numberInfo) { + this.numberInfo = numberInfo; + } + + public int getNumberInfo(){ + return numberInfo; + } +} From 9b9cad63a39f3606c082bcebe627211142d139b2 Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 21:46:39 +0900 Subject: [PATCH 06/15] style(BaseballGamr) apply NumberInfo --- src/main/java/baseball/BaseballGame.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 4686e1972..a62fd3faf 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -26,8 +26,8 @@ private void playGame(){ } private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫자 받기 - while(randomNumber.size() < 3){ //중복 불가 3자리 수 - int tmp = Randoms.pickNumberInRange(1, 9); + while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ //중복 불가 3자리 수 + int tmp = Randoms.pickNumberInRange(NumberInfo.START_OF_RANGE.getNumberInfo(), NumberInfo.END_OF_RANGE.getNumberInfo()); if(!randomNumber.contains(tmp)){ randomNumber.add(tmp); @@ -39,7 +39,7 @@ private void giveUserNumber(){ //유저 숫자 받기 System.out.print(Message.INPUT_USERNUMBER_MESSAGE.getMessage()); userNumber = Console.readLine(); - if(userNumber.length() != 3){ //입력 받은 숫자가 3자리가 아닐경우 예외처리 + if(userNumber.length() != NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ //입력 받은 숫자가 3자리가 아닐경우 예외처리 throw new IllegalArgumentException(); } @@ -53,7 +53,7 @@ private void giveUserNumber(){ //유저 숫자 받기 for(int i=0; i<3; i++){ set.add(userNumber.charAt(i)); } - if(!(set.size() == 3)){ + if(!(set.size() == NumberInfo.SIZE_OF_NUMBER.getNumberInfo())){ throw new IllegalArgumentException(); } } @@ -65,7 +65,7 @@ private void countCalculate(ArrayList randomNumber){ int ballCount = 0; int strikeCount = 0; - for (int i=0; i<3; i++) { + for (int i=0; i randomNumber){ } } - if (strikeCount == 3) { + if (strikeCount == NumberInfo.SIZE_OF_NUMBER.getNumberInfo()) { System.out.println(strikeCount + Message.STRIKE_MESSAGE.getMessage()); System.out.println(Message.CORRECT_MESSAGE.getMessage()); break; @@ -91,8 +91,9 @@ private void countCalculate(ArrayList randomNumber){ private boolean questRestartGame(){ System.out.println(Message.RESTART_QUESTION_MESSAGE.getMessage()); String cmd = Console.readLine(); + int restart = Integer.parseInt(cmd); - if(cmd.equals("1")){ + if(restart == NumberInfo.RESTART_TRUE_NUMBER.getNumberInfo()){ return true; } return false; From b2fa8a6b3082af537271cf8d858397a7be8c85f2 Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 21:52:54 +0900 Subject: [PATCH 07/15] style(BaseballGame) apply NumberInfo Enum to remains git status --- src/main/java/baseball/BaseballGame.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index a62fd3faf..5891820b2 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -43,14 +43,14 @@ private void giveUserNumber(){ //유저 숫자 받기 throw new IllegalArgumentException(); } - for(int i=0; i<3; i++){ //입력 받은 값이 숫자 이외의 값인 경우 에외처리 + for(int i=0; i set = new HashSet(); //입력 받은 숫자가 중복된 경우 예외처리 - for(int i=0; i<3; i++){ + for(int i=0; i Date: Sat, 1 Jul 2023 23:13:04 +0900 Subject: [PATCH 08/15] feat(ExeptionController) add ExeptionController and apply to giveUserNumber --- src/main/java/baseball/BaseballGame.java | 27 ++++---------- .../java/baseball/ExceptionContoller.java | 37 +++++++++++++++++++ 2 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 src/main/java/baseball/ExceptionContoller.java diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 5891820b2..cb3677803 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -3,11 +3,10 @@ import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; public class BaseballGame { private String userNumber; + ExceptionContoller exeptionContol = new ExceptionContoller(); public void run(){ while(true) { playGame(); @@ -24,9 +23,9 @@ private void playGame(){ createRandomNumber(randomNumber); countCalculate(randomNumber); } - private void createRandomNumber(ArrayList randomNumber){ //랜덤 숫자 받기 + private void createRandomNumber(ArrayList randomNumber){ - while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ //중복 불가 3자리 수 + while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ int tmp = Randoms.pickNumberInRange(NumberInfo.START_OF_RANGE.getNumberInfo(), NumberInfo.END_OF_RANGE.getNumberInfo()); if(!randomNumber.contains(tmp)){ @@ -39,23 +38,11 @@ private void giveUserNumber(){ //유저 숫자 받기 System.out.print(Message.INPUT_USERNUMBER_MESSAGE.getMessage()); userNumber = Console.readLine(); - if(userNumber.length() != NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ //입력 받은 숫자가 3자리가 아닐경우 예외처리 - throw new IllegalArgumentException(); - } - - for(int i=0; i set = new HashSet(); //입력 받은 숫자가 중복된 경우 예외처리 - for(int i=0; i randomNumber){ diff --git a/src/main/java/baseball/ExceptionContoller.java b/src/main/java/baseball/ExceptionContoller.java new file mode 100644 index 000000000..458abd384 --- /dev/null +++ b/src/main/java/baseball/ExceptionContoller.java @@ -0,0 +1,37 @@ +package baseball; + +import java.util.HashSet; +import java.util.Set; + +public class ExceptionContoller { + public void notIntegerException(String Number){ //정수 이외 값 불가 + for(int i=0; i set = new HashSet(); + for(int i=0; i Date: Sat, 1 Jul 2023 23:28:16 +0900 Subject: [PATCH 09/15] feat(BaseballGame) add Exception to questRestartGame --- src/main/java/baseball/BaseballGame.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index cb3677803..dac1500ad 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -83,7 +83,11 @@ private boolean questRestartGame(){ if(restart == NumberInfo.RESTART_TRUE_NUMBER.getNumberInfo()){ return true; } - return false; + else if(restart == NumberInfo.RESTART_FALSE_NUMBER.getNumberInfo()){ + return false; + } + + throw new IllegalArgumentException(); } } From c2045f9f457348d97291a9b593cd584112eab768 Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sat, 1 Jul 2023 23:31:56 +0900 Subject: [PATCH 10/15] rename(BaseballGame) queskRestartGame into askRestartGame --- src/main/java/baseball/BaseballGame.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index dac1500ad..ff2c24849 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -11,7 +11,7 @@ public void run(){ while(true) { playGame(); - if(questRestartGame()){ + if(askRestartGame()){ continue; } break; @@ -75,7 +75,7 @@ private void countCalculate(ArrayList randomNumber){ } } - private boolean questRestartGame(){ + private boolean askRestartGame(){ System.out.println(Message.RESTART_QUESTION_MESSAGE.getMessage()); String cmd = Console.readLine(); int restart = Integer.parseInt(cmd); From a480640ddd32c720695717cf408ea0766519ce7d Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Sun, 2 Jul 2023 00:07:35 +0900 Subject: [PATCH 11/15] Refactor(BaseballGame) add ComputerFunction class and UserFuntion to split each funtion --- src/main/java/baseball/BaseballGame.java | 62 ++------------------ src/main/java/baseball/ComputerFunction.java | 45 ++++++++++++++ src/main/java/baseball/UserFunction.java | 18 ++++++ 3 files changed, 67 insertions(+), 58 deletions(-) create mode 100644 src/main/java/baseball/ComputerFunction.java create mode 100644 src/main/java/baseball/UserFunction.java diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index ff2c24849..7225a4927 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -1,12 +1,9 @@ package baseball; -import camp.nextstep.edu.missionutils.Randoms; import camp.nextstep.edu.missionutils.Console; - import java.util.ArrayList; public class BaseballGame { - private String userNumber; - ExceptionContoller exeptionContol = new ExceptionContoller(); + ComputerFunction computerFunction = new ComputerFunction(); public void run(){ while(true) { playGame(); @@ -19,60 +16,9 @@ public void run(){ } private void playGame(){ - ArrayList randomNumber = new ArrayList(); - createRandomNumber(randomNumber); - countCalculate(randomNumber); - } - private void createRandomNumber(ArrayList randomNumber){ - - while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ - int tmp = Randoms.pickNumberInRange(NumberInfo.START_OF_RANGE.getNumberInfo(), NumberInfo.END_OF_RANGE.getNumberInfo()); - - if(!randomNumber.contains(tmp)){ - randomNumber.add(tmp); - } - } - } - - private void giveUserNumber(){ //유저 숫자 받기 - System.out.print(Message.INPUT_USERNUMBER_MESSAGE.getMessage()); - userNumber = Console.readLine(); - - exeptionContol.notIntegerException(userNumber); - exeptionContol.notThreeDigitException(userNumber); - exeptionContol.reduplicationException(userNumber); - exeptionContol.zeroValueException(userNumber); - - } - - private void countCalculate(ArrayList randomNumber){ - while(true) { - giveUserNumber(); - - int ballCount = 0; - int strikeCount = 0; - - for (int i=0; i randomNumberlist = new ArrayList(); + computerFunction.createRandomNumber(randomNumberlist); + computerFunction.countCalculate(randomNumberlist); } private boolean askRestartGame(){ diff --git a/src/main/java/baseball/ComputerFunction.java b/src/main/java/baseball/ComputerFunction.java new file mode 100644 index 000000000..8ed647335 --- /dev/null +++ b/src/main/java/baseball/ComputerFunction.java @@ -0,0 +1,45 @@ +package baseball; +import camp.nextstep.edu.missionutils.Randoms; +import java.util.ArrayList; + +public class ComputerFunction { + UserFunction userFunction = new UserFunction(); + public void createRandomNumber(ArrayList randomNumber){ + while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ + int tmp = Randoms.pickNumberInRange(NumberInfo.START_OF_RANGE.getNumberInfo(), NumberInfo.END_OF_RANGE.getNumberInfo()); + + if(!randomNumber.contains(tmp)){ + randomNumber.add(tmp); + } + } + } + public void countCalculate(ArrayList randomNumber){ + while(true) { + String userNumber = userFunction.getUserNumber(); + + int ballCount = 0; + int strikeCount = 0; + + for (int i=0; i Date: Mon, 3 Jul 2023 18:08:14 +0900 Subject: [PATCH 12/15] style(BaseballGame) apply 'static import' and change askRestartGame() function --- src/main/java/baseball/BaseballGame.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 7225a4927..8f4bc01c2 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -1,7 +1,8 @@ package baseball; import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; - +import static baseball.NumberInfo.*; +import static baseball.Message.*; public class BaseballGame { ComputerFunction computerFunction = new ComputerFunction(); public void run(){ @@ -22,14 +23,14 @@ private void playGame(){ } private boolean askRestartGame(){ - System.out.println(Message.RESTART_QUESTION_MESSAGE.getMessage()); + System.out.println(RESTART_QUESTION_MESSAGE.getMessage()); String cmd = Console.readLine(); int restart = Integer.parseInt(cmd); - if(restart == NumberInfo.RESTART_TRUE_NUMBER.getNumberInfo()){ + if(restart == RESTART_TRUE_NUMBER.getNumberInfo()){ return true; } - else if(restart == NumberInfo.RESTART_FALSE_NUMBER.getNumberInfo()){ + if(restart == RESTART_FALSE_NUMBER.getNumberInfo()){ return false; } From 8ee8d9bea93d394b8bc4067a090bbbd1b0bca66a Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Mon, 3 Jul 2023 19:19:25 +0900 Subject: [PATCH 13/15] style(ComputerFunction) apply 'static import' Enum classes --- src/main/java/baseball/ComputerFunction.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/baseball/ComputerFunction.java b/src/main/java/baseball/ComputerFunction.java index 8ed647335..45ec28b28 100644 --- a/src/main/java/baseball/ComputerFunction.java +++ b/src/main/java/baseball/ComputerFunction.java @@ -1,12 +1,14 @@ package baseball; import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; +import static baseball.NumberInfo.*; +import static baseball.Message.*; public class ComputerFunction { UserFunction userFunction = new UserFunction(); public void createRandomNumber(ArrayList randomNumber){ - while(randomNumber.size() < NumberInfo.SIZE_OF_NUMBER.getNumberInfo()){ - int tmp = Randoms.pickNumberInRange(NumberInfo.START_OF_RANGE.getNumberInfo(), NumberInfo.END_OF_RANGE.getNumberInfo()); + while(randomNumber.size() < SIZE_OF_NUMBER.getNumberInfo()){ + int tmp = Randoms.pickNumberInRange(START_OF_RANGE.getNumberInfo(), END_OF_RANGE.getNumberInfo()); if(!randomNumber.contains(tmp)){ randomNumber.add(tmp); @@ -20,7 +22,7 @@ public void countCalculate(ArrayList randomNumber){ int ballCount = 0; int strikeCount = 0; - for (int i=0; i randomNumber){ } } - if (strikeCount == NumberInfo.SIZE_OF_NUMBER.getNumberInfo()) { - System.out.println(strikeCount + Message.STRIKE_MESSAGE.getMessage()); - System.out.println(Message.CORRECT_MESSAGE.getMessage()); + if (strikeCount == SIZE_OF_NUMBER.getNumberInfo()) { + System.out.println(strikeCount + STRIKE_MESSAGE.getMessage()); + System.out.println(CORRECT_MESSAGE.getMessage()); break; } else if (strikeCount == 0 && ballCount == 0) { - System.out.println(Message.NOTHING_MESSAGE.getMessage()); + System.out.println(NOTHING_MESSAGE.getMessage()); continue; } - System.out.println((ballCount-strikeCount) + Message.BALL_MESSAGE.getMessage() + strikeCount + Message.STRIKE_MESSAGE.getMessage()); + System.out.println((ballCount-strikeCount) + BALL_MESSAGE.getMessage() + + strikeCount + STRIKE_MESSAGE.getMessage()); } } } From 61d1fbc85f96f7e943a888f3d4135f2addab251a Mon Sep 17 00:00:00 2001 From: sheepysnoopy Date: Mon, 3 Jul 2023 19:47:50 +0900 Subject: [PATCH 14/15] ref(ComputerFunction) delete createRandomNumber parameter --- src/main/java/baseball/BaseballGame.java | 7 ++++--- src/main/java/baseball/ComputerFunction.java | 12 ++++++++++-- src/main/java/baseball/ExceptionContoller.java | 2 ++ src/main/java/baseball/UserFunction.java | 1 + 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 8f4bc01c2..48e2c6986 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -1,10 +1,13 @@ package baseball; import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; +import java.util.List; + import static baseball.NumberInfo.*; import static baseball.Message.*; public class BaseballGame { ComputerFunction computerFunction = new ComputerFunction(); + public void run(){ while(true) { playGame(); @@ -17,8 +20,7 @@ public void run(){ } private void playGame(){ - ArrayList randomNumberlist = new ArrayList(); - computerFunction.createRandomNumber(randomNumberlist); + List randomNumberlist = computerFunction.createRandomNumber(); computerFunction.countCalculate(randomNumberlist); } @@ -36,5 +38,4 @@ private boolean askRestartGame(){ throw new IllegalArgumentException(); } - } diff --git a/src/main/java/baseball/ComputerFunction.java b/src/main/java/baseball/ComputerFunction.java index 45ec28b28..29ac58b1d 100644 --- a/src/main/java/baseball/ComputerFunction.java +++ b/src/main/java/baseball/ComputerFunction.java @@ -1,12 +1,17 @@ package baseball; import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; +import java.util.List; + import static baseball.NumberInfo.*; import static baseball.Message.*; public class ComputerFunction { UserFunction userFunction = new UserFunction(); - public void createRandomNumber(ArrayList randomNumber){ + + public List createRandomNumber(){ + List randomNumber = new ArrayList<>(); + while(randomNumber.size() < SIZE_OF_NUMBER.getNumberInfo()){ int tmp = Randoms.pickNumberInRange(START_OF_RANGE.getNumberInfo(), END_OF_RANGE.getNumberInfo()); @@ -14,8 +19,11 @@ public void createRandomNumber(ArrayList randomNumber){ randomNumber.add(tmp); } } + + return randomNumber; } - public void countCalculate(ArrayList randomNumber){ + + public void countCalculate(List randomNumber){ while(true) { String userNumber = userFunction.getUserNumber(); diff --git a/src/main/java/baseball/ExceptionContoller.java b/src/main/java/baseball/ExceptionContoller.java index 458abd384..f88f243b1 100644 --- a/src/main/java/baseball/ExceptionContoller.java +++ b/src/main/java/baseball/ExceptionContoller.java @@ -4,6 +4,7 @@ import java.util.Set; public class ExceptionContoller { + public void notIntegerException(String Number){ //정수 이외 값 불가 for(int i=0; i set = new HashSet(); for(int i=0; i Date: Wed, 5 Jul 2023 15:31:15 +0900 Subject: [PATCH 15/15] style ... --- src/main/java/baseball/BaseballGame.java | 1 - src/main/java/baseball/ExceptionContoller.java | 13 ++++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/baseball/BaseballGame.java b/src/main/java/baseball/BaseballGame.java index 48e2c6986..0c969996a 100644 --- a/src/main/java/baseball/BaseballGame.java +++ b/src/main/java/baseball/BaseballGame.java @@ -1,6 +1,5 @@ package baseball; import camp.nextstep.edu.missionutils.Console; -import java.util.ArrayList; import java.util.List; import static baseball.NumberInfo.*; diff --git a/src/main/java/baseball/ExceptionContoller.java b/src/main/java/baseball/ExceptionContoller.java index f88f243b1..3c5b2361c 100644 --- a/src/main/java/baseball/ExceptionContoller.java +++ b/src/main/java/baseball/ExceptionContoller.java @@ -1,20 +1,19 @@ package baseball; - import java.util.HashSet; import java.util.Set; public class ExceptionContoller { - public void notIntegerException(String Number){ //정수 이외 값 불가 - for(int i=0; i set = new HashSet(); + public void reduplicationException(String Number){ + Set set = new HashSet<>(); for(int i=0; i