From 691e6dcf7ba1fd5dd4e794cb8c7c25b2380e8f70 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:14:10 +0900 Subject: [PATCH 01/14] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2..314cfd18e5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,50 @@ +## πŸ“Œ ꡬ쑰 +- computer +- player +- game +- baseball_number +- end_number +- answer + + +## πŸ“Œ μ‹œλ‚˜λ¦¬μ˜€ +1. 숫자 야ꡬ κ²Œμž„μ„ μ‹œμž‘ν•œλ‹€. +2. ν”Œλ ˆμ΄μ–΄κ°€ 컴퓨터에 숫자λ₯Ό μž…λ ₯ν•œλ‹€. +3. 컴퓨터가 μž…λ ₯ν•œ μˆ«μžμ— λŒ€ν•œ κ²°κ³Όλ₯Ό ν”Œλ ˆμ΄μ–΄μ—κ²Œ 보여쀀닀. +4. 컴퓨터가 κ²Œμž„ μ’…λ£Œ μ—¬λΆ€λ₯Ό λ¬»λŠ”λ‹€. + 4-a. κ²Œμž„μ„ μ’…λ£Œν•œλ‹€. + 4-b. κ²Œμž„μ„ μž¬μ‹œμž‘ν•œλ‹€. + +### μ—λŸ¬ λ°œμƒ +2a. ν”Œλ ˆμ΄μ–΄ μˆ«μžκ°€ μ•„λ‹Œ λ‹€λ₯Έ 값을 μž…λ ₯ν•œλ‹€. +2b. ν”Œλ ˆμ΄μ–΄ 숫자λ₯Ό μž…λ ₯ν•˜μ§€λ§Œ, 3μžλ¦¬κ°€ μ•„λ‹Œκ°’μ„ μž…λ ₯ν•œλ‹€. +2c. ν”Œλ ˆμ΄μ–΄ μ€‘λ³΅λœ 숫자λ₯Ό μž…λ ₯ν•œλ‹€. + +4a. ν”Œλ ˆμ΄μ–΄ μˆ«μžκ°€ μ•„λ‹Œ λ‹€λ₯Έ 값을 μž…λ ₯ν•œλ‹€. +4b. ν”Œλ ˆμ΄μ–΄ 숫자λ₯Ό μž…λ ₯ν•˜μ§€λ§Œ, 1μžλ¦¬κ°€ μ•„λ‹Œκ°’μ„ μž…λ ₯ν•œλ‹€. + +--- + +## πŸ€”κΈ°λŠ₯ +1. player(view) +- [ ] 숫자λ₯Ό μž…λ ₯ν•˜λΌ. +- [ ] κ²Œμž„μ’…λ£Œ μ—¬λΆ€λ₯Ό 말해라. + +2. game +- [ ] κ²Œμž„μ„ μ‹œμž‘ν•΄λΌ. +- [ ] κ²Œμž„μ„ μ’…λ£Œν•˜λΌ. +- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ. + +3. computer +- [ ] μ •λ‹΅ 숫자λ₯Ό λ§Œλ“€μ–΄λΌ. +- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ. + +4. baseball_number +- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ. + +5. answer +- [ ] baseball_numberλ₯Ό κ³„μ‚°ν•˜λΌ. +- [ ] 좜λ ₯ν•  λ¬Έμžμ—΄μ„ λ§Œλ“€μ–΄λΌ. + +6. end_number +- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ \ No newline at end of file From 83d469f17cb75298d723930b7c9f0a529801ccb5 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:24:41 +0900 Subject: [PATCH 02/14] =?UTF-8?q?feat:=20Game=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/game/Game.java | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/baseball/game/Game.java diff --git a/src/main/java/baseball/game/Game.java b/src/main/java/baseball/game/Game.java new file mode 100644 index 0000000000..254e61cb75 --- /dev/null +++ b/src/main/java/baseball/game/Game.java @@ -0,0 +1,30 @@ +package baseball.game; + +import baseball.domain.Answer; +import baseball.domain.BaseballNumber; +import baseball.domain.Computer; +import baseball.domain.EndNumber; +import baseball.view.View; + +public class Game { + private Computer computer; + + public Game(){ + this.computer = new Computer(); + } + + public void start(){ + View.init(); + Answer answer; + do { + BaseballNumber baseballNumber = new BaseballNumber(View.input()); + answer = computer.calculate(baseballNumber); + View.showAnswer(answer.getString()); + }while(answer.isStatusWRONG()); + } + + public boolean end(){ + EndNumber endNumber = new EndNumber(View.showEnd()); + return endNumber.isEnd(); + } +} From 2d64635d3c50ee6a04e16956d1b317941a939638 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:24:57 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20View=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/view/View.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/baseball/view/View.java diff --git a/src/main/java/baseball/view/View.java b/src/main/java/baseball/view/View.java new file mode 100644 index 0000000000..e30c038d6f --- /dev/null +++ b/src/main/java/baseball/view/View.java @@ -0,0 +1,26 @@ +package baseball.view; + +import baseball.domain.Answer; +import camp.nextstep.edu.missionutils.Console; + +public class View { + + public static void init(){ + System.out.println("숫자 야ꡬ κ²Œμž„μ„ μ‹œμž‘ν•©λ‹ˆλ‹€."); + } + + public static String input(){ + System.out.println("숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : "); + return Console.readLine(); + } + + public static void showAnswer(String statement){ + System.out.println(statement); + } + + public static String showEnd(){ + System.out.println("3개의 숫자λ₯Ό λͺ¨λ‘ λ§žνžˆμ…¨μŠ΅λ‹ˆλ‹€! κ²Œμž„ μ’…λ£Œ"); + System.out.println("κ²Œμž„μ„ μƒˆλ‘œ μ‹œμž‘ν•˜λ €λ©΄ 1, μ’…λ£Œν•˜λ €λ©΄ 2λ₯Ό μž…λ ₯ν•˜μ„Έμš”."); + return Console.readLine(); + } +} From d56ff35f32f78e0a210c5944eddd02730db7e4d8 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:25:10 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20domain=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Answer.java | 46 ++++++++++++++++++ .../java/baseball/domain/AnswerStatus.java | 5 ++ .../java/baseball/domain/BaseballNumber.java | 48 +++++++++++++++++++ src/main/java/baseball/domain/Computer.java | 27 +++++++++++ src/main/java/baseball/domain/EndNumber.java | 35 ++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 src/main/java/baseball/domain/Answer.java create mode 100644 src/main/java/baseball/domain/AnswerStatus.java create mode 100644 src/main/java/baseball/domain/BaseballNumber.java create mode 100644 src/main/java/baseball/domain/Computer.java create mode 100644 src/main/java/baseball/domain/EndNumber.java diff --git a/src/main/java/baseball/domain/Answer.java b/src/main/java/baseball/domain/Answer.java new file mode 100644 index 0000000000..6a17f88f09 --- /dev/null +++ b/src/main/java/baseball/domain/Answer.java @@ -0,0 +1,46 @@ +package baseball.domain; + +import java.util.List; +import java.util.stream.IntStream; + +public class Answer { + private AnswerStatus status = AnswerStatus.WRONG; + private Long strike; + private Long ball; + + public Answer(List answerNumbers, List playerNumbers) { + strike = countStrike(answerNumbers, playerNumbers); + ball = countContain(answerNumbers, playerNumbers) - strike; + if (Long.valueOf(BaseballNumber.LENGTH).equals(strike)) { + this.status = AnswerStatus.RIGHT; + } + } + + private Long countContain(List answerNumbers, List playerNumbers) { + return answerNumbers.stream().filter(playerNumbers::contains).count(); + } + + private Long countStrike(List answerNumbers, List playerNumbers) { + return IntStream.range(0, BaseballNumber.LENGTH) + .filter(i -> answerNumbers.get(i).equals(playerNumbers.get(i))) + .count(); + } + + public boolean isStatusWRONG() { + return status.equals(AnswerStatus.WRONG); + } + + public String getString() { + String statement = ""; + if (ball > 0) { + statement = statement.concat(String.format("%dλ³Ό ", ball)); + } + if (strike > 0) { + statement = statement.concat(String.format("%d슀트라이크", strike)); + } + if (statement.isEmpty()) { + statement = statement.concat("λ‚«μ‹±"); + } + return statement; + } +} diff --git a/src/main/java/baseball/domain/AnswerStatus.java b/src/main/java/baseball/domain/AnswerStatus.java new file mode 100644 index 0000000000..fe0d47eba4 --- /dev/null +++ b/src/main/java/baseball/domain/AnswerStatus.java @@ -0,0 +1,5 @@ +package baseball.domain; + +public enum AnswerStatus { + RIGHT, WRONG; +} diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java new file mode 100644 index 0000000000..1f8b58de23 --- /dev/null +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -0,0 +1,48 @@ +package baseball.domain; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class BaseballNumber { + public static final Integer LENGTH = 3; + private final String REGEXP_PATTERN_INTEGER = String.format("[1-9]{%d}", LENGTH); + private List numbers; + + public BaseballNumber(String input) { + validate(input); + this.numbers = Stream.of(input.split("")).mapToInt(Integer::parseInt).boxed().toList(); + } + + private void validate(String input) { + isCorrectLength(input); + isInteger(input); + isDuplicate(input); + } + + private void isCorrectLength(String input) { + if (input.length() != LENGTH) { + throw new IllegalArgumentException("μž…λ ₯의 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); + } + } + + private void isInteger(String input) { + if (!Pattern.matches(REGEXP_PATTERN_INTEGER, input)) { + throw new IllegalArgumentException("μž…λ ₯이 μ •μˆ˜λ‘œ 이루어지지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€."); + } + } + + private void isDuplicate(String input) { + if (Stream.of(input.split("")).collect(Collectors.toSet()).size() < LENGTH) { + throw new IllegalArgumentException("μž…λ ₯ 쀑 쀑볡이 μžˆμŠ΅λ‹ˆλ‹€."); + } + } + + public List getNumbers() { + return new ArrayList<>(this.numbers); + } +} \ No newline at end of file diff --git a/src/main/java/baseball/domain/Computer.java b/src/main/java/baseball/domain/Computer.java new file mode 100644 index 0000000000..835500dda4 --- /dev/null +++ b/src/main/java/baseball/domain/Computer.java @@ -0,0 +1,27 @@ +package baseball.domain; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; + +public class Computer { + private List answerNumbers; + + public Computer(){ + List computer = new ArrayList<>(); + while (computer.size() < BaseballNumber.LENGTH) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + this.answerNumbers = computer; +// System.out.println(answerNumbers); + } + + public Answer calculate(BaseballNumber baseballNumber){ + List playerNumbers = baseballNumber.getNumbers(); + return new Answer(answerNumbers, playerNumbers); + } +} diff --git a/src/main/java/baseball/domain/EndNumber.java b/src/main/java/baseball/domain/EndNumber.java new file mode 100644 index 0000000000..aff376058e --- /dev/null +++ b/src/main/java/baseball/domain/EndNumber.java @@ -0,0 +1,35 @@ +package baseball.domain; + +import java.util.regex.Pattern; + +public class EndNumber { + public static final Integer LENGTH = 1; + private final String REGEXP_PATTERN_FORMAT = String.format("[1-2]{%d}",LENGTH); + private Integer number; + + public EndNumber(String input){ + validate(input); + this.number = Integer.parseInt(input); + } + + private void validate(String input){ + isCorrectLength(input); + isCorrectNumber(input); + } + + private void isCorrectLength(String input){ + if (input.length() != LENGTH) { + throw new IllegalArgumentException("μž…λ ₯ 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); + } + } + + private void isCorrectNumber(String input){ + if (!Pattern.matches(REGEXP_PATTERN_FORMAT, input)) { + throw new IllegalArgumentException("μž…λ ₯이 μ£Όμ–΄μ§„ μˆ«μžκ°€ μ•„λ‹™λ‹ˆλ‹€."); + } + } + + public boolean isEnd(){ + return this.number == 2; + } +} From b7801be537c7b72d09460cbe42663cf6a5b1b7e0 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:25:24 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat:=20Application=20main=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= 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, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..fecd518cdb 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,15 @@ package baseball; +import baseball.game.Game; + public class Application { public static void main(String[] args) { // TODO: ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„ + boolean end = false; + while (!end) { + Game game = new Game(); + game.start(); + end = game.end(); + } } -} +} \ No newline at end of file From f3d8ae8b3af260d8a0cf6a5b3d71f7fdcafd4ef7 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:35:29 +0900 Subject: [PATCH 06/14] =?UTF-8?q?comment:=20Computer=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Computer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baseball/domain/Computer.java b/src/main/java/baseball/domain/Computer.java index 835500dda4..59a7ae44a5 100644 --- a/src/main/java/baseball/domain/Computer.java +++ b/src/main/java/baseball/domain/Computer.java @@ -17,7 +17,6 @@ public Computer(){ } } this.answerNumbers = computer; -// System.out.println(answerNumbers); } public Answer calculate(BaseballNumber baseballNumber){ From 6708a64dd147a6dc1d8183477af2bda54f69c3dd Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:40:09 +0900 Subject: [PATCH 07/14] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index 314cfd18e5..5cc24ace0d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,24 +27,25 @@ ## πŸ€”κΈ°λŠ₯ 1. player(view) -- [ ] 숫자λ₯Ό μž…λ ₯ν•˜λΌ. -- [ ] κ²Œμž„μ’…λ£Œ μ—¬λΆ€λ₯Ό 말해라. +- [ ] 숫자λ₯Ό μž…λ ₯ν•˜λΌ +- [ ] κ²Œμž„μ’…λ£Œ μ—¬λΆ€λ₯Ό 말해라 2. game -- [ ] κ²Œμž„μ„ μ‹œμž‘ν•΄λΌ. -- [ ] κ²Œμž„μ„ μ’…λ£Œν•˜λΌ. -- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ. +- [ ] κ²Œμž„μ„ μ‹œμž‘ν•΄λΌ +- [ ] κ²Œμž„μ„ μ’…λ£Œν•˜λΌ +- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ 3. computer -- [ ] μ •λ‹΅ 숫자λ₯Ό λ§Œλ“€μ–΄λΌ. -- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ. +- [ ] μ •λ‹΅ 숫자λ₯Ό λ§Œλ“€μ–΄λΌ +- [ ] ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•΄λΌ 4. baseball_number -- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ. +- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ 5. answer -- [ ] baseball_numberλ₯Ό κ³„μ‚°ν•˜λΌ. -- [ ] 좜λ ₯ν•  λ¬Έμžμ—΄μ„ λ§Œλ“€μ–΄λΌ. +- [ ] baseball_numberλ₯Ό κ³„μ‚°ν•˜λΌ +- [ ] 좜λ ₯ν•  λ¬Έμžμ—΄μ„ λ§Œλ“€μ–΄λΌ 6. end_number -- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ \ No newline at end of file +- [ ] 숫자λ₯Ό κ²€μ¦ν•˜λΌ +- [ ] game을 μ’…λ£Œν• μ§€ κ²°μ •ν•˜λΌ \ No newline at end of file From b8e2d5ce85697b395d588fe3588d0281428661bb Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:41:05 +0900 Subject: [PATCH 08/14] =?UTF-8?q?comment:=20BaseballNumber=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/BaseballNumber.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index 1f8b58de23..bddcaf2d00 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -2,7 +2,6 @@ import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; From b582d2468608488676d9aefd71c37630822ff342 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Sun, 14 Jul 2024 18:45:12 +0900 Subject: [PATCH 09/14] =?UTF-8?q?style:=20Application=20while=20->=20do=20?= =?UTF-8?q?while=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= 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, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index fecd518cdb..fbfd9ce3be 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -6,10 +6,10 @@ public class Application { public static void main(String[] args) { // TODO: ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„ boolean end = false; - while (!end) { + do { Game game = new Game(); game.start(); end = game.end(); - } + }while(!end); } } \ No newline at end of file From 2fc606b602af346a4cbd1d93881cb0476baabe5e Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Mon, 15 Jul 2024 00:39:45 +0900 Subject: [PATCH 10/14] =?UTF-8?q?style:=20EndNumber=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/EndNumber.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baseball/domain/EndNumber.java b/src/main/java/baseball/domain/EndNumber.java index aff376058e..7edd66c02a 100644 --- a/src/main/java/baseball/domain/EndNumber.java +++ b/src/main/java/baseball/domain/EndNumber.java @@ -19,13 +19,13 @@ private void validate(String input){ private void isCorrectLength(String input){ if (input.length() != LENGTH) { - throw new IllegalArgumentException("μž…λ ₯ 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); + throw new IllegalArgumentException("μž…λ ₯의 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } private void isCorrectNumber(String input){ if (!Pattern.matches(REGEXP_PATTERN_FORMAT, input)) { - throw new IllegalArgumentException("μž…λ ₯이 μ£Όμ–΄μ§„ μˆ«μžκ°€ μ•„λ‹™λ‹ˆλ‹€."); + throw new IllegalArgumentException("μž…λ ₯값이 ν˜•μ‹μ„ λ§Œμ‘±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } From f026231332e9f97f16ac3cb76d9f9ed4a1e44ff2 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Mon, 15 Jul 2024 00:45:11 +0900 Subject: [PATCH 11/14] =?UTF-8?q?style:=20Computer=20=EB=9E=9C=EB=8D=A4?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Computer.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/baseball/domain/Computer.java b/src/main/java/baseball/domain/Computer.java index 59a7ae44a5..b91fd632bf 100644 --- a/src/main/java/baseball/domain/Computer.java +++ b/src/main/java/baseball/domain/Computer.java @@ -9,14 +9,18 @@ public class Computer { private List answerNumbers; public Computer(){ - List computer = new ArrayList<>(); - while (computer.size() < BaseballNumber.LENGTH) { + this.answerNumbers = makeRandomNumbers(); + } + + private List makeRandomNumbers(){ + List numbers = new ArrayList<>(); + while (numbers.size() < BaseballNumber.BASEBALL_LENGTH) { int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); + if (!numbers.contains(randomNumber)) { + numbers.add(randomNumber); } } - this.answerNumbers = computer; + return numbers; } public Answer calculate(BaseballNumber baseballNumber){ From aacb883c5328b9bb5f479221cc7f8e510afde4d7 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Mon, 15 Jul 2024 00:46:10 +0900 Subject: [PATCH 12/14] =?UTF-8?q?style:=20=EB=B3=80=EC=88=98=20final?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EA=B8=B8=EC=9D=B4?= =?UTF-8?q?=20=EC=83=81=EC=88=98=20=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Answer.java | 8 ++++---- src/main/java/baseball/domain/BaseballNumber.java | 10 +++++----- src/main/java/baseball/domain/EndNumber.java | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/baseball/domain/Answer.java b/src/main/java/baseball/domain/Answer.java index 6a17f88f09..d068820baf 100644 --- a/src/main/java/baseball/domain/Answer.java +++ b/src/main/java/baseball/domain/Answer.java @@ -5,13 +5,13 @@ public class Answer { private AnswerStatus status = AnswerStatus.WRONG; - private Long strike; - private Long ball; + private final Long strike; + private final Long ball; public Answer(List answerNumbers, List playerNumbers) { strike = countStrike(answerNumbers, playerNumbers); ball = countContain(answerNumbers, playerNumbers) - strike; - if (Long.valueOf(BaseballNumber.LENGTH).equals(strike)) { + if (Long.valueOf(BaseballNumber.BASEBALL_LENGTH).equals(strike)) { this.status = AnswerStatus.RIGHT; } } @@ -21,7 +21,7 @@ private Long countContain(List answerNumbers, List playerNumbe } private Long countStrike(List answerNumbers, List playerNumbers) { - return IntStream.range(0, BaseballNumber.LENGTH) + return IntStream.range(0, BaseballNumber.BASEBALL_LENGTH) .filter(i -> answerNumbers.get(i).equals(playerNumbers.get(i))) .count(); } diff --git a/src/main/java/baseball/domain/BaseballNumber.java b/src/main/java/baseball/domain/BaseballNumber.java index bddcaf2d00..98a4c5a680 100644 --- a/src/main/java/baseball/domain/BaseballNumber.java +++ b/src/main/java/baseball/domain/BaseballNumber.java @@ -8,9 +8,9 @@ import java.util.stream.Stream; public class BaseballNumber { - public static final Integer LENGTH = 3; - private final String REGEXP_PATTERN_INTEGER = String.format("[1-9]{%d}", LENGTH); - private List numbers; + public static final Integer BASEBALL_LENGTH = 3; + private final String REGEXP_PATTERN_INTEGER = String.format("[1-9]{%d}", BASEBALL_LENGTH); + private final List numbers; public BaseballNumber(String input) { validate(input); @@ -24,7 +24,7 @@ private void validate(String input) { } private void isCorrectLength(String input) { - if (input.length() != LENGTH) { + if (input.length() != BASEBALL_LENGTH) { throw new IllegalArgumentException("μž…λ ₯의 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } @@ -36,7 +36,7 @@ private void isInteger(String input) { } private void isDuplicate(String input) { - if (Stream.of(input.split("")).collect(Collectors.toSet()).size() < LENGTH) { + if (Stream.of(input.split("")).collect(Collectors.toSet()).size() < BASEBALL_LENGTH) { throw new IllegalArgumentException("μž…λ ₯ 쀑 쀑볡이 μžˆμŠ΅λ‹ˆλ‹€."); } } diff --git a/src/main/java/baseball/domain/EndNumber.java b/src/main/java/baseball/domain/EndNumber.java index 7edd66c02a..fa0e77e1c1 100644 --- a/src/main/java/baseball/domain/EndNumber.java +++ b/src/main/java/baseball/domain/EndNumber.java @@ -3,9 +3,9 @@ import java.util.regex.Pattern; public class EndNumber { - public static final Integer LENGTH = 1; - private final String REGEXP_PATTERN_FORMAT = String.format("[1-2]{%d}",LENGTH); - private Integer number; + public static final Integer END_LENGTH = 1; + private final String REGEXP_PATTERN_FORMAT = String.format("[1-2]{%d}", END_LENGTH); + private final Integer number; public EndNumber(String input){ validate(input); @@ -18,7 +18,7 @@ private void validate(String input){ } private void isCorrectLength(String input){ - if (input.length() != LENGTH) { + if (input.length() != END_LENGTH) { throw new IllegalArgumentException("μž…λ ₯의 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } From ea17aa5d27780df6b9a5e7cc0ae93519e04f82cf Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Mon, 15 Jul 2024 01:08:36 +0900 Subject: [PATCH 13/14] =?UTF-8?q?refactor:=20AnswerStatus=20->=20Answer=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/baseball/domain/Answer.java | 2 ++ src/main/java/baseball/domain/AnswerStatus.java | 5 ----- 2 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 src/main/java/baseball/domain/AnswerStatus.java diff --git a/src/main/java/baseball/domain/Answer.java b/src/main/java/baseball/domain/Answer.java index d068820baf..3f6061ccb8 100644 --- a/src/main/java/baseball/domain/Answer.java +++ b/src/main/java/baseball/domain/Answer.java @@ -4,6 +4,8 @@ import java.util.stream.IntStream; public class Answer { + private enum AnswerStatus {RIGHT, WRONG}; + private AnswerStatus status = AnswerStatus.WRONG; private final Long strike; private final Long ball; diff --git a/src/main/java/baseball/domain/AnswerStatus.java b/src/main/java/baseball/domain/AnswerStatus.java deleted file mode 100644 index fe0d47eba4..0000000000 --- a/src/main/java/baseball/domain/AnswerStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package baseball.domain; - -public enum AnswerStatus { - RIGHT, WRONG; -} From 159b5a2041a9fbfd3a196b2b4a5e70931f7041e2 Mon Sep 17 00:00:00 2001 From: hyunzzii Date: Mon, 15 Jul 2024 03:56:58 +0900 Subject: [PATCH 14/14] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes src/main/java/baseball/Application.java | 2 +- src/main/java/baseball/domain/Answer.java | 2 +- src/main/java/baseball/domain/Computer.java | 7 +++---- src/main/java/baseball/domain/EndNumber.java | 10 +++++----- src/main/java/baseball/game/Game.java | 8 ++++---- src/main/java/baseball/view/View.java | 9 ++++----- 7 files changed, 18 insertions(+), 20 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 answerNumbers; - public Computer(){ + public Computer() { this.answerNumbers = makeRandomNumbers(); } - private List makeRandomNumbers(){ + private List makeRandomNumbers() { List numbers = new ArrayList<>(); while (numbers.size() < BaseballNumber.BASEBALL_LENGTH) { int randomNumber = Randoms.pickNumberInRange(1, 9); @@ -23,7 +22,7 @@ private List makeRandomNumbers(){ return numbers; } - public Answer calculate(BaseballNumber baseballNumber){ + public Answer calculate(BaseballNumber baseballNumber) { List playerNumbers = baseballNumber.getNumbers(); return new Answer(answerNumbers, playerNumbers); } diff --git a/src/main/java/baseball/domain/EndNumber.java b/src/main/java/baseball/domain/EndNumber.java index fa0e77e1c1..2c1d670a43 100644 --- a/src/main/java/baseball/domain/EndNumber.java +++ b/src/main/java/baseball/domain/EndNumber.java @@ -7,29 +7,29 @@ public class EndNumber { private final String REGEXP_PATTERN_FORMAT = String.format("[1-2]{%d}", END_LENGTH); private final Integer number; - public EndNumber(String input){ + public EndNumber(String input) { validate(input); this.number = Integer.parseInt(input); } - private void validate(String input){ + private void validate(String input) { isCorrectLength(input); isCorrectNumber(input); } - private void isCorrectLength(String input){ + private void isCorrectLength(String input) { if (input.length() != END_LENGTH) { throw new IllegalArgumentException("μž…λ ₯의 길이가 μ•Œλ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } - private void isCorrectNumber(String input){ + private void isCorrectNumber(String input) { if (!Pattern.matches(REGEXP_PATTERN_FORMAT, input)) { throw new IllegalArgumentException("μž…λ ₯값이 ν˜•μ‹μ„ λ§Œμ‘±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); } } - public boolean isEnd(){ + public boolean isEnd() { return this.number == 2; } } diff --git a/src/main/java/baseball/game/Game.java b/src/main/java/baseball/game/Game.java index 254e61cb75..28b1138159 100644 --- a/src/main/java/baseball/game/Game.java +++ b/src/main/java/baseball/game/Game.java @@ -9,21 +9,21 @@ public class Game { private Computer computer; - public Game(){ + public Game() { this.computer = new Computer(); } - public void start(){ + public void start() { View.init(); Answer answer; do { BaseballNumber baseballNumber = new BaseballNumber(View.input()); answer = computer.calculate(baseballNumber); View.showAnswer(answer.getString()); - }while(answer.isStatusWRONG()); + } while (answer.isStatusWRONG()); } - public boolean end(){ + public boolean end() { EndNumber endNumber = new EndNumber(View.showEnd()); return endNumber.isEnd(); } diff --git a/src/main/java/baseball/view/View.java b/src/main/java/baseball/view/View.java index e30c038d6f..86cd4eb449 100644 --- a/src/main/java/baseball/view/View.java +++ b/src/main/java/baseball/view/View.java @@ -1,24 +1,23 @@ package baseball.view; -import baseball.domain.Answer; import camp.nextstep.edu.missionutils.Console; public class View { - public static void init(){ + public static void init() { System.out.println("숫자 야ꡬ κ²Œμž„μ„ μ‹œμž‘ν•©λ‹ˆλ‹€."); } - public static String input(){ + public static String input() { System.out.println("숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : "); return Console.readLine(); } - public static void showAnswer(String statement){ + public static void showAnswer(String statement) { System.out.println(statement); } - public static String showEnd(){ + public static String showEnd() { System.out.println("3개의 숫자λ₯Ό λͺ¨λ‘ λ§žνžˆμ…¨μŠ΅λ‹ˆλ‹€! κ²Œμž„ μ’…λ£Œ"); System.out.println("κ²Œμž„μ„ μƒˆλ‘œ μ‹œμž‘ν•˜λ €λ©΄ 1, μ’…λ£Œν•˜λ €λ©΄ 2λ₯Ό μž…λ ₯ν•˜μ„Έμš”."); return Console.readLine();