From 37577d33602d1ea0a8b26c746cf93466e1364064 Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 20:00:05 +0900 Subject: [PATCH 1/8] Package Setting --- src/main/java/baseball/controller/BaseballController.java | 4 ++++ src/main/java/baseball/domain/Baseball.java | 4 ++++ src/main/java/baseball/service/BaseballNumberGenerator.java | 4 ++++ src/main/java/baseball/view/InputView.java | 4 ++++ src/main/java/baseball/view/OutputView.java | 4 ++++ 5 files changed, 20 insertions(+) create mode 100644 src/main/java/baseball/controller/BaseballController.java create mode 100644 src/main/java/baseball/domain/Baseball.java create mode 100644 src/main/java/baseball/service/BaseballNumberGenerator.java create mode 100644 src/main/java/baseball/view/InputView.java create mode 100644 src/main/java/baseball/view/OutputView.java diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java new file mode 100644 index 0000000000..a93ae1d3c8 --- /dev/null +++ b/src/main/java/baseball/controller/BaseballController.java @@ -0,0 +1,4 @@ +package baseball.controller; + +public class BaseballController { +} diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java new file mode 100644 index 0000000000..309db0b58c --- /dev/null +++ b/src/main/java/baseball/domain/Baseball.java @@ -0,0 +1,4 @@ +package baseball.domain; + +public class Baseball { +} diff --git a/src/main/java/baseball/service/BaseballNumberGenerator.java b/src/main/java/baseball/service/BaseballNumberGenerator.java new file mode 100644 index 0000000000..30a2a1916a --- /dev/null +++ b/src/main/java/baseball/service/BaseballNumberGenerator.java @@ -0,0 +1,4 @@ +package baseball.service; + +public class BaseballNumberGenerator { +} diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java new file mode 100644 index 0000000000..6474b6e42b --- /dev/null +++ b/src/main/java/baseball/view/InputView.java @@ -0,0 +1,4 @@ +package baseball.view; + +public class InputView { +} diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java new file mode 100644 index 0000000000..7483684ff5 --- /dev/null +++ b/src/main/java/baseball/view/OutputView.java @@ -0,0 +1,4 @@ +package baseball.view; + +public class OutputView { +} From 5ee29917329f71c6e0122f6fa290202dc6c62c22 Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 20:21:33 +0900 Subject: [PATCH 2/8] ? --- src/main/java/baseball/Application.java | 4 +++ .../controller/BaseballController.java | 18 ++++++++++++ src/main/java/baseball/domain/Baseball.java | 14 +++++++++ .../service/BaseballNumberGenerator.java | 18 ++++++++++++ src/main/java/baseball/view/InputView.java | 29 +++++++++++++++++++ src/main/java/baseball/view/OutputView.java | 8 +++++ 6 files changed, 91 insertions(+) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..b6a80d55f5 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,11 @@ package baseball; +import baseball.controller.BaseballController; + public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + BaseballController baseballController = new BaseballController(); + baseballController.run(); } } diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index a93ae1d3c8..95c2aafa66 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -1,4 +1,22 @@ package baseball.controller; +import baseball.domain.Baseball; +import baseball.view.InputView; +import baseball.view.OutputView; + public class BaseballController { + private final Baseball baseball; + private final InputView inputView; + private final OutputView outputView; + + public BaseballController() { + this.baseball = new Baseball(); + this.inputView = new InputView(); + this.outputView = new OutputView(); + } + public void run() { + outputView.startMessage(); + baseball.computerNumbersGenerator(); + } + } diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index 309db0b58c..565284c49f 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -1,4 +1,18 @@ package baseball.domain; +import baseball.service.BaseballNumberGenerator; + +import java.util.ArrayList; +import java.util.List; + public class Baseball { + private List computerBaseballNumbers; + + public Baseball() { + this.computerBaseballNumbers = new ArrayList<>(); + } + + public void computerNumbersGenerator() { + computerBaseballNumbers = BaseballNumberGenerator.generator(); + } } diff --git a/src/main/java/baseball/service/BaseballNumberGenerator.java b/src/main/java/baseball/service/BaseballNumberGenerator.java index 30a2a1916a..8096bf21c3 100644 --- a/src/main/java/baseball/service/BaseballNumberGenerator.java +++ b/src/main/java/baseball/service/BaseballNumberGenerator.java @@ -1,4 +1,22 @@ package baseball.service; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + public class BaseballNumberGenerator { + + public static List generator() { + List numbers = new ArrayList<>(); + Random random = new Random(); + + while(numbers.size() != 3) { + int number = random.nextInt(); + if(!numbers.contains(number)) { + numbers.add(number); + } + } + + return numbers; + } } diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 6474b6e42b..7856b40b4d 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -1,4 +1,33 @@ package baseball.view; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + public class InputView { + + public String readBaseballNumbers() { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + System.out.print("숫자를 입력해주세요 : "); + String input = ""; + try { + input = br.readLine(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + + return input; + } + + public String readCommandNumbers() { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String input = ""; + try { + input = br.readLine(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + + return input; + } } diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 7483684ff5..281e7fc225 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -1,4 +1,12 @@ package baseball.view; public class OutputView { + + public void startMessage() { + System.out.println("숫자 야구 게임을 시작합니다."); + } + + public void strikeMessage() { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } } From 1bba51f7d0cb16c371f991e049e79a4234e84378 Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 20:40:43 +0900 Subject: [PATCH 3/8] Validator --- .../controller/BaseballController.java | 10 ++++- src/main/java/baseball/service/Validate.java | 37 +++++++++++++++++++ src/main/java/baseball/view/OutputView.java | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/baseball/service/Validate.java diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 95c2aafa66..851746af14 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -13,10 +13,18 @@ public BaseballController() { this.baseball = new Baseball(); this.inputView = new InputView(); this.outputView = new OutputView(); + outputView.startMessage(); } public void run() { - outputView.startMessage(); baseball.computerNumbersGenerator(); } + public void play() { + String userInput = inputView.readBaseballNumbers(); + } + + public void reset() { + + } + } diff --git a/src/main/java/baseball/service/Validate.java b/src/main/java/baseball/service/Validate.java new file mode 100644 index 0000000000..1113784dde --- /dev/null +++ b/src/main/java/baseball/service/Validate.java @@ -0,0 +1,37 @@ +package baseball.service; + +import java.util.HashSet; +import java.util.Set; + +public class Validate { + + public boolean validator(String userInput) { + try { + if(userInput.isBlank()) { + throw new IllegalArgumentException("중복되지 않는 3자리의 수를 입력해주세요."); + } + else if(userInput.length() != 3) { + throw new IllegalArgumentException("3자리의 수를 입력해주세요."); + } + else if (!userInput.matches("\\d+")) { + throw new IllegalArgumentException("숫자만 입력해주세요."); + } + else if (!hasUniqueDigits(userInput)) { + throw new IllegalArgumentException("중복되지 않는 숫자를 입력해주세요."); + } + return true; + } catch (IllegalArgumentException e) { + return false; + } + } + + private boolean hasUniqueDigits(String userInput) { + Set digitSet = new HashSet<>(); + for (char c : userInput.toCharArray()) { + if (!digitSet.add(c)) { + return false; + } + } + return true; + } +} diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 281e7fc225..8b6ee83325 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -7,6 +7,7 @@ public void startMessage() { } public void strikeMessage() { + System.out.println("3스트라이크"); System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } } From c567e484b248919a7ee34ae25c9156c19b84188b Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 21:42:37 +0900 Subject: [PATCH 4/8] 80% --- .../controller/BaseballController.java | 26 +++++++++++++-- src/main/java/baseball/domain/Baseball.java | 32 +++++++++++++++++++ .../java/baseball/service/Conversion.java | 14 ++++++++ src/main/java/baseball/service/Validate.java | 20 ++++++++++-- src/main/java/baseball/view/InputView.java | 1 + src/main/java/baseball/view/OutputView.java | 13 ++++++-- 6 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 src/main/java/baseball/service/Conversion.java diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 851746af14..62381b5595 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -1,6 +1,8 @@ package baseball.controller; import baseball.domain.Baseball; +import baseball.service.Conversion; +import baseball.service.Validate; import baseball.view.InputView; import baseball.view.OutputView; @@ -17,14 +19,32 @@ public BaseballController() { } public void run() { baseball.computerNumbersGenerator(); + play(); } public void play() { - String userInput = inputView.readBaseballNumbers(); - } + while (true) { + String userInput = inputView.readBaseballNumbers(); + + boolean validateFlag = Validate.validator(userInput); + + if(!validateFlag) { + break; + } - public void reset() { + boolean endFlag = outputView.printMessage(baseball.compare(Conversion.stringToList(userInput))); + while(endFlag) { + userInput = inputView.readCommandNumbers(); + int commandType = Validate.commandValidator(userInput); + if(commandType == 1) { + break; + } + else if(commandType == 2) { + return; + } + } + } } } diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index 565284c49f..6c1bdbe239 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -1,9 +1,12 @@ package baseball.domain; import baseball.service.BaseballNumberGenerator; +import baseball.service.Conversion; +import baseball.service.Validate; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Baseball { private List computerBaseballNumbers; @@ -15,4 +18,33 @@ public Baseball() { public void computerNumbersGenerator() { computerBaseballNumbers = BaseballNumberGenerator.generator(); } + + public String compare(List convertedNumbers) { + StringBuilder sb = new StringBuilder(); + int strike = 0; + int ball = 0; + for(int i = 0; i < 3; i ++) { + if(Objects.equals(computerBaseballNumbers.get(i), convertedNumbers.get(i))) { + strike += 1; + } + else if (computerBaseballNumbers.contains(convertedNumbers.get(i))) { + ball += 1; + } + } + if(strike != 0 && ball != 0) { + sb.append(ball).append("볼 ").append(strike).append("스트라이크"); + } + else if(strike == 0 && ball != 0) { + sb.append(ball).append("볼"); + } + else if(ball == 0 && strike != 0) { + sb.append(strike).append("스트라이크"); + } + else if(strike == 0 && ball == 0) { + sb.append("낫싱"); + } + + return sb.toString(); + } + } diff --git a/src/main/java/baseball/service/Conversion.java b/src/main/java/baseball/service/Conversion.java new file mode 100644 index 0000000000..f5d165103e --- /dev/null +++ b/src/main/java/baseball/service/Conversion.java @@ -0,0 +1,14 @@ +package baseball.service; + +import java.util.ArrayList; +import java.util.List; + +public class Conversion { + public static List stringToList(String userNumbers) { + List convertedNumbers = new ArrayList<>(); + for(int i = 0; i < 3; i ++) { + convertedNumbers.add(userNumbers.charAt(i)-48); + } + return convertedNumbers; + } +} diff --git a/src/main/java/baseball/service/Validate.java b/src/main/java/baseball/service/Validate.java index 1113784dde..b6d88a7471 100644 --- a/src/main/java/baseball/service/Validate.java +++ b/src/main/java/baseball/service/Validate.java @@ -5,7 +5,7 @@ public class Validate { - public boolean validator(String userInput) { + public static boolean validator(String userInput) { try { if(userInput.isBlank()) { throw new IllegalArgumentException("중복되지 않는 3자리의 수를 입력해주세요."); @@ -25,7 +25,23 @@ else if (!hasUniqueDigits(userInput)) { } } - private boolean hasUniqueDigits(String userInput) { + public static int commandValidator(String userCommandInput) { + try { + if(!(userCommandInput.equals("1") || userCommandInput.equals("2"))) { + throw new IllegalArgumentException("1또는 2를 입력해주세요."); + } + else if (userCommandInput.equals("1")) { + return 1; + } + else { + return 2; + } + } catch (IllegalArgumentException e) { + return 3; + } + } + + private static boolean hasUniqueDigits(String userInput) { Set digitSet = new HashSet<>(); for (char c : userInput.toCharArray()) { if (!digitSet.add(c)) { diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 7856b40b4d..92efdf079a 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -21,6 +21,7 @@ public String readBaseballNumbers() { public String readCommandNumbers() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + System.out.println("게임을 새로 시작혀려면 1, 종료하려면 2를 입력하세요."); String input = ""; try { input = br.readLine(); diff --git a/src/main/java/baseball/view/OutputView.java b/src/main/java/baseball/view/OutputView.java index 8b6ee83325..8b12e0c7e2 100644 --- a/src/main/java/baseball/view/OutputView.java +++ b/src/main/java/baseball/view/OutputView.java @@ -6,8 +6,17 @@ public void startMessage() { System.out.println("숫자 야구 게임을 시작합니다."); } - public void strikeMessage() { - System.out.println("3스트라이크"); + public void endMessage() { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } + + public boolean printMessage(String message) { + System.out.println(message); + boolean threeStrikeFlag = false; + if(message.equals("3스트라이크")) { + threeStrikeFlag = true; + } + + return threeStrikeFlag; + } } From 38e1479e650e259f39d113d7e767bc7c8d764c0d Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 21:48:29 +0900 Subject: [PATCH 5/8] Random Number --- src/main/java/baseball/domain/Baseball.java | 1 + src/main/java/baseball/service/BaseballNumberGenerator.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index 6c1bdbe239..f898832635 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -17,6 +17,7 @@ public Baseball() { public void computerNumbersGenerator() { computerBaseballNumbers = BaseballNumberGenerator.generator(); + System.out.println(computerBaseballNumbers); } public String compare(List convertedNumbers) { diff --git a/src/main/java/baseball/service/BaseballNumberGenerator.java b/src/main/java/baseball/service/BaseballNumberGenerator.java index 8096bf21c3..90bc5b02a3 100644 --- a/src/main/java/baseball/service/BaseballNumberGenerator.java +++ b/src/main/java/baseball/service/BaseballNumberGenerator.java @@ -11,7 +11,7 @@ public static List generator() { Random random = new Random(); while(numbers.size() != 3) { - int number = random.nextInt(); + int number = random.nextInt(9)+1; if(!numbers.contains(number)) { numbers.add(number); } From e98682d3276b36a36499a7ac190373837007d133 Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 21:50:46 +0900 Subject: [PATCH 6/8] 1 Weeks Clear --- src/main/java/baseball/controller/BaseballController.java | 1 + src/main/java/baseball/domain/Baseball.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 62381b5595..8794ab2700 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -35,6 +35,7 @@ public void play() { boolean endFlag = outputView.printMessage(baseball.compare(Conversion.stringToList(userInput))); while(endFlag) { + outputView.endMessage(); userInput = inputView.readCommandNumbers(); int commandType = Validate.commandValidator(userInput); if(commandType == 1) { diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index f898832635..6c1bdbe239 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -17,7 +17,6 @@ public Baseball() { public void computerNumbersGenerator() { computerBaseballNumbers = BaseballNumberGenerator.generator(); - System.out.println(computerBaseballNumbers); } public String compare(List convertedNumbers) { From 684d13b9ccf6fea6764c86bf6afbf40879cb4750 Mon Sep 17 00:00:00 2001 From: bowook Date: Fri, 13 Sep 2024 22:22:42 +0900 Subject: [PATCH 7/8] Test Case --- .../controller/BaseballController.java | 11 +++- src/main/java/baseball/domain/Baseball.java | 2 - .../service/BaseballNumberGenerator.java | 18 +++---- src/main/java/baseball/service/Validate.java | 50 ++++++++----------- src/main/java/baseball/view/InputView.java | 2 +- 5 files changed, 41 insertions(+), 42 deletions(-) diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 8794ab2700..8e56db7a3f 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -26,8 +26,14 @@ public void play() { while (true) { String userInput = inputView.readBaseballNumbers(); - boolean validateFlag = Validate.validator(userInput); + boolean validateFlag; + try { + validateFlag = Validate.validator(userInput); + } catch (IllegalArgumentException e) { + // 예외가 발생하면 메시지를 출력하고 루프를 계속합니다. + validateFlag = false; + } if(!validateFlag) { break; } @@ -39,7 +45,8 @@ public void play() { userInput = inputView.readCommandNumbers(); int commandType = Validate.commandValidator(userInput); if(commandType == 1) { - break; + run(); + return; } else if(commandType == 2) { return; diff --git a/src/main/java/baseball/domain/Baseball.java b/src/main/java/baseball/domain/Baseball.java index 6c1bdbe239..0006f07679 100644 --- a/src/main/java/baseball/domain/Baseball.java +++ b/src/main/java/baseball/domain/Baseball.java @@ -1,8 +1,6 @@ package baseball.domain; import baseball.service.BaseballNumberGenerator; -import baseball.service.Conversion; -import baseball.service.Validate; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/baseball/service/BaseballNumberGenerator.java b/src/main/java/baseball/service/BaseballNumberGenerator.java index 90bc5b02a3..8c95f4ba6e 100644 --- a/src/main/java/baseball/service/BaseballNumberGenerator.java +++ b/src/main/java/baseball/service/BaseballNumberGenerator.java @@ -1,22 +1,22 @@ package baseball.service; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.ArrayList; import java.util.List; -import java.util.Random; + public class BaseballNumberGenerator { public static List generator() { - List numbers = new ArrayList<>(); - Random random = new Random(); - - while(numbers.size() != 3) { - int number = random.nextInt(9)+1; - if(!numbers.contains(number)) { - numbers.add(number); + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); } } - return numbers; + return computer; } } diff --git a/src/main/java/baseball/service/Validate.java b/src/main/java/baseball/service/Validate.java index b6d88a7471..a05c27a726 100644 --- a/src/main/java/baseball/service/Validate.java +++ b/src/main/java/baseball/service/Validate.java @@ -6,38 +6,32 @@ public class Validate { public static boolean validator(String userInput) { - try { - if(userInput.isBlank()) { - throw new IllegalArgumentException("중복되지 않는 3자리의 수를 입력해주세요."); - } - else if(userInput.length() != 3) { - throw new IllegalArgumentException("3자리의 수를 입력해주세요."); - } - else if (!userInput.matches("\\d+")) { - throw new IllegalArgumentException("숫자만 입력해주세요."); - } - else if (!hasUniqueDigits(userInput)) { - throw new IllegalArgumentException("중복되지 않는 숫자를 입력해주세요."); - } - return true; - } catch (IllegalArgumentException e) { - return false; + if (userInput == null || userInput.isBlank()) { + throw new IllegalArgumentException("중복되지 않는 3자리의 수를 입력해주세요."); + } + if (userInput.length() != 3) { + throw new IllegalArgumentException("3자리의 수를 입력해주세요."); + } + if (!userInput.matches("\\d+")) { + throw new IllegalArgumentException("숫자만 입력해주세요."); + } + if (!hasUniqueDigits(userInput)) { + throw new IllegalArgumentException("숫자만 입력해주세요."); } + + return true; // 모든 검증을 통과하면 true 반환 } + public static int commandValidator(String userCommandInput) { - try { - if(!(userCommandInput.equals("1") || userCommandInput.equals("2"))) { - throw new IllegalArgumentException("1또는 2를 입력해주세요."); - } - else if (userCommandInput.equals("1")) { - return 1; - } - else { - return 2; - } - } catch (IllegalArgumentException e) { - return 3; + if(!(userCommandInput.equals("1") || userCommandInput.equals("2"))) { + throw new IllegalArgumentException("1또는 2를 입력해주세요."); + } + else if (userCommandInput.equals("1")) { + return 1; + } + else { + return 2; } } diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 92efdf079a..6d10ffb032 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -21,7 +21,7 @@ public String readBaseballNumbers() { public String readCommandNumbers() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - System.out.println("게임을 새로 시작혀려면 1, 종료하려면 2를 입력하세요."); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); String input = ""; try { input = br.readLine(); From 35afdce4f90d03ffa0948459ce2239e6159df1d3 Mon Sep 17 00:00:00 2001 From: bowook Date: Sat, 14 Sep 2024 17:31:53 +0900 Subject: [PATCH 8/8] FINISH --- src/main/java/baseball/Application.java | 1 + .../controller/BaseballController.java | 27 +++++++------------ .../java/baseball/service/Conversion.java | 2 +- src/main/java/baseball/service/Validate.java | 19 ++++++------- src/main/java/baseball/view/InputView.java | 22 +++------------ 5 files changed, 24 insertions(+), 47 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index b6a80d55f5..a42bcb911a 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -7,5 +7,6 @@ public static void main(String[] args) { // TODO: 프로그램 구현 BaseballController baseballController = new BaseballController(); baseballController.run(); + } } diff --git a/src/main/java/baseball/controller/BaseballController.java b/src/main/java/baseball/controller/BaseballController.java index 8e56db7a3f..0166bfea91 100644 --- a/src/main/java/baseball/controller/BaseballController.java +++ b/src/main/java/baseball/controller/BaseballController.java @@ -18,24 +18,19 @@ public BaseballController() { outputView.startMessage(); } public void run() { - baseball.computerNumbersGenerator(); - play(); + boolean isRunning = true; + while (isRunning) { + isRunning = play(); + } } - public void play() { + public boolean play() { + baseball.computerNumbersGenerator(); while (true) { String userInput = inputView.readBaseballNumbers(); - boolean validateFlag; - - try { - validateFlag = Validate.validator(userInput); - } catch (IllegalArgumentException e) { - // 예외가 발생하면 메시지를 출력하고 루프를 계속합니다. - validateFlag = false; - } - if(!validateFlag) { - break; + if (!Validate.validator(userInput)) { + throw new IllegalArgumentException(); // 예외 발생 } boolean endFlag = outputView.printMessage(baseball.compare(Conversion.stringToList(userInput))); @@ -45,14 +40,12 @@ public void play() { userInput = inputView.readCommandNumbers(); int commandType = Validate.commandValidator(userInput); if(commandType == 1) { - run(); - return; + return true; } else if(commandType == 2) { - return; + return false; } } } } - } diff --git a/src/main/java/baseball/service/Conversion.java b/src/main/java/baseball/service/Conversion.java index f5d165103e..6ec9fd2ee2 100644 --- a/src/main/java/baseball/service/Conversion.java +++ b/src/main/java/baseball/service/Conversion.java @@ -7,7 +7,7 @@ public class Conversion { public static List stringToList(String userNumbers) { List convertedNumbers = new ArrayList<>(); for(int i = 0; i < 3; i ++) { - convertedNumbers.add(userNumbers.charAt(i)-48); + convertedNumbers.add(userNumbers.charAt(i)-'0'); } return convertedNumbers; } diff --git a/src/main/java/baseball/service/Validate.java b/src/main/java/baseball/service/Validate.java index a05c27a726..646c70d3d2 100644 --- a/src/main/java/baseball/service/Validate.java +++ b/src/main/java/baseball/service/Validate.java @@ -7,19 +7,16 @@ public class Validate { public static boolean validator(String userInput) { if (userInput == null || userInput.isBlank()) { - throw new IllegalArgumentException("중복되지 않는 3자리의 수를 입력해주세요."); - } - if (userInput.length() != 3) { - throw new IllegalArgumentException("3자리의 수를 입력해주세요."); - } - if (!userInput.matches("\\d+")) { - throw new IllegalArgumentException("숫자만 입력해주세요."); - } - if (!hasUniqueDigits(userInput)) { - throw new IllegalArgumentException("숫자만 입력해주세요."); + return false; + } else if (!userInput.matches("\\d+")) { + return false; + } else if (userInput.length() != 3) { + return false; + } else if (!hasUniqueDigits(userInput)) { + return false; } - return true; // 모든 검증을 통과하면 true 반환 + return true; } diff --git a/src/main/java/baseball/view/InputView.java b/src/main/java/baseball/view/InputView.java index 6d10ffb032..570e1eabba 100644 --- a/src/main/java/baseball/view/InputView.java +++ b/src/main/java/baseball/view/InputView.java @@ -1,5 +1,7 @@ package baseball.view; +import camp.nextstep.edu.missionutils.Console; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -7,28 +9,12 @@ public class InputView { public String readBaseballNumbers() { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("숫자를 입력해주세요 : "); - String input = ""; - try { - input = br.readLine(); - } catch (IOException e) { - System.out.println(e.getMessage()); - } - - return input; + return Console.readLine(); } public String readCommandNumbers() { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); - String input = ""; - try { - input = br.readLine(); - } catch (IOException e) { - System.out.println(e.getMessage()); - } - - return input; + return Console.readLine(); } }