From 222cc09829ecd4501af56c36d2ac0a335dd9aa0a Mon Sep 17 00:00:00 2001 From: yeonnnnjs <39330546+yeonnnnjs@users.noreply.github.com> Date: Thu, 11 Jul 2024 00:06:54 +0900 Subject: [PATCH 1/2] feat: add logic for pass all test --- src/main/java/baseball/Application.java | 94 ++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..0340839288 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,99 @@ package baseball; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + boolean playAgain = true; + + while (playAgain) { + List computerNumbers = generateRandomNumbers(); + boolean gameOver = false; + + System.out.println("숫자 야구 게임을 시작합니다."); + + while (!gameOver) { + System.out.print("숫자를 입력해주세요 : "); + String userInput = Console.readLine(); + + validateInput(userInput); + List userNumbers = convertToIntList(userInput); + Boolean is3Strike = getResult(computerNumbers, userNumbers); + if (is3Strike) { + gameOver = true; + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + } + + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String choice = Console.readLine(); + if (choice.equals("2")) { + playAgain = false; + } + } + } + + private static List generateRandomNumbers() { + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + return computer; + } + + private static void validateInput(String input) { + if (input.length() != 3) { + throw new IllegalArgumentException(); + } + Set charSet = new HashSet<>(); + for (char ch : input.toCharArray()) { + if (!Character.isDigit(ch) || ch == '0' || !charSet.add(ch)) { + throw new IllegalArgumentException(); + } + } + } + + private static List convertToIntList(String input) { + List numbers = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + numbers.add(input.charAt(i) - '0'); + } + return numbers; + } + + private static Boolean getResult(List computerNumbers, List userNumbers) { + int strikes = 0; + int balls = 0; + String result = ""; + + for (int i = 0; i < 3; i++) { + if (userNumbers.get(i).equals(computerNumbers.get(i))) { + strikes++; + } else if (computerNumbers.contains(userNumbers.get(i))) { + balls++; + } + } + + if (strikes == 3) { + result = "3스트라이크"; + System.out.println(result); + return true; + } + + if (strikes == 0 && balls == 0) { + result = "낫싱"; + } else { + result = balls + "볼 " + strikes + "스트라이크"; + } + System.out.println(result); + return false; } } From 85091a856447e646d087478beed0e42244ddbe5f Mon Sep 17 00:00:00 2001 From: yeonnnnjs <39330546+yeonnnnjs@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:40:31 +0900 Subject: [PATCH 2/2] refactor: add utils --- src/main/java/baseball/Application.java | 69 ++------------------- src/main/java/baseball/utils/DataUtils.java | 29 +++++++++ src/main/java/baseball/utils/IOUtils.java | 47 ++++++++++++++ 3 files changed, 81 insertions(+), 64 deletions(-) create mode 100644 src/main/java/baseball/utils/DataUtils.java create mode 100644 src/main/java/baseball/utils/IOUtils.java diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 0340839288..cf47a5c2a5 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,16 +1,16 @@ package baseball; import camp.nextstep.edu.missionutils.Console; -import camp.nextstep.edu.missionutils.Randoms; -import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; + +import static baseball.utils.DataUtils.convertToIntList; +import static baseball.utils.DataUtils.generateRandomNumbers; +import static baseball.utils.IOUtils.getResult; +import static baseball.utils.IOUtils.validateInput; public class Application { public static void main(String[] args) { boolean playAgain = true; - while (playAgain) { List computerNumbers = generateRandomNumbers(); boolean gameOver = false; @@ -37,63 +37,4 @@ public static void main(String[] args) { } } } - - private static List generateRandomNumbers() { - List computer = new ArrayList<>(); - while (computer.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } - return computer; - } - - private static void validateInput(String input) { - if (input.length() != 3) { - throw new IllegalArgumentException(); - } - Set charSet = new HashSet<>(); - for (char ch : input.toCharArray()) { - if (!Character.isDigit(ch) || ch == '0' || !charSet.add(ch)) { - throw new IllegalArgumentException(); - } - } - } - - private static List convertToIntList(String input) { - List numbers = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - numbers.add(input.charAt(i) - '0'); - } - return numbers; - } - - private static Boolean getResult(List computerNumbers, List userNumbers) { - int strikes = 0; - int balls = 0; - String result = ""; - - for (int i = 0; i < 3; i++) { - if (userNumbers.get(i).equals(computerNumbers.get(i))) { - strikes++; - } else if (computerNumbers.contains(userNumbers.get(i))) { - balls++; - } - } - - if (strikes == 3) { - result = "3스트라이크"; - System.out.println(result); - return true; - } - - if (strikes == 0 && balls == 0) { - result = "낫싱"; - } else { - result = balls + "볼 " + strikes + "스트라이크"; - } - System.out.println(result); - return false; - } } diff --git a/src/main/java/baseball/utils/DataUtils.java b/src/main/java/baseball/utils/DataUtils.java new file mode 100644 index 0000000000..0f25fc4703 --- /dev/null +++ b/src/main/java/baseball/utils/DataUtils.java @@ -0,0 +1,29 @@ +package baseball.utils; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class DataUtils { + public static List generateRandomNumbers() { + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + return computer; + } + + public static List convertToIntList(String input) { + List numbers = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + numbers.add(input.charAt(i) - '0'); + } + return numbers; + } +} diff --git a/src/main/java/baseball/utils/IOUtils.java b/src/main/java/baseball/utils/IOUtils.java new file mode 100644 index 0000000000..d6043aff52 --- /dev/null +++ b/src/main/java/baseball/utils/IOUtils.java @@ -0,0 +1,47 @@ +package baseball.utils; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class IOUtils { + public static void validateInput(String input) { + if (input.length() != 3) { + throw new IllegalArgumentException(); + } + Set charSet = new HashSet<>(); + for (char ch : input.toCharArray()) { + if (!Character.isDigit(ch) || ch == '0' || !charSet.add(ch)) { + throw new IllegalArgumentException(); + } + } + } + + public static Boolean getResult(List computerNumbers, List userNumbers) { + int strikes = 0; + int balls = 0; + String result = ""; + + for (int i = 0; i < 3; i++) { + if (userNumbers.get(i).equals(computerNumbers.get(i))) { + strikes++; + } else if (computerNumbers.contains(userNumbers.get(i))) { + balls++; + } + } + + if (strikes == 3) { + result = "3스트라이크"; + System.out.println(result); + return true; + } + + if (strikes == 0 && balls == 0) { + result = "낫싱"; + } else { + result = balls + "볼 " + strikes + "스트라이크"; + } + System.out.println(result); + return false; + } +}