From b73070a01dfd5af6e96cb503b6575221fba5e314 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 00:01:37 +0900 Subject: [PATCH 01/22] add README --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index 687348d..91f76cc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,35 @@ # 미션 - 숫자 야구 게임 +## 구현할 기능 목록 + +- 배열을 두 개 생성한다. + +- 랜덤으로 1~9 사이 3개의 숫자를 만들어서 배열에 저장한다. + `mallang.missionutils.Random`의`pickNumberInRange()` +- 사용자에게 숫자를 입력받아 배열에 저장한다. + `mallang.missionutils.Console`의`readLine()` + +- 만들어진 숫자와 사용자가 입력한 숫자를 비교한다. +- strike ,ball, nothing 변수 = 0으로 설정한다. +- 랜덤으로 만들어진 3개의 숫자와 입력한 숫자를 각각 비교한다.(while문 사용) + 숫자와 자리수가 맞으면 strike의 수 증가 + 숫자만 맞으면 ball 수 증가 + 둘다 다르면 nothing + +- 결과를 출력한다. + - strike의 개수 + ball 개수 + nothing + 출력 + - 3개의 숫자가 숫자와 자리가 맞으면(while문 벗어남) + 3스트라이크 + 3개의 숫자를 모두 맞히셨습니다! 게임 종료 출력 + +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다. + +- 개임 재시작여부 + - 게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요. + ## 🔍 진행방식 - 미션은 **기능 요구사항, 프로그래밍 요구사항, 과제 진행 요구사항** 세 가지로 구성되어 있다. @@ -118,3 +148,4 @@ ## 📝 License This project is [MIT](https://github.com/woowacourse/java-baseball-precourse/blob/master/LICENSE) licensed. + From 890d3f5b26624f4298fb7f0376af8dc2272f1abd Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 07:10:15 +0900 Subject: [PATCH 02/22] refactor : README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구현할 기능 목록 수정 --- README.md | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 91f76cc..a5b3c92 100644 --- a/README.md +++ b/README.md @@ -2,33 +2,22 @@ ## 구현할 기능 목록 -- 배열을 두 개 생성한다. - -- 랜덤으로 1~9 사이 3개의 숫자를 만들어서 배열에 저장한다. - `mallang.missionutils.Random`의`pickNumberInRange()` -- 사용자에게 숫자를 입력받아 배열에 저장한다. - `mallang.missionutils.Console`의`readLine()` - -- 만들어진 숫자와 사용자가 입력한 숫자를 비교한다. -- strike ,ball, nothing 변수 = 0으로 설정한다. -- 랜덤으로 만들어진 3개의 숫자와 입력한 숫자를 각각 비교한다.(while문 사용) - 숫자와 자리수가 맞으면 strike의 수 증가 - 숫자만 맞으면 ball 수 증가 - 둘다 다르면 nothing - -- 결과를 출력한다. - - strike의 개수 - ball 개수 - nothing - 출력 - - 3개의 숫자가 숫자와 자리가 맞으면(while문 벗어남) - 3스트라이크 - 3개의 숫자를 모두 맞히셨습니다! 게임 종료 출력 - -- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다. - -- 개임 재시작여부 - - 게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요. +- 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다. + - mallang.missionutils.Randoms의 pickNumberInRange() 사용 + +- 사용자로부터 숫자를 입력받는다. + - mallang.missionutils.Console의 readline() 사용 + +- 임의의 수와 사용자의 수를 비교한다. + - 숫자와 자리가 같으면 스트라이크 + - 숫자는 같고 자리가 다르면 볼 + - 숫자와 자리 같은 것이 둘다 없으면 낫싱 + +- 숫자 비교 후 게임을 계속하거나 종료 + - 3개의 숫자가 모두 같으면 게임 종료 + - 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 발생시킨 후 종료 + +- 게임 종료 후 1을 입력해 게임을 다시 시작하거나 2를 입력해 게임을 완전히 종료 가능 ## 🔍 진행방식 From b5bd8c3ba1d7412c7aaf1ef1a5b25a3a2d1d77fc Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 07:10:31 +0900 Subject: [PATCH 03/22] refactor : README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구현할 기능 목록 수정 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5b3c92..053bb80 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 미션 - 숫자 야구 게임 -## 구현할 기능 목록 +## 구현할 기능 목록 - 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다. - mallang.missionutils.Randoms의 pickNumberInRange() 사용 From b7abdc867049b644355a43c234a8952ddaa131e9 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 07:50:38 +0900 Subject: [PATCH 04/22] refactor : README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구현할 기능 목록 수정1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 053bb80..76d9121 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ - 사용자로부터 숫자를 입력받는다. - mallang.missionutils.Console의 readline() 사용 + - 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 발생시킨 후 종료 - 임의의 수와 사용자의 수를 비교한다. - 숫자와 자리가 같으면 스트라이크 @@ -15,7 +16,6 @@ - 숫자 비교 후 게임을 계속하거나 종료 - 3개의 숫자가 모두 같으면 게임 종료 - - 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 발생시킨 후 종료 - 게임 종료 후 1을 입력해 게임을 다시 시작하거나 2를 입력해 게임을 완전히 종료 가능 From 122f690c2f8baaa9a5e396804009a66cd7c7ca9d Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:26:36 +0900 Subject: [PATCH 05/22] feat : Application1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 ~ 9 서로 다른 임의의 수 생성 후 배열에 저장 --- src/main/java/baseball/Application.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 7f1901b..e3d9f74 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,19 @@ package baseball; +import java.util.*; +import mallang.missionutils.Randoms; +import mallang.missionutils.Console; public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 } + // 1부터 9까지의 서로 다른 임의의 수를 3개 생성해서 배열에 저장 + public int[] answerNum() { + int[] answer = new int[3]; + for(int i = 0; i < answer.length; i++) { + answer[i] = Randoms.pickNumberInRange(1,9); + } + return answer; + } + } From 4d38f19175032699b49ade8a5855588dff2ed006 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:27:55 +0900 Subject: [PATCH 06/22] feat : Application1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 임의의 수 생성 후 배열에 저장 --- src/main/java/baseball/Application.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index e3d9f74..5d6c7b6 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,6 @@ package baseball; -import java.util.*; import mallang.missionutils.Randoms; -import mallang.missionutils.Console; + public class Application { public static void main(String[] args) { From ba3256d92d09d6234165f10dadff2da216a13241 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:29:19 +0900 Subject: [PATCH 07/22] feat : Application2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자로부터 숫자 입력받아 배열저장 --- src/main/java/baseball/Application.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 5d6c7b6..ec01311 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,6 +1,7 @@ package baseball; +import java.util.*; import mallang.missionutils.Randoms; - +import mallang.missionutils.Console; public class Application { public static void main(String[] args) { @@ -14,5 +15,12 @@ public int[] answerNum() { } return answer; } - + // 사용자로부터 숫자 입력받아 배열에 저장 + // 사용자가 잘못된 값 입력할 경우 IllegalArgumentException 발생 (만들어야 함) + public static int[] userNum() { + System.out.println("숫자를 입력해주세요 : "); + String input = Console.readLine(); + int[] guess = parseInput(input); + return guess; + } } From 27573ffdd6294b77fd3215777a2b62c21d8729b8 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:30:13 +0900 Subject: [PATCH 08/22] feat : Application3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 입력받은 String Int로 파싱해주기 --- src/main/java/baseball/Application.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index ec01311..f41b60a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -23,4 +23,13 @@ public static int[] userNum() { int[] guess = parseInput(input); return guess; } + // 입력받은 String값 Int로 파싱해주기 + public static int[] parseInput(String input) { + int[] guess = new int[3]; + for(int i = 0; i < guess.length; i++) { + guess[i] = Character.getNumericValue(input.charAt(i)); + } + return guess; + } + } From 524bacabdf78f7d3a7dce43afe845066baa88a6e Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:31:00 +0900 Subject: [PATCH 09/22] feat : Application4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정답 확인 함수 --- src/main/java/baseball/Application.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index f41b60a..736eb96 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -31,5 +31,12 @@ public static int[] parseInput(String input) { } return guess; } - + // 정답 확인 함수 + public static int[] checkNum(int[] answer, int[] guess) { + int[] result = new int[3]; + countBalls(answer, guess, result); + countStrikes(answer, guess, result); + result[2] = 3 - result[0] - result[1]; // 낫싱 개수 + return result; + } } From 49a2dd523fb4ec52af4a3d6038ef42a3ea6917a8 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:31:47 +0900 Subject: [PATCH 10/22] feat : Application45 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 볼 개수 --- src/main/java/baseball/Application.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 736eb96..32e6def 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -39,4 +39,14 @@ public static int[] checkNum(int[] answer, int[] guess) { result[2] = 3 - result[0] - result[1]; // 낫싱 개수 return result; } + // 볼 개수 + public static void countBalls(int[] answer, int[] guess, int[] result) { + for(int i = 0; i < answer.length; i++) { + for(int j = 0; j < guess.length; j++) { + if(answer[i] == guess[j] && i != j) { + result[0]++; + } + } + } + } } From df760c90ccff75bfd1fa61f37799ef1a83f3e50f Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:32:52 +0900 Subject: [PATCH 11/22] feat : Application6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 스트라이크 개수 --- src/main/java/baseball/Application.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 32e6def..de30e95 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -49,4 +49,12 @@ public static void countBalls(int[] answer, int[] guess, int[] result) { } } } + // 스트라이크 개수 + public static void countStrikes(int[] answer, int[] guess, int[] result) { + for(int i = 0; i < answer.length; i++){ + if(answer[i] == guess[i]) { + result[1]++; + } + } + } } From 99e27a48bab00f71b2ba5b682ddd867dcf0632fd Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:33:33 +0900 Subject: [PATCH 12/22] feat : Application7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 결과 출력 --- src/main/java/baseball/Application.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index de30e95..10256d5 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -57,4 +57,8 @@ public static void countStrikes(int[] answer, int[] guess, int[] result) { } } } + // 결과 출력 (출력 수정 필요) + public static void printResult(int[] result) { + System.out.println(result[0] + "볼" + " " + result[1] + "스트라이크" + result[2] + "낫싱"); + } } From eb1681ef17309fd78ddd0ea59140b2ea20c5ad34 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 08:53:17 +0900 Subject: [PATCH 13/22] feat : Application8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임 재시작 --- src/main/java/baseball/Application.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 10256d5..8769b02 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,5 +1,4 @@ package baseball; -import java.util.*; import mallang.missionutils.Randoms; import mallang.missionutils.Console; @@ -7,8 +6,8 @@ public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 } - // 1부터 9까지의 서로 다른 임의의 수를 3개 생성해서 배열에 저장 - public int[] answerNum() { + // 1부터 9까지의 서로 다른 임의의 수를 3개 생성해서 배열에 저장 (숫자가 겹치지 않도록 수정) + public static int[] answerNum() { int[] answer = new int[3]; for(int i = 0; i < answer.length; i++) { answer[i] = Randoms.pickNumberInRange(1,9); @@ -61,4 +60,11 @@ public static void countStrikes(int[] answer, int[] guess, int[] result) { public static void printResult(int[] result) { System.out.println(result[0] + "볼" + " " + result[1] + "스트라이크" + result[2] + "낫싱"); } + // 게임 재시작 여부 + public static boolean continueGame() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int choice = Integer.parseInt(Console.readLine()); + return choice == 1; + } + } From 26f07f34edc00930434581a93496ed39e4174893 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 18:38:17 +0900 Subject: [PATCH 14/22] feat : Application9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임 시작 --- src/main/java/baseball/Application.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 8769b02..f09aafd 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -5,6 +5,25 @@ public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 + startGame(); + } + // 게임 시작 + public static void startGame() { + int[] answer = answerNum(); + + while(true) { + int[] guess = userNum(); + int[] result = checkNum(answer, guess); + printResult(result); + + if (result[2] == 3) { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료 "); + break; + } + if(!continueGame()) { + break; + } + } } // 1부터 9까지의 서로 다른 임의의 수를 3개 생성해서 배열에 저장 (숫자가 겹치지 않도록 수정) public static int[] answerNum() { From 7a4ca7340fce43e9ae0cd86cda376cb60cc32538 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 18:56:29 +0900 Subject: [PATCH 15/22] feat : Application10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1차 최종 --- docs/README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..39771e2 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,4 @@ +## 소감 +기능목록을 작성하고 구현을 해보는 것을 처음해보았는데 생각보다 쉽지 않았습니다. +아직 어렵고 헷갈리는 부분이 많아 피드백을 받은 후 수정을 할 계획입니다. +기본적인 개념이 헷갈라는 것이 있었고 생각한 것을 코드로 작성하는 것이 어려웠습니다. From 02eb68e7f17f514e9aab8b2588fd57d1fba9098f Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 18:57:31 +0900 Subject: [PATCH 16/22] feat : Application10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1차 최종 --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 39771e2..3728773 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,3 +2,4 @@ 기능목록을 작성하고 구현을 해보는 것을 처음해보았는데 생각보다 쉽지 않았습니다. 아직 어렵고 헷갈리는 부분이 많아 피드백을 받은 후 수정을 할 계획입니다. 기본적인 개념이 헷갈라는 것이 있었고 생각한 것을 코드로 작성하는 것이 어려웠습니다. +제대로 작동이 되지 않고 고쳐야 할 부분이 있다는 것을 알지만 어떻게 수정해야하는지 잘 모르겠습니다. From 46e6c69daa56c39e57412be1e31e70d886d36e5c Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 18:57:54 +0900 Subject: [PATCH 17/22] feat : Application10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1차 최종 --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 3728773..3069038 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,4 +2,4 @@ 기능목록을 작성하고 구현을 해보는 것을 처음해보았는데 생각보다 쉽지 않았습니다. 아직 어렵고 헷갈리는 부분이 많아 피드백을 받은 후 수정을 할 계획입니다. 기본적인 개념이 헷갈라는 것이 있었고 생각한 것을 코드로 작성하는 것이 어려웠습니다. -제대로 작동이 되지 않고 고쳐야 할 부분이 있다는 것을 알지만 어떻게 수정해야하는지 잘 모르겠습니다. +제대로 작동이 되지 않고 고쳐야 할 부분이 있다는 것을 알지만 어떻게 수정해야하는지 잘 모르겠습니다. From 91d1ccb9fd16fd5767e53bf459ae7a2300b7f1cd Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Sat, 17 Feb 2024 19:04:56 +0900 Subject: [PATCH 18/22] feat : Application10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1차 최종 --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 3069038..d9cbdba 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,5 @@ ## 소감 기능목록을 작성하고 구현을 해보는 것을 처음해보았는데 생각보다 쉽지 않았습니다. -아직 어렵고 헷갈리는 부분이 많아 피드백을 받은 후 수정을 할 계획입니다. 기본적인 개념이 헷갈라는 것이 있었고 생각한 것을 코드로 작성하는 것이 어려웠습니다. 제대로 작동이 되지 않고 고쳐야 할 부분이 있다는 것을 알지만 어떻게 수정해야하는지 잘 모르겠습니다. +더 고민해 본 후 추가제출 기한에는 제대로 작동되도록 제출하도록 하겠습니다. From 8bd6a98aa9022f5f343fd2f6352e45263ebb4efe Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Thu, 22 Feb 2024 07:53:26 +0900 Subject: [PATCH 19/22] refactor : Application11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit answerNum() 함수명 createNum()으로 변경 / 배열을 리스트로 변경 --- src/main/java/baseball/Application.java | 45 ++++++++++++++----------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index f09aafd..fc02a3f 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,10 @@ package baseball; +import java.util.*; import mallang.missionutils.Randoms; import mallang.missionutils.Console; +import static mallang.missionutils.Console.readLine; + public class Application { public static void main(String[] args) { //TODO: 숫자 야구 게임 구현 @@ -9,11 +12,11 @@ public static void main(String[] args) { } // 게임 시작 public static void startGame() { - int[] answer = answerNum(); + List answerNum = answerNum(); while(true) { - int[] guess = userNum(); - int[] result = checkNum(answer, guess); + List userNum = new ArrayList<>(); + List result = checkNum(answer, userNum); printResult(result); if (result[2] == 3) { @@ -25,11 +28,10 @@ public static void startGame() { } } } - // 1부터 9까지의 서로 다른 임의의 수를 3개 생성해서 배열에 저장 (숫자가 겹치지 않도록 수정) - public static int[] answerNum() { - int[] answer = new int[3]; - for(int i = 0; i < answer.length; i++) { - answer[i] = Randoms.pickNumberInRange(1,9); + public static ArrayList createNum() { + ArrayList answer = new ArrayList<>(); + for(int i = 0; i < answer.size(); i++) { + answer.set(i, Randoms.pickNumberInRange(1, 9)); } return answer; } @@ -37,12 +39,12 @@ public static int[] answerNum() { // 사용자가 잘못된 값 입력할 경우 IllegalArgumentException 발생 (만들어야 함) public static int[] userNum() { System.out.println("숫자를 입력해주세요 : "); - String input = Console.readLine(); - int[] guess = parseInput(input); + String input = readLine(); + List guess = parseInput(input); return guess; } // 입력받은 String값 Int로 파싱해주기 - public static int[] parseInput(String input) { + public static List parseInput(String input) { int[] guess = new int[3]; for(int i = 0; i < guess.length; i++) { guess[i] = Character.getNumericValue(input.charAt(i)); @@ -50,7 +52,7 @@ public static int[] parseInput(String input) { return guess; } // 정답 확인 함수 - public static int[] checkNum(int[] answer, int[] guess) { + public static List checkNum(List answer, List guess) { int[] result = new int[3]; countBalls(answer, guess, result); countStrikes(answer, guess, result); @@ -58,11 +60,11 @@ public static int[] checkNum(int[] answer, int[] guess) { return result; } // 볼 개수 - public static void countBalls(int[] answer, int[] guess, int[] result) { - for(int i = 0; i < answer.length; i++) { - for(int j = 0; j < guess.length; j++) { - if(answer[i] == guess[j] && i != j) { - result[0]++; + public static void countBalls(List answer, List guess, List result) { + for(int i = 0; i < answer.size(); i++) { + for(int j = 0; j < guess.size(); j++) { + if(answer.get(i) == guess.get(j) && i != j) { + result.get(0)++; } } } @@ -82,8 +84,11 @@ public static void printResult(int[] result) { // 게임 재시작 여부 public static boolean continueGame() { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - int choice = Integer.parseInt(Console.readLine()); - return choice == 1; - } + String restart = readLine(); + if (restart.length() != 1) { + throw new IllegalArgumentException(); + } + + } } From 9b9c93944e4076814e65aea534f25c366b5ef07f Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Thu, 22 Feb 2024 08:12:28 +0900 Subject: [PATCH 20/22] refactor : Application12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숫자를 중복해서 뽑는 것을 방지하기 위한 alreadyNum 함수 생성 --- src/main/java/baseball/Application.java | 35 +++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index fc02a3f..6b9fe12 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -28,23 +28,42 @@ public static void startGame() { } } } - public static ArrayList createNum() { + public static ArrayList createNum() { // 변경 O ArrayList answer = new ArrayList<>(); for(int i = 0; i < answer.size(); i++) { answer.set(i, Randoms.pickNumberInRange(1, 9)); } return answer; } - // 사용자로부터 숫자 입력받아 배열에 저장 - // 사용자가 잘못된 값 입력할 경우 IllegalArgumentException 발생 (만들어야 함) - public static int[] userNum() { + + public static ArrayList userNum() { + String input; System.out.println("숫자를 입력해주세요 : "); - String input = readLine(); - List guess = parseInput(input); + + input = readLine(); + if(input.length() > 3) { + throw new IllegalArgumentException(); + } + alreadyNum(input); + ArrayList guess = parseInput(input); return guess; } - // 입력받은 String값 Int로 파싱해주기 - public static List parseInput(String input) { + public static void alreadyNum(String input) { + boolean containNum; + ArrayList nums = new ArrayList<>(); + for(int i = 0; i < 3; i++) { + int idx = Integer.parseInt(String.valueOf(input.charAt(i))); + + containNum = !(nums.contains(idx)); + if(containNum) { + nums.add(idx); + } + else { + throw new IllegalArgumentException(); + } + } + } + public static ArrayList parseInput(String input) { int[] guess = new int[3]; for(int i = 0; i < guess.length; i++) { guess[i] = Character.getNumericValue(input.charAt(i)); From a60ef3fb06a11f235813f14a896a4da35adece47 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Thu, 22 Feb 2024 08:20:12 +0900 Subject: [PATCH 21/22] refactor : Application13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit parseInput 함수 수정 --- src/main/java/baseball/Application.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 6b9fe12..959fda9 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -48,7 +48,7 @@ public static ArrayList userNum() { ArrayList guess = parseInput(input); return guess; } - public static void alreadyNum(String input) { + public static void alreadyNum(String input) { // 변경 O boolean containNum; ArrayList nums = new ArrayList<>(); for(int i = 0; i < 3; i++) { @@ -64,9 +64,13 @@ public static void alreadyNum(String input) { } } public static ArrayList parseInput(String input) { - int[] guess = new int[3]; - for(int i = 0; i < guess.length; i++) { - guess[i] = Character.getNumericValue(input.charAt(i)); + ArrayList guess = new ArrayList<>(); + for(int i = 0; i < 3; i++) { + char num = input.charAt(i); + String strNum = String.valueOf(num); + if(checkInput(strNum, 1, 9)) { + guess.add(Integer.parseInt(strNum)); + } } return guess; } From 4601e7eaacb5fc73875fc70caa5436e7e1b0c764 Mon Sep 17 00:00:00 2001 From: CHAEGODA Date: Thu, 22 Feb 2024 17:58:09 +0900 Subject: [PATCH 22/22] refactor : Application15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임 재시작 함수 continueGame() 수정 --- src/main/java/baseball/Application.java | 99 +++++++++++++++---------- 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 959fda9..f44df31 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -12,7 +12,7 @@ public static void main(String[] args) { } // 게임 시작 public static void startGame() { - List answerNum = answerNum(); + List answerNum = createNum(); while(true) { List userNum = new ArrayList<>(); @@ -28,15 +28,15 @@ public static void startGame() { } } } - public static ArrayList createNum() { // 변경 O - ArrayList answer = new ArrayList<>(); + public static List createNum() { // 변경 O + ArrayList answer = new List<>(); for(int i = 0; i < answer.size(); i++) { answer.set(i, Randoms.pickNumberInRange(1, 9)); } return answer; } - public static ArrayList userNum() { + public static List userNum() { // 변경 O String input; System.out.println("숫자를 입력해주세요 : "); @@ -45,12 +45,12 @@ public static ArrayList userNum() { throw new IllegalArgumentException(); } alreadyNum(input); - ArrayList guess = parseInput(input); + List guess = parseInput(input); return guess; } public static void alreadyNum(String input) { // 변경 O boolean containNum; - ArrayList nums = new ArrayList<>(); + List nums = new ArrayList<>(); for(int i = 0; i < 3; i++) { int idx = Integer.parseInt(String.valueOf(input.charAt(i))); @@ -63,8 +63,8 @@ public static void alreadyNum(String input) { // 변경 O } } } - public static ArrayList parseInput(String input) { - ArrayList guess = new ArrayList<>(); + public static List parseInput(String input) { // 변경 O + List guess = new List<>(); for(int i = 0; i < 3; i++) { char num = input.charAt(i); String strNum = String.valueOf(num); @@ -74,44 +74,67 @@ public static ArrayList parseInput(String input) { } return guess; } - // 정답 확인 함수 - public static List checkNum(List answer, List guess) { - int[] result = new int[3]; - countBalls(answer, guess, result); - countStrikes(answer, guess, result); - result[2] = 3 - result[0] - result[1]; // 낫싱 개수 - return result; - } - // 볼 개수 - public static void countBalls(List answer, List guess, List result) { - for(int i = 0; i < answer.size(); i++) { - for(int j = 0; j < guess.size(); j++) { - if(answer.get(i) == guess.get(j) && i != j) { - result.get(0)++; + public static boolean checkInput(String input, int start, int end) throws IllegalArgumentException { // 오류발생 + try { + int num = Integer.parseInt(input); + if((start <= num) && (num <= end)) { + return true; + } + else { + throw new IllegalArgumentException(); + } + catch (IllegalArgumentException e) { + throw e; + } + } + + // 정답 확인 함수 + public static List compareNum(List answer, List guess) { + List result = new ArrayList<>(); + countBalls(answer, guess, result); + countStrikes(answer, guess, result); + result.set(2, 3 - result.get(0) - result.get(1)); // 낫싱 개수 + return result; + } + // 볼 개수 + public static void countBalls(List answer, List guess, List result) { + for(int i = 0; i < answer.size(); i++) { + for(int j = 0; j < guess.size(); j++) { + if(answer.get(i).equals(guess.get(j)) && i != j) { + result.set(0, result.get(0) + 1); + } } } } - } - // 스트라이크 개수 - public static void countStrikes(int[] answer, int[] guess, int[] result) { - for(int i = 0; i < answer.length; i++){ - if(answer[i] == guess[i]) { - result[1]++; + // 스트라이크 개수 + public static void countStrikes(List answer, List guess, List result) { + for(int i = 0; i < answer.size(); i++) { + if(answer.get(i).equals(guess.get(i))) { + result.set(1, result.get(1) + 1); + } } } - } // 결과 출력 (출력 수정 필요) - public static void printResult(int[] result) { - System.out.println(result[0] + "볼" + " " + result[1] + "스트라이크" + result[2] + "낫싱"); + public static void printResult(List result) { + System.out.println(result.get(0) + "볼 " + result.get(1) + "스트라이크 " + result.get(2) + "낫싱"); } // 게임 재시작 여부 - public static boolean continueGame() { - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - String restart = readLine(); + public static boolean continueGame() { + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String restart = readLine(); - if (restart.length() != 1) { - throw new IllegalArgumentException(); - } + if (restart.length() != 1) { + throw new IllegalArgumentException(); + } - } + checkInput(restart,1,2); + + if (restart.equals("1")) { + return true; + } else if (restart.equals("2")) { + return false; + } else { + return false; + } + } }