From 3847820f359b23f51f9cca422450c9157cebf423 Mon Sep 17 00:00:00 2001 From: oh-yeonzzz <148875041+oh-yeonzzz@users.noreply.github.com> Date: Wed, 25 Oct 2023 00:44:21 +0900 Subject: [PATCH 01/10] =?UTF-8?q?docs=20:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기능 목록 단위로 구현할 계획 --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 1bee39036..1100f949c 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,34 @@
+## 👀 기능 목록 +<숫자 생성> +1. 숫자 랜덤 생성(1~9 범위의 3자리 자연수) +2. 각 자리 숫자는 중복 허용 XX + +<입력> +1.[예외] 숫자가 아닌 값을 입력받은 경우 +2.[예외] 3자리 자연수 아닌 경우 +3.[예외] 각 자릿수의 숫자중 중복된 값이 있는 경우 +4. [예외] 0 이하 음수인 경우 +5. [예외] IllegalArgumentException 발생 시킨 후 종료 + +<힌트> +1. 같은 자릿수에 숫자 일치 : 스트라이크 +2. 다른 자릿수에 숫자 일치 : 볼 +3. 다른 자릿수에 다른 수 : 낫싱 + +<출력> +1. 볼, 스트라이크 카운트 후 출력 +2. 출력 순서: n볼 m스트라이크 +3. m=3일 때(3 스트라이크) 게임 종료 문구 출력 + +<종료조건> +1. 재시작 - 숫자 랜덤 생성 메서드 호출부분으로 돌아감 +2. 입력 종료 - 게임 종료! + +
+ ## ✍🏻 입출력 요구사항 ### ⌨️ 입력 From 227136078f8774a09e34bf2cdf4521ec6f9145ac Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:34:11 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat=20:=20Computer(=EC=83=81=EB=8C=80)?= =?UTF-8?q?=20=EB=82=9C=EC=88=98=20=EC=83=9D=EC=84=B1=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=201~9=203=EC=9E=90=EB=A6=BF=EC=88=98=20=EC=9E=90=EC=97=B0?= =?UTF-8?q?=EC=88=98=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/ComputerRandomNum.java | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/service/ComputerRandomNum.java diff --git a/src/main/java/service/ComputerRandomNum.java b/src/main/java/service/ComputerRandomNum.java new file mode 100644 index 000000000..33bf3ef21 --- /dev/null +++ b/src/main/java/service/ComputerRandomNum.java @@ -0,0 +1,35 @@ +package service; + +import java.util.List; +import java.util.ArrayList; +import camp.nextstep.edu.missionutils.Randoms; + +public class ComputerRandomNum { + + private List computerNumber; + + public ComputerRandomNum() { + computerNumber = setGameNumber(); + } + + public List getComputerNumber() { + return computerNumber; + } + public static int getComputerNum() { + return Randoms.pickNumberInRange(1, 9); + } + + public List setGameNumber() { + List computerNumber = new ArrayList<>(); + while (computerNumber.size() < 3) { + int randomNumber = getComputerNum(); + if(computerNumber.contains(randomNumber)){ + continue; + }else { + computerNumber.add(randomNumber); + } + } + return computerNumber; + } + +} From 1d77e35b36a0c5b1e2b66265bb5d25be0bf358bb Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:43:38 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=97=90=EA=B2=8C=20=EC=88=AB=EC=9E=90=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(=EA=B0=81=20=EC=9E=90=EB=A6=AC=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=ED=97=88=EC=9A=A9=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/util/InputUtil.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/util/InputUtil.java diff --git a/src/main/java/util/InputUtil.java b/src/main/java/util/InputUtil.java new file mode 100644 index 000000000..0a10eba7c --- /dev/null +++ b/src/main/java/util/InputUtil.java @@ -0,0 +1,31 @@ +package util; + +import java.util.List; +import java.util.ArrayList; +import camp.nextstep.edu.missionutils.Console; + +public class InputUtil { + + public List userNumber() { + System.out.print("숫자를 입력해주세요 : "); + String input = Console.readLine(); + // 예외 처리 메서드 만들기.... + + List userNum = new ArrayList<>(); + for(String number: input.split("")){ + userNum.add(Integer.parseInt(number)); + } + return userNum; + } + + public boolean replay(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String input = Console.readLine(); + char answer = input.charAt(0); + if(answer == '1'){ + return true; + } + return false; + } + +} From ee2938fa4abf19699ca1e5ec434ef8da7c676d51 Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:44:25 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=97=90=EA=B2=8C=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/util/InputException.java | 50 ++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/util/InputException.java diff --git a/src/main/java/util/InputException.java b/src/main/java/util/InputException.java new file mode 100644 index 000000000..10427ff6c --- /dev/null +++ b/src/main/java/util/InputException.java @@ -0,0 +1,50 @@ +package util; + +import java.util.HashSet; +import java.util.Set; + +public class InputException { + private String inputNumber; + + public InputException(String inputNumber) { + + isStringLengthCorrect(inputNumber); + isDigitPlayerNumber(inputNumber); + isDifferentPlayerNumber(inputNumber); + + this.inputNumber = inputNumber; + } + + public String getInputNumber() { + return inputNumber; + } + + public static void isStringLengthCorrect(String word) throws IllegalArgumentException { + if (word.length() != 3) { + throw new IllegalArgumentException("잘못된 값을 입력하셨습니다. "); + } + } + + + public static void isDifferentPlayerNumber(String word) throws IllegalArgumentException { + Set set = new HashSet<>(); + + for (int i = 0; i < word.length(); i++) { + set.add(word.charAt(i)); + } + if (set.size() != word.length()) { + throw new IllegalArgumentException("잘못된 값을 입력하셨습니다."); + } + } + public static void isDigitPlayerNumber(String word) { + for (int i = 0; i < word.length(); i++) { + isDigitCharInString(word, i); + } + } + + public static void isDigitCharInString(String word, int index) throws IllegalArgumentException { + if (!Character.isDigit(word.charAt(index))) { + throw new IllegalArgumentException("잘못된 값을 입력하셨습니다."); + } + } +} From 2baf1bb8e378d8f368ab86d73efb8c04fbab7e2a Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:45:41 +0900 Subject: [PATCH 05/10] =?UTF-8?q?feat=20:=20=EC=8A=A4=ED=8A=B8=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=81=AC,=EB=B3=BC,=EB=82=AB=EC=8B=B1=20=ED=8C=90?= =?UTF-8?q?=EB=B3=84=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9D=BC=EC=B9=98=EC=97=AC=EB=B6=80=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/CompareNum.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/service/CompareNum.java diff --git a/src/main/java/service/CompareNum.java b/src/main/java/service/CompareNum.java new file mode 100644 index 000000000..6f43ceccb --- /dev/null +++ b/src/main/java/service/CompareNum.java @@ -0,0 +1,26 @@ +package service; + +import java.util.List; + +public class CompareNum { + public int countBall(List computer, List user){ + int result = 0; + for(int i = 0; i < user.size(); i++){ + if(computer.contains(user.get(i))){ + result += 1; + } + } + return result; + } + + public int countStrike(List computer, List user){ + int strike = 0; + for(int i = 0; i < user.size(); i++){ + if(computer.get(i) == user.get(i)){ + strike += 1; + } + } + return strike; + } + +} From d75b07ce4e1da4fd1bd3cc8d14e1427ec0c01d5e Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:46:06 +0900 Subject: [PATCH 06/10] =?UTF-8?q?feat=20:=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84(=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=9D=BC=EC=9D=B4=ED=81=AC,=EB=B3=BC,=EB=82=AB?= =?UTF-8?q?=EC=8B=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/JudgeResult.java | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/service/JudgeResult.java diff --git a/src/main/java/service/JudgeResult.java b/src/main/java/service/JudgeResult.java new file mode 100644 index 000000000..73dc0c6e2 --- /dev/null +++ b/src/main/java/service/JudgeResult.java @@ -0,0 +1,35 @@ +package service; + +import java.util.List; + +public class JudgeResult { + + CompareNum compare = new CompareNum(); + + public String judgement(List computer, List player){ + int total = compare.countBall(computer, player); + int strike = compare.countStrike(computer, player); + int ball = total - strike; + + String result = null; + +// if(total == 0){ +// return "낫싱"; +// }else if(strike == 0){ +// return ball + "볼"; +// }else if(ball == 0){ +// return strike + "스트라이크"; +// } + + if(total == 0){ + result = "낫싱"; + }else if(ball != 0 && strike == 0){ + result = ball + "볼"; + }else if(strike != 0 && ball == 0){ + result = strike + "스트라이크"; + }else { + result = ball + "볼 " + strike + "스트라이크"; + } + return result; + } +} From 725ba5366a748ff85225c476aff7c774348bacb6 Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:48:23 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat=20:=20=EC=95=BC=EA=B5=AC=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=B6=80=EB=B6=84(main=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=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/Application.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 7f1901b8b..13e210cd5 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,31 @@ package baseball; +import java.util.List; + +import service.ComputerRandomNum; +import service.JudgeResult; +import util.InputUtil; + public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 + //컴퓨터 숫자 생성 + ComputerRandomNum clearNumber = new ComputerRandomNum(); + InputUtil inputUtil = new InputUtil(); + JudgeResult judge = new JudgeResult(); + + boolean again = true; + + while (again){ + List computer = clearNumber.getComputerNumber(); + String result = ""; + while (!result.equals("3스트라이크")){ + result = judge.judgement(computer, inputUtil.userNumber()); + System.out.println(result); + } + again = inputUtil.replay(); + } } + + } From fe82ea7b056985ab872d5350439ef648f5cd9fd2 Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:54:29 +0900 Subject: [PATCH 08/10] =?UTF-8?q?style=20:=20=EC=B6=9C=EB=A0=A5=EB=AC=B8?= =?UTF-8?q?=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/Application.java | 38 ++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 13e210cd5..60b9e636c 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -7,25 +7,25 @@ import util.InputUtil; public class Application { - public static void main(String[] args) { - //TODO: 숫자 야구 게임 구현 - //컴퓨터 숫자 생성 - ComputerRandomNum clearNumber = new ComputerRandomNum(); - InputUtil inputUtil = new InputUtil(); - JudgeResult judge = new JudgeResult(); + public static void main(String[] args) { + //TODO: 숫자 야구 게임 구현 + ComputerRandomNum clearNumber = new ComputerRandomNum(); + InputUtil inputUtil = new InputUtil(); + JudgeResult judge = new JudgeResult(); + + boolean again = true; + + while (again){ + List computer = clearNumber.getComputerNumber(); + String result = ""; + while (!result.equals("3스트라이크")){ + result = judge.judgement(computer, inputUtil.userNumber()); + System.out.println(result); + } + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + again = inputUtil.replay(); + } + } - boolean again = true; - - while (again){ - List computer = clearNumber.getComputerNumber(); - String result = ""; - while (!result.equals("3스트라이크")){ - result = judge.judgement(computer, inputUtil.userNumber()); - System.out.println(result); - } - again = inputUtil.replay(); - } - } - } From 683cfb7e07be62adbdfb8386737d04ec80d113f3 Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 19:55:08 +0900 Subject: [PATCH 09/10] =?UTF-8?q?style=20:=20=EC=A3=BC=EC=84=9D=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/JudgeResult.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/java/service/JudgeResult.java b/src/main/java/service/JudgeResult.java index 73dc0c6e2..7a09c84da 100644 --- a/src/main/java/service/JudgeResult.java +++ b/src/main/java/service/JudgeResult.java @@ -11,15 +11,7 @@ public String judgement(List computer, List player){ int strike = compare.countStrike(computer, player); int ball = total - strike; - String result = null; - -// if(total == 0){ -// return "낫싱"; -// }else if(strike == 0){ -// return ball + "볼"; -// }else if(ball == 0){ -// return strike + "스트라이크"; -// } + String result = null; if(total == 0){ result = "낫싱"; From a90be6712c217e8b03c088e45d141c0197552402 Mon Sep 17 00:00:00 2001 From: ohyeonji Date: Wed, 25 Oct 2023 20:05:32 +0900 Subject: [PATCH 10/10] git bash commit --- src/main/java/service/CompareNum.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/service/CompareNum.java b/src/main/java/service/CompareNum.java index 6f43ceccb..e71f98687 100644 --- a/src/main/java/service/CompareNum.java +++ b/src/main/java/service/CompareNum.java @@ -12,15 +12,15 @@ public int countBall(List computer, List user){ } return result; } - - public int countStrike(List computer, List user){ - int strike = 0; - for(int i = 0; i < user.size(); i++){ - if(computer.get(i) == user.get(i)){ - strike += 1; - } - } - return strike; - } - + + public int countStrike(List computer, List user){ + int strike = 0; + for(int i = 0; i < user.size(); i++){ + if(computer.get(i) == user.get(i)){ + strike += 1; + } + } + return strike; + } + }