From 8c3a299a9107b3b533aec7fb3311af4f1a703998 Mon Sep 17 00:00:00 2001 From: KIM Date: Tue, 7 Nov 2023 10:24:05 +0900 Subject: [PATCH 1/8] feat: hardcoding to main --- src/main/java/baseballGame.java | 98 +++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/main/java/baseballGame.java diff --git a/src/main/java/baseballGame.java b/src/main/java/baseballGame.java new file mode 100644 index 000000000..ea67f08ce --- /dev/null +++ b/src/main/java/baseballGame.java @@ -0,0 +1,98 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class baseballGame{ + public static void main(String[]args) throws IOException { + Random rd = new Random(); + + HashMap baseballNumberSpace = new HashMap<>(); + + for (int i = 1; i < 4; i++){ + String randomNumber = Integer.toString(rd.nextInt(9) + 1); + if (baseballNumberSpace.containsKey(randomNumber)){ + i--; + continue; + } + baseballNumberSpace.put(randomNumber,Integer.toString(i)); + } + + for (Map.Entry entrySet : baseballNumberSpace.entrySet()){ + System.out.println(entrySet.getKey() +" " + entrySet.getValue() ); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + while(true){ + System.out.print("숫자를 입력해 주세요 : "); + String str = reader.readLine(); + + if (str.isEmpty() || str.contains(" ")){ + System.out.println("공백을 입력하셨습니다."); + continue; + } + + if (str.length() != 3){ + System.out.println("3자리를 입력해 주세요."); + continue; + } + + if (str.contains("0")){ + System.out.println("1~9를 입력해 주세요."); + continue; + } + + Set test = new HashSet<>(); + boolean duplicate = false; + + for(int i = 0; i Date: Tue, 7 Nov 2023 14:46:23 +0900 Subject: [PATCH 2/8] feat: add output data --- src/main/java/baseballGame.java | 51 +++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/main/java/baseballGame.java b/src/main/java/baseballGame.java index ea67f08ce..80e07c73d 100644 --- a/src/main/java/baseballGame.java +++ b/src/main/java/baseballGame.java @@ -24,45 +24,45 @@ public static void main(String[]args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); - while(true){ + while(true) { System.out.print("숫자를 입력해 주세요 : "); String str = reader.readLine(); - if (str.isEmpty() || str.contains(" ")){ + if (str.isEmpty() || str.contains(" ")) { System.out.println("공백을 입력하셨습니다."); continue; } - if (str.length() != 3){ + if (str.length() != 3) { System.out.println("3자리를 입력해 주세요."); continue; } - if (str.contains("0")){ + if (str.contains("0")) { System.out.println("1~9를 입력해 주세요."); continue; } Set test = new HashSet<>(); - boolean duplicate = false; - - for(int i = 0; i 0 && ball == 0) { + System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); + } + if (strike == 0 && ball > 0) { + System.out.printf("%s 볼%s", ball, System.lineSeparator()); + } + + if (strike > 0 && ball > 0) { + System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); + } } } } From 07693d9f6e1a6dda792310b532fbeeb67273638a Mon Sep 17 00:00:00 2001 From: ikhyeonKim Date: Tue, 7 Nov 2023 16:59:00 +0900 Subject: [PATCH 3/8] refactor: change number type to String --- src/main/java/baseballGame.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/baseballGame.java b/src/main/java/baseballGame.java index 80e07c73d..dfd64ae92 100644 --- a/src/main/java/baseballGame.java +++ b/src/main/java/baseballGame.java @@ -7,18 +7,18 @@ public class baseballGame{ public static void main(String[]args) throws IOException { Random rd = new Random(); - HashMap baseballNumberSpace = new HashMap<>(); + HashMap baseballNumberSpace = new HashMap<>(); for (int i = 1; i < 4; i++){ - String randomNumber = Integer.toString(rd.nextInt(9) + 1); + Integer randomNumber = rd.nextInt(9) + 1; if (baseballNumberSpace.containsKey(randomNumber)){ i--; continue; } - baseballNumberSpace.put(randomNumber,Integer.toString(i)); + baseballNumberSpace.put(randomNumber,i); } - for (Map.Entry entrySet : baseballNumberSpace.entrySet()){ + for (Map.Entry entrySet : baseballNumberSpace.entrySet()){ System.out.println(entrySet.getKey() +" " + entrySet.getValue() ); } @@ -62,24 +62,24 @@ public static void main(String[]args) throws IOException { int strike = 0; int ball = 0; - if (baseballNumberSpace.get(String.valueOf(str.charAt(0))) != null) { - if (baseballNumberSpace.get(String.valueOf(str.charAt(0))).equals("1")) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(0))) != null) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(0))).equals(1)) { strike = strike + 1; } else { ball = ball + 1; } } - if (baseballNumberSpace.get(String.valueOf(str.charAt(1))) != null) { - if (baseballNumberSpace.get(String.valueOf(str.charAt(1))).equals("2")) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(1))) != null) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(1))).equals(2)) { strike = strike + 1; } else { ball = ball + 1; } } - if (baseballNumberSpace.get(String.valueOf(str.charAt(2))) != null) { - if (baseballNumberSpace.get(String.valueOf(str.charAt(2))).equals("3")) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(2))) != null) { + if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(2))).equals(3)) { strike = strike + 1; } else { ball = ball + 1; From 8c1c5e5089d35699aaad5afaa78b4370a3a95099 Mon Sep 17 00:00:00 2001 From: ikhyeon kim <101814294+kimikhyeon1@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:30:26 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20mvc=ED=8C=A8=ED=84=B4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 13 ++ .../baseball/controller/BaseballGame.java | 84 +++++++++++++ .../java/baseball/model/ComputerNumber.java | 38 ++++++ src/main/java/baseballGame.java | 111 ------------------ src/main/java/global/ValidationInput.java | 53 +++++++++ src/main/java/view/InputView.java | 15 +++ src/main/java/view/OutputView.java | 4 + 7 files changed, 207 insertions(+), 111 deletions(-) create mode 100644 src/main/java/Application.java create mode 100644 src/main/java/baseball/controller/BaseballGame.java create mode 100644 src/main/java/baseball/model/ComputerNumber.java delete mode 100644 src/main/java/baseballGame.java create mode 100644 src/main/java/global/ValidationInput.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 000000000..37aa17a2f --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,13 @@ +import baseball.controller.BaseballGame; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class Application { + public static void main(String[]args) throws IOException { + BaseballGame game = new BaseballGame(); + game.play(); + } +} diff --git a/src/main/java/baseball/controller/BaseballGame.java b/src/main/java/baseball/controller/BaseballGame.java new file mode 100644 index 000000000..59605b4a7 --- /dev/null +++ b/src/main/java/baseball/controller/BaseballGame.java @@ -0,0 +1,84 @@ +package baseball.controller; + +import baseball.model.ComputerNumber; +import global.ValidationInput; +import view.InputView; + +import java.io.IOException; +import java.util.HashMap; + +public class BaseballGame { + private InputView inputView; + private ValidationInput validationInput; + private ComputerNumber computerNumber; + + public BaseballGame() { + this.inputView = new InputView(); + this.validationInput = new ValidationInput(); + this.computerNumber = new ComputerNumber(); + } + + public void play() throws IOException { + HashMap answer = computerNumber.getAnswer(); + String userNumber = validationNumber(); + + int strike = 0; + int ball = 0; + + if (answer.get(Character.getNumericValue(userNumber.charAt(0))) != null) { + if (answer.get(Character.getNumericValue(userNumber.charAt(0))).equals(1)) { + strike = strike + 1; + } else { + ball = ball + 1; + } + } + + if (answer.get(Character.getNumericValue(userNumber.charAt(1))) != null) { + if (answer.get(Character.getNumericValue(userNumber.charAt(1))).equals(2)) { + strike = strike + 1; + } else { + ball = ball + 1; + } + } + + if (answer.get(Character.getNumericValue(userNumber.charAt(2))) != null) { + if (answer.get(Character.getNumericValue(userNumber.charAt(2))).equals(3)) { + strike = strike + 1; + } else { + ball = ball + 1; + } + } + + if (strike == 3) { + System.out.println("정답입니다."); + } + + if (strike == 0 && ball == 0) { + System.out.println("낫씽"); + } + + if (strike > 0 && ball == 0) { + System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); + } + + if (strike == 0 && ball > 0) { + System.out.printf("%s 볼%s", ball, System.lineSeparator()); + } + + if (strike > 0 && ball > 0) { + System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); + } + } + + public String validationNumber() throws IOException { + String input; + while (true) { + input = inputView.getInput(); + if (validationInput.isValidationAll(input)){ + break; + } + } + return input; + } + +} diff --git a/src/main/java/baseball/model/ComputerNumber.java b/src/main/java/baseball/model/ComputerNumber.java new file mode 100644 index 000000000..4227baa34 --- /dev/null +++ b/src/main/java/baseball/model/ComputerNumber.java @@ -0,0 +1,38 @@ +package baseball.model; + +import java.util.HashMap; +import java.util.Random; + +public class ComputerNumber { + private HashMap answer; + private final int START_NUMBER = 1; + private final int END_NUMBER = 3; + Random random = new Random(); + + public ComputerNumber() { + this.answer = getComputerNumber(); + } + + public HashMap getAnswer() { + return answer; + } + + public HashMap getComputerNumber() { + HashMap answer = new HashMap<>(); + + for (int i = START_NUMBER; i <= END_NUMBER; i++){ + int randomNumber = getRandomNumber(); + if (answer.containsKey(randomNumber)){ + i--; + continue; + } + answer.put(randomNumber,i); + } + return answer; + } + + public int getRandomNumber(){ + return random.nextInt(9) + 1; + } + +} diff --git a/src/main/java/baseballGame.java b/src/main/java/baseballGame.java deleted file mode 100644 index dfd64ae92..000000000 --- a/src/main/java/baseballGame.java +++ /dev/null @@ -1,111 +0,0 @@ -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.*; - -public class baseballGame{ - public static void main(String[]args) throws IOException { - Random rd = new Random(); - - HashMap baseballNumberSpace = new HashMap<>(); - - for (int i = 1; i < 4; i++){ - Integer randomNumber = rd.nextInt(9) + 1; - if (baseballNumberSpace.containsKey(randomNumber)){ - i--; - continue; - } - baseballNumberSpace.put(randomNumber,i); - } - - for (Map.Entry entrySet : baseballNumberSpace.entrySet()){ - System.out.println(entrySet.getKey() +" " + entrySet.getValue() ); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); - - while(true) { - System.out.print("숫자를 입력해 주세요 : "); - String str = reader.readLine(); - - if (str.isEmpty() || str.contains(" ")) { - System.out.println("공백을 입력하셨습니다."); - continue; - } - - if (str.length() != 3) { - System.out.println("3자리를 입력해 주세요."); - continue; - } - - if (str.contains("0")) { - System.out.println("1~9를 입력해 주세요."); - continue; - } - - Set test = new HashSet<>(); - boolean isDuplicate = false; - - for (int i = 0; i < str.length(); i++) { - char word = str.charAt(i); - if (!test.add(word)) { - System.out.println("숫자는 중복되면 안됩니다."); - isDuplicate = true; - break; - } - } - - if (isDuplicate) { - continue; - } - - int strike = 0; - int ball = 0; - - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(0))) != null) { - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(0))).equals(1)) { - strike = strike + 1; - } else { - ball = ball + 1; - } - } - - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(1))) != null) { - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(1))).equals(2)) { - strike = strike + 1; - } else { - ball = ball + 1; - } - } - - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(2))) != null) { - if (baseballNumberSpace.get(Character.getNumericValue(str.charAt(2))).equals(3)) { - strike = strike + 1; - } else { - ball = ball + 1; - } - } - - if (strike == 3) { - System.out.println("정답입니다."); - break; - } - - if (strike == 0 && ball == 0) { - System.out.println("낫씽"); - } - - if (strike > 0 && ball == 0) { - System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); - } - - if (strike == 0 && ball > 0) { - System.out.printf("%s 볼%s", ball, System.lineSeparator()); - } - - if (strike > 0 && ball > 0) { - System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); - } - } - } -} diff --git a/src/main/java/global/ValidationInput.java b/src/main/java/global/ValidationInput.java new file mode 100644 index 000000000..470443d0a --- /dev/null +++ b/src/main/java/global/ValidationInput.java @@ -0,0 +1,53 @@ +package global; + +import java.util.HashSet; +import java.util.Set; + +public class ValidationInput { + + public boolean isValidationAll(String input){ + if (!isEmpty(input) || !isValidationLength(input) || !isContainsZero(input) || !isDuplicate(input)){ + return false; + } + return true; + } + public boolean isEmpty(String input) { + if (input.isEmpty() || input.contains(" ")) { + System.out.println("공백을 입력하셨습니다."); + return false; + } + return true; + } + + public boolean isValidationLength(String input){ + if (input.length() != 3) { + System.out.println("3자리를 입력해 주세요."); + return false; + } + return true; + } + + public boolean isContainsZero(String input){ + if (input.contains("0")) { + System.out.println("1~9를 입력해 주세요."); + return false; + } + return true; + } + + public boolean isDuplicate(String input) { + Set number = new HashSet<>(); + + for (int i = 0; i < input.length(); i++) { + char word = input.charAt(i); + if (!number.add(word)) { + System.out.println("숫자는 중복되면 안됩니다."); + return false; + } + } + return true; + } + +} + + diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 000000000..33a4eeca1 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,15 @@ +package view; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class InputView { + + public String getInput() throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + System.out.print("숫자를 입력해 주세요 : "); + return in.readLine(); + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 000000000..d8f9743cc --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,4 @@ +package view; + +public class OutputView { +} From afc08f4d17a62b8be1f9110831fc8df21206e630 Mon Sep 17 00:00:00 2001 From: ikhyeonKim Date: Wed, 8 Nov 2023 10:42:57 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/controller/BaseballGame.java | 80 +++++++++++-------- .../java/baseball/model/ComputerNumber.java | 7 +- src/main/java/view/InputView.java | 18 ++++- 3 files changed, 66 insertions(+), 39 deletions(-) diff --git a/src/main/java/baseball/controller/BaseballGame.java b/src/main/java/baseball/controller/BaseballGame.java index 59605b4a7..fa288ae83 100644 --- a/src/main/java/baseball/controller/BaseballGame.java +++ b/src/main/java/baseball/controller/BaseballGame.java @@ -8,77 +8,89 @@ import java.util.HashMap; public class BaseballGame { - private InputView inputView; - private ValidationInput validationInput; - private ComputerNumber computerNumber; + private final InputView inputView; + private final ValidationInput validationInput; public BaseballGame() { this.inputView = new InputView(); this.validationInput = new ValidationInput(); - this.computerNumber = new ComputerNumber(); } public void play() throws IOException { - HashMap answer = computerNumber.getAnswer(); - String userNumber = validationNumber(); - int strike = 0; - int ball = 0; - if (answer.get(Character.getNumericValue(userNumber.charAt(0))) != null) { - if (answer.get(Character.getNumericValue(userNumber.charAt(0))).equals(1)) { - strike = strike + 1; - } else { - ball = ball + 1; + while (true) { + ComputerNumber computerNumber = new ComputerNumber(); + HashMap answer = computerNumber.getAnswer(); + + while (true) { + String userNumber = validationNumber(); + if (!validationStrikeAndBall(answer, userNumber)) { + break; + } + } - } - if (answer.get(Character.getNumericValue(userNumber.charAt(1))) != null) { - if (answer.get(Character.getNumericValue(userNumber.charAt(1))).equals(2)) { - strike = strike + 1; - } else { - ball = ball + 1; + if (inputView.isExit()) { + return; } } + } + + public String validationNumber() throws IOException { + String input; + + do { + input = inputView.getUserNumber(); + } while (!validationInput.isValidationAll(input)); + + return input; + } + + public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + int strike = 0; + int ball = 0; - if (answer.get(Character.getNumericValue(userNumber.charAt(2))) != null) { - if (answer.get(Character.getNumericValue(userNumber.charAt(2))).equals(3)) { - strike = strike + 1; - } else { - ball = ball + 1; + for (int i = 0; i < userNumber.length(); i++) { + int digit = Character.getNumericValue(userNumber.charAt(i)); + Integer answerValue = answer.get(digit); + + if (answerValue != null) { + if (answerValue.equals(i + 1)) { + strike++; + } else { + ball++; + } } } if (strike == 3) { System.out.println("정답입니다."); + return false; } if (strike == 0 && ball == 0) { System.out.println("낫씽"); + return true; } if (strike > 0 && ball == 0) { System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); + return true; } if (strike == 0 && ball > 0) { System.out.printf("%s 볼%s", ball, System.lineSeparator()); + return true; } if (strike > 0 && ball > 0) { System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); + return true; } + return true; } - public String validationNumber() throws IOException { - String input; - while (true) { - input = inputView.getInput(); - if (validationInput.isValidationAll(input)){ - break; - } - } - return input; - } + } diff --git a/src/main/java/baseball/model/ComputerNumber.java b/src/main/java/baseball/model/ComputerNumber.java index 4227baa34..8acca9a1f 100644 --- a/src/main/java/baseball/model/ComputerNumber.java +++ b/src/main/java/baseball/model/ComputerNumber.java @@ -4,9 +4,7 @@ import java.util.Random; public class ComputerNumber { - private HashMap answer; - private final int START_NUMBER = 1; - private final int END_NUMBER = 3; + private final HashMap answer; Random random = new Random(); public ComputerNumber() { @@ -20,6 +18,9 @@ public HashMap getAnswer() { public HashMap getComputerNumber() { HashMap answer = new HashMap<>(); + int START_NUMBER = 1; + int END_NUMBER = 3; + for (int i = START_NUMBER; i <= END_NUMBER; i++){ int randomNumber = getRandomNumber(); if (answer.containsKey(randomNumber)){ diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 33a4eeca1..2bee40ab4 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -5,11 +5,25 @@ import java.io.InputStreamReader; public class InputView { + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - public String getInput() throws IOException { - BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + public String getUserNumber() throws IOException { System.out.print("숫자를 입력해 주세요 : "); return in.readLine(); } + public boolean isExit() throws IOException { + while(true){ + System.out.println("게임을 계속하시려면 1, 종료하시려면 2를 입력해주세요"); + String input = in.readLine(); + String CONTINUE = "1"; + String EXIT = "2"; + if (input.equals(EXIT)){ + return true; + } + if (input.equals(CONTINUE)){ + return false; + } + } + } } From 80417b073ba2a8d1791db8863aec0230fd4897b3 Mon Sep 17 00:00:00 2001 From: ikhyeonKim Date: Wed, 8 Nov 2023 14:05:47 +0900 Subject: [PATCH 6/8] refac: google style convention & method refactoring --- .../baseball/controller/BaseballGame.java | 79 ++-------------- src/main/java/baseball/model/Computer.java | 94 +++++++++++++++++++ .../java/baseball/model/ComputerNumber.java | 39 -------- src/main/java/global/ValidationInput.java | 2 +- src/main/java/view/InputView.java | 23 ++++- src/main/java/view/OutputView.java | 4 - src/test/java/baseball/BaseBallTest.java | 30 ++++++ 7 files changed, 155 insertions(+), 116 deletions(-) create mode 100644 src/main/java/baseball/model/Computer.java delete mode 100644 src/main/java/baseball/model/ComputerNumber.java delete mode 100644 src/main/java/view/OutputView.java create mode 100644 src/test/java/baseball/BaseBallTest.java diff --git a/src/main/java/baseball/controller/BaseballGame.java b/src/main/java/baseball/controller/BaseballGame.java index fa288ae83..0b701ef21 100644 --- a/src/main/java/baseball/controller/BaseballGame.java +++ b/src/main/java/baseball/controller/BaseballGame.java @@ -1,96 +1,37 @@ package baseball.controller; -import baseball.model.ComputerNumber; -import global.ValidationInput; -import view.InputView; - +import baseball.model.Computer; import java.io.IOException; import java.util.HashMap; +import view.InputView; public class BaseballGame { + private final InputView inputView; - private final ValidationInput validationInput; + private Computer computer; public BaseballGame() { this.inputView = new InputView(); - this.validationInput = new ValidationInput(); + this.computer = new Computer(); } public void play() throws IOException { - while (true) { - ComputerNumber computerNumber = new ComputerNumber(); - HashMap answer = computerNumber.getAnswer(); + HashMap answer = computer.getAnswer(); while (true) { - String userNumber = validationNumber(); - if (!validationStrikeAndBall(answer, userNumber)) { + String userNumber = inputView.validationNumber(); + computer.test(); + if (!computer.validationStrikeAndBall(answer, userNumber)) { break; } - } if (inputView.isExit()) { return; } + computer = computer.newGame(); } } - - public String validationNumber() throws IOException { - String input; - - do { - input = inputView.getUserNumber(); - } while (!validationInput.isValidationAll(input)); - - return input; - } - - public boolean validationStrikeAndBall(HashMap answer, String userNumber) { - int strike = 0; - int ball = 0; - - for (int i = 0; i < userNumber.length(); i++) { - int digit = Character.getNumericValue(userNumber.charAt(i)); - Integer answerValue = answer.get(digit); - - if (answerValue != null) { - if (answerValue.equals(i + 1)) { - strike++; - } else { - ball++; - } - } - } - - if (strike == 3) { - System.out.println("정답입니다."); - return false; - } - - if (strike == 0 && ball == 0) { - System.out.println("낫씽"); - return true; - } - - if (strike > 0 && ball == 0) { - System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); - return true; - } - - if (strike == 0 && ball > 0) { - System.out.printf("%s 볼%s", ball, System.lineSeparator()); - return true; - } - - if (strike > 0 && ball > 0) { - System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); - return true; - } - return true; - } - - - } diff --git a/src/main/java/baseball/model/Computer.java b/src/main/java/baseball/model/Computer.java new file mode 100644 index 000000000..d23e2934c --- /dev/null +++ b/src/main/java/baseball/model/Computer.java @@ -0,0 +1,94 @@ +package baseball.model; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class Computer { + + private final HashMap answer; + Random random = new Random(); + + public Computer() { + this.answer = getComputerNumber(); + } + + public Computer newGame() { + return new Computer(); + } + + public HashMap getComputerNumber() { + HashMap answer = new HashMap<>(); + + int NUMBER_SPACE_SIZE = 3; + + while (answer.size() < NUMBER_SPACE_SIZE) { + int randomNumber = getRandomNumber(); + if (answer.containsKey(randomNumber)) { + continue; + } + answer.put(randomNumber, answer.size() + 1); + } + + return answer; + } + + public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + int strike = 0; + int ball = 0; + + for (int i = 0; i < userNumber.length(); i++) { + int digit = Character.getNumericValue(userNumber.charAt(i)); + Integer answerValue = answer.get(digit); + + if (answerValue != null) { + if (answerValue.equals(i + 1)) { + strike++; + } else { + ball++; + } + } + } + + if (strike == 3) { + System.out.println("정답입니다."); + return false; + } + + if (strike == 0 && ball == 0) { + System.out.println("낫씽"); + return true; + } + + if (strike > 0 && ball == 0) { + System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); + return true; + } + + if (strike == 0 && ball > 0) { + System.out.printf("%s 볼%s", ball, System.lineSeparator()); + return true; + } + + if (strike > 0 && ball > 0) { + System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); + return true; + } + return true; + } + + public int getRandomNumber() { + return random.nextInt(9) + 1; + } + + public HashMap getAnswer() { + return answer; + } + + public void test() { + for (Map.Entry entrySet : answer.entrySet()) { + System.out.println(entrySet.getKey() + " " + entrySet.getValue()); + } + + } +} diff --git a/src/main/java/baseball/model/ComputerNumber.java b/src/main/java/baseball/model/ComputerNumber.java deleted file mode 100644 index 8acca9a1f..000000000 --- a/src/main/java/baseball/model/ComputerNumber.java +++ /dev/null @@ -1,39 +0,0 @@ -package baseball.model; - -import java.util.HashMap; -import java.util.Random; - -public class ComputerNumber { - private final HashMap answer; - Random random = new Random(); - - public ComputerNumber() { - this.answer = getComputerNumber(); - } - - public HashMap getAnswer() { - return answer; - } - - public HashMap getComputerNumber() { - HashMap answer = new HashMap<>(); - - int START_NUMBER = 1; - int END_NUMBER = 3; - - for (int i = START_NUMBER; i <= END_NUMBER; i++){ - int randomNumber = getRandomNumber(); - if (answer.containsKey(randomNumber)){ - i--; - continue; - } - answer.put(randomNumber,i); - } - return answer; - } - - public int getRandomNumber(){ - return random.nextInt(9) + 1; - } - -} diff --git a/src/main/java/global/ValidationInput.java b/src/main/java/global/ValidationInput.java index 470443d0a..3a8c0cc71 100644 --- a/src/main/java/global/ValidationInput.java +++ b/src/main/java/global/ValidationInput.java @@ -5,7 +5,7 @@ public class ValidationInput { - public boolean isValidationAll(String input){ + public boolean isValidationUserNumber(String input){ if (!isEmpty(input) || !isValidationLength(input) || !isContainsZero(input) || !isDuplicate(input)){ return false; } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 2bee40ab4..828963b00 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,11 +1,18 @@ package view; +import global.ValidationInput; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class InputView { + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + private final ValidationInput validationInput; + + public InputView() { + validationInput = new ValidationInput(); + } public String getUserNumber() throws IOException { System.out.print("숫자를 입력해 주세요 : "); @@ -13,17 +20,27 @@ public String getUserNumber() throws IOException { } public boolean isExit() throws IOException { - while(true){ + while (true) { System.out.println("게임을 계속하시려면 1, 종료하시려면 2를 입력해주세요"); String input = in.readLine(); String CONTINUE = "1"; String EXIT = "2"; - if (input.equals(EXIT)){ + if (input.equals(EXIT)) { return true; } - if (input.equals(CONTINUE)){ + if (input.equals(CONTINUE)) { return false; } } } + + public String validationNumber() throws IOException { + String input; + + do { + input = getUserNumber(); + } while (!validationInput.isValidationUserNumber(input)); + + return input; + } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java deleted file mode 100644 index d8f9743cc..000000000 --- a/src/main/java/view/OutputView.java +++ /dev/null @@ -1,4 +0,0 @@ -package view; - -public class OutputView { -} diff --git a/src/test/java/baseball/BaseBallTest.java b/src/test/java/baseball/BaseBallTest.java new file mode 100644 index 000000000..52c4bafc7 --- /dev/null +++ b/src/test/java/baseball/BaseBallTest.java @@ -0,0 +1,30 @@ +package baseball; + +import baseball.model.Computer; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; + +import static org.assertj.core.api.Assertions.*; + +public class BaseBallTest { + //given + //when + //then + + @Test + @DisplayName("컴퓨터 숫자 생성 테스트") + void CREATE_RANDOM_NUMBER_TO_COMPUTER(){ + //given + Computer computer = new Computer(); + computer.getComputerNumber(); + + //when + HashMap number = computer.getAnswer(); + + + //then + assertThat(number.size()).isEqualTo(3); + } +} From f2cf53fdff38b1580aed31b5940a23587eb95fc4 Mon Sep 17 00:00:00 2001 From: ikhyeonKim Date: Wed, 8 Nov 2023 14:16:05 +0900 Subject: [PATCH 7/8] refac: remove test method --- .../baseball/controller/BaseballGame.java | 3 +- src/main/java/baseball/model/Computer.java | 28 ++++++++----------- src/test/java/baseball/BaseBallTest.java | 15 ++++------ 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/main/java/baseball/controller/BaseballGame.java b/src/main/java/baseball/controller/BaseballGame.java index 0b701ef21..190f1d5a8 100644 --- a/src/main/java/baseball/controller/BaseballGame.java +++ b/src/main/java/baseball/controller/BaseballGame.java @@ -22,8 +22,7 @@ public void play() throws IOException { while (true) { String userNumber = inputView.validationNumber(); - computer.test(); - if (!computer.validationStrikeAndBall(answer, userNumber)) { + if (computer.validationStrikeAndBall(answer, userNumber)) { break; } } diff --git a/src/main/java/baseball/model/Computer.java b/src/main/java/baseball/model/Computer.java index d23e2934c..ebe0b93fd 100644 --- a/src/main/java/baseball/model/Computer.java +++ b/src/main/java/baseball/model/Computer.java @@ -1,13 +1,11 @@ package baseball.model; import java.util.HashMap; -import java.util.Map; import java.util.Random; public class Computer { private final HashMap answer; - Random random = new Random(); public Computer() { this.answer = getComputerNumber(); @@ -33,7 +31,7 @@ public HashMap getComputerNumber() { return answer; } - public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + public int[] calculationStrikeAndBall(HashMap answer, String userNumber) { int strike = 0; int ball = 0; @@ -49,46 +47,44 @@ public boolean validationStrikeAndBall(HashMap answer, String } } } + return new int[]{strike, ball}; + } + + public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + int[] strikeAndBall = calculationStrikeAndBall(answer, userNumber); + int strike = strikeAndBall[0]; + int ball = strikeAndBall[1]; if (strike == 3) { System.out.println("정답입니다."); - return false; } if (strike == 0 && ball == 0) { System.out.println("낫씽"); - return true; } if (strike > 0 && ball == 0) { System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); - return true; } if (strike == 0 && ball > 0) { System.out.printf("%s 볼%s", ball, System.lineSeparator()); - return true; } if (strike > 0 && ball > 0) { System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); - return true; } - return true; + + return strike == 3; } public int getRandomNumber() { + Random random = new Random(); return random.nextInt(9) + 1; } public HashMap getAnswer() { return answer; } - - public void test() { - for (Map.Entry entrySet : answer.entrySet()) { - System.out.println(entrySet.getKey() + " " + entrySet.getValue()); - } - - } } + diff --git a/src/test/java/baseball/BaseBallTest.java b/src/test/java/baseball/BaseBallTest.java index 52c4bafc7..0dbd2fddc 100644 --- a/src/test/java/baseball/BaseBallTest.java +++ b/src/test/java/baseball/BaseBallTest.java @@ -1,28 +1,23 @@ package baseball; +import static org.assertj.core.api.Assertions.assertThat; + import baseball.model.Computer; +import java.util.HashMap; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.HashMap; - -import static org.assertj.core.api.Assertions.*; - public class BaseBallTest { - //given - //when - //then @Test @DisplayName("컴퓨터 숫자 생성 테스트") - void CREATE_RANDOM_NUMBER_TO_COMPUTER(){ + void CREATE_RANDOM_NUMBER() { //given Computer computer = new Computer(); computer.getComputerNumber(); //when - HashMap number = computer.getAnswer(); - + HashMap number = computer.getAnswer(); //then assertThat(number.size()).isEqualTo(3); From 4e5981eec016a6206798baa18e0e448649ec006b Mon Sep 17 00:00:00 2001 From: ikhyeonKim Date: Wed, 8 Nov 2023 14:16:05 +0900 Subject: [PATCH 8/8] refac: remove test method --- .../baseball/controller/BaseballGame.java | 3 +- src/main/java/baseball/model/Computer.java | 32 ++++++++----------- src/main/java/global/ValidationInput.java | 12 ++++--- src/test/java/baseball/BaseBallTest.java | 17 ++++------ 4 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/main/java/baseball/controller/BaseballGame.java b/src/main/java/baseball/controller/BaseballGame.java index 0b701ef21..190f1d5a8 100644 --- a/src/main/java/baseball/controller/BaseballGame.java +++ b/src/main/java/baseball/controller/BaseballGame.java @@ -22,8 +22,7 @@ public void play() throws IOException { while (true) { String userNumber = inputView.validationNumber(); - computer.test(); - if (!computer.validationStrikeAndBall(answer, userNumber)) { + if (computer.validationStrikeAndBall(answer, userNumber)) { break; } } diff --git a/src/main/java/baseball/model/Computer.java b/src/main/java/baseball/model/Computer.java index d23e2934c..24d711feb 100644 --- a/src/main/java/baseball/model/Computer.java +++ b/src/main/java/baseball/model/Computer.java @@ -1,23 +1,21 @@ package baseball.model; import java.util.HashMap; -import java.util.Map; import java.util.Random; public class Computer { private final HashMap answer; - Random random = new Random(); public Computer() { - this.answer = getComputerNumber(); + this.answer = createAnswer(); } public Computer newGame() { return new Computer(); } - public HashMap getComputerNumber() { + public HashMap createAnswer() { HashMap answer = new HashMap<>(); int NUMBER_SPACE_SIZE = 3; @@ -33,7 +31,7 @@ public HashMap getComputerNumber() { return answer; } - public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + public int[] calculationStrikeAndBall(HashMap answer, String userNumber) { int strike = 0; int ball = 0; @@ -49,46 +47,44 @@ public boolean validationStrikeAndBall(HashMap answer, String } } } + return new int[]{strike, ball}; + } + + public boolean validationStrikeAndBall(HashMap answer, String userNumber) { + int[] strikeAndBall = calculationStrikeAndBall(answer, userNumber); + int strike = strikeAndBall[0]; + int ball = strikeAndBall[1]; if (strike == 3) { System.out.println("정답입니다."); - return false; } if (strike == 0 && ball == 0) { System.out.println("낫씽"); - return true; } if (strike > 0 && ball == 0) { System.out.printf("%s 스트라이크%s", strike, System.lineSeparator()); - return true; } if (strike == 0 && ball > 0) { System.out.printf("%s 볼%s", ball, System.lineSeparator()); - return true; } if (strike > 0 && ball > 0) { System.out.printf("%s 스트라이크, %s 볼%s", strike, ball, System.lineSeparator()); - return true; } - return true; + + return strike == 3; } public int getRandomNumber() { + Random random = new Random(); return random.nextInt(9) + 1; } public HashMap getAnswer() { return answer; } - - public void test() { - for (Map.Entry entrySet : answer.entrySet()) { - System.out.println(entrySet.getKey() + " " + entrySet.getValue()); - } - - } } + diff --git a/src/main/java/global/ValidationInput.java b/src/main/java/global/ValidationInput.java index 3a8c0cc71..7b2d5cc3e 100644 --- a/src/main/java/global/ValidationInput.java +++ b/src/main/java/global/ValidationInput.java @@ -5,21 +5,23 @@ public class ValidationInput { - public boolean isValidationUserNumber(String input){ - if (!isEmpty(input) || !isValidationLength(input) || !isContainsZero(input) || !isDuplicate(input)){ + public boolean isValidationUserNumber(String input) { + if (!isEmpty(input) || !isValidationLength(input) || !isContainsZero(input) || !isDuplicate( + input)) { return false; } return true; } + public boolean isEmpty(String input) { if (input.isEmpty() || input.contains(" ")) { - System.out.println("공백을 입력하셨습니다."); + System.out.println("공백을 입력하였습니다."); return false; } return true; } - public boolean isValidationLength(String input){ + public boolean isValidationLength(String input) { if (input.length() != 3) { System.out.println("3자리를 입력해 주세요."); return false; @@ -27,7 +29,7 @@ public boolean isValidationLength(String input){ return true; } - public boolean isContainsZero(String input){ + public boolean isContainsZero(String input) { if (input.contains("0")) { System.out.println("1~9를 입력해 주세요."); return false; diff --git a/src/test/java/baseball/BaseBallTest.java b/src/test/java/baseball/BaseBallTest.java index 52c4bafc7..e7941c100 100644 --- a/src/test/java/baseball/BaseBallTest.java +++ b/src/test/java/baseball/BaseBallTest.java @@ -1,28 +1,23 @@ package baseball; +import static org.assertj.core.api.Assertions.assertThat; + import baseball.model.Computer; +import java.util.HashMap; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.HashMap; - -import static org.assertj.core.api.Assertions.*; - public class BaseBallTest { - //given - //when - //then @Test @DisplayName("컴퓨터 숫자 생성 테스트") - void CREATE_RANDOM_NUMBER_TO_COMPUTER(){ + void CREATE_RANDOM_NUMBER() { //given Computer computer = new Computer(); - computer.getComputerNumber(); + computer.createAnswer(); //when - HashMap number = computer.getAnswer(); - + HashMap number = computer.getAnswer(); //then assertThat(number.size()).isEqualTo(3);