From 1e8dfa4777c633a039e08dd500a58044f0832bbc Mon Sep 17 00:00:00 2001 From: deocksoo Date: Sat, 11 Jan 2020 09:04:53 +0900 Subject: [PATCH 01/31] Update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 492f742..bf433ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea/** .gradle/** -build/ +build/** +out/** From 745093fbbeadca46497b2e5b1a7ae122b33293bc Mon Sep 17 00:00:00 2001 From: YOO TS Date: Thu, 16 Jan 2020 17:24:50 +0900 Subject: [PATCH 02/31] =?UTF-8?q?=EC=82=AC=EB=8B=A4=EB=A6=AC=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EA=B8=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InputScanner, LadderGameInput 클래스 추가 - LadderGameInput.getPlayerNamesFromInputScanner()에서 사람 이름을 쉼표 기준으로 분류 --- README.md | 23 ++++++++ settings.gradle | 2 +- src/main/java/InputScanner.java | 19 +++++++ src/main/java/LadderGame.java | 4 ++ src/main/java/LadderGameInput.java | 31 +++++++++++ src/test/java/InputScannerTest.java | 58 +++++++++++++++++++++ src/test/java/LadderGameInputTest.java | 72 ++++++++++++++++++++++++++ src/test/java/LadderGameTest.java | 3 ++ 8 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 src/main/java/InputScanner.java create mode 100644 src/main/java/LadderGame.java create mode 100644 src/main/java/LadderGameInput.java create mode 100644 src/test/java/InputScannerTest.java create mode 100644 src/test/java/LadderGameInputTest.java create mode 100644 src/test/java/LadderGameTest.java diff --git a/README.md b/README.md index 42fb362..15d63bd 100644 --- a/README.md +++ b/README.md @@ -1 +1,24 @@ # java-ladder 게임 + +## 기능 요구사항 +1. 사다리 게임에 참여하는 사람의 이름을 최대 5글자까지 부여할 수 있다. +2. 사다리를 출력할 때 사람 이름도 같이 출력한다. +3. 사람 이름은 쉼표(,)를 기준으로 구분한다. +4. 사람 이름을 5자 기준으로 출력하기 때문에 사다리 폭도 넓어져야 한다. +5. 사다리 타기가 정상적으로 동작하려면 라인이 겹치지 않도록 해야 한다. + - |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할 +지 결정할 수 없다. + +--- + +## To Do +- ~~input 받기 -> LadderGameInput 클래스로 추상화~~ +- ~~InputScanner 클래스 만들기~~ +- player 클래스 만들기 +- ladder 클래스 만들기 +- ladderGame 클래스 만들기 +- output(실행결과) 출력하기 + - 1x1 출력 + - 2x3 출력 + - 4x5 출력 + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 4b94a0e..880a4b1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -rootProject.name = 'java-racingcar' +rootProject.name = 'java-ladder' diff --git a/src/main/java/InputScanner.java b/src/main/java/InputScanner.java new file mode 100644 index 0000000..74cbff9 --- /dev/null +++ b/src/main/java/InputScanner.java @@ -0,0 +1,19 @@ +import java.util.Scanner; + +public class InputScanner { + + public static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; + public static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; + + private Scanner scanner = new Scanner(System.in); + + public String getPlayerNamesFromUser() { + System.out.println(MESSAGE_GET_PLAYER_NAMES); + return scanner.nextLine(); + } + + public int getLadderHeightFromUser() { + System.out.println(MESSAGE_GET_LADDER_HEIGHT); + return Integer.parseInt(scanner.nextLine()); + } +} diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java new file mode 100644 index 0000000..c8265a2 --- /dev/null +++ b/src/main/java/LadderGame.java @@ -0,0 +1,4 @@ +public class LadderGame { + + +} diff --git a/src/main/java/LadderGameInput.java b/src/main/java/LadderGameInput.java new file mode 100644 index 0000000..9160e08 --- /dev/null +++ b/src/main/java/LadderGameInput.java @@ -0,0 +1,31 @@ +import java.util.Arrays; +import java.util.List; + +public class LadderGameInput { + + public static final String DELIMITER = ","; + + private List playerNames; + private int ladderHeight; + + public void getPlayerNamesFromInputScanner(InputScanner playerNamesScanner) { + String playerNamesString = playerNamesScanner.getPlayerNamesFromUser(); + playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); + } + + public void getLadderHeightFromInputScanner(InputScanner ladderHeightScanner ) { + ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); + } + + public InputScanner generateInputScanner() { + return new InputScanner(); + } + + public List getPlayerNames() { + return playerNames; + } + + public int getLadderHeight() { + return ladderHeight; + } +} diff --git a/src/test/java/InputScannerTest.java b/src/test/java/InputScannerTest.java new file mode 100644 index 0000000..a995460 --- /dev/null +++ b/src/test/java/InputScannerTest.java @@ -0,0 +1,58 @@ +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class InputScannerTest { + + @Test + public void testGetPlayerNames() { + // given + String inputString = "태식\r\n"; + setInputStream(inputString); + InputScanner playerNamesScanner = new InputScanner(); + + // when + String playerNames = playerNamesScanner.getPlayerNamesFromUser(); + + // then + assertThat(playerNames) + .isNotNull() + .isEqualTo("태식"); + } + + @Test + public void testGetLadderHeight() { + // given + String inputString = "2\r\n"; + setInputStream(inputString); + InputScanner ladderHeightScanner = new InputScanner(); + + // when + int ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); + + // then + assertThat(ladderHeight) + .isNotNull() + .isEqualTo(2); + } + + public void setInputStream(String inputString) { + InputStream inputStream = new ByteArrayInputStream(inputString.getBytes()); + System.setIn(inputStream); + } + + @Test + public void test() { + // given + + // when + + // then + + } + + +} diff --git a/src/test/java/LadderGameInputTest.java b/src/test/java/LadderGameInputTest.java new file mode 100644 index 0000000..71a1dd0 --- /dev/null +++ b/src/test/java/LadderGameInputTest.java @@ -0,0 +1,72 @@ +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderGameInputTest { + + @Test + public void testGetSingleNameFromInputScanner() { + // given + String inputString = "태식"; + setInputStream(inputString); + + LadderGameInput input = new LadderGameInput(); + + List playerName = Arrays.asList(inputString.split(",")); + + // when + input.getPlayerNamesFromInputScanner(input.generateInputScanner()); + + // then + assertThat(input.getPlayerNames()) + .isNotNull() + .isEqualTo(playerName); + } + + @Test + public void testGetMultipleNamesFromInputScanner() { + // given + String inputString = "태식,태식이,태식삼"; + setInputStream(inputString); + + LadderGameInput input = new LadderGameInput(); + + List playerNames = Arrays.asList(inputString.split(",")); + + // when + input.getPlayerNamesFromInputScanner(input.generateInputScanner()); + + // then + assertThat(input.getPlayerNames()) + .isNotNull() + .isEqualTo(playerNames); + } + + @Test + public void testGetLadderHeightFromInputScanner() { + // given + String inputString = "2"; + setInputStream(inputString); + + LadderGameInput input = new LadderGameInput(); + + // when + input.getLadderHeightFromInputScanner(input.generateInputScanner()); + + // then + assertThat(input.getLadderHeight()) + .isNotNull() + .isEqualTo(2); + } + + public void setInputStream(String inputString) { + InputStream inputStream = new ByteArrayInputStream(inputString.getBytes()); + System.setIn(inputStream); + } + +} diff --git a/src/test/java/LadderGameTest.java b/src/test/java/LadderGameTest.java new file mode 100644 index 0000000..1d9a067 --- /dev/null +++ b/src/test/java/LadderGameTest.java @@ -0,0 +1,3 @@ +public class LadderGameTest { + +} From 6ba8dd9641fda155accae823d464275e3c2ccff7 Mon Sep 17 00:00:00 2001 From: YOO TS Date: Fri, 17 Jan 2020 14:35:49 +0900 Subject: [PATCH 03/31] =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=EC=8B=9C=20=EA=B8=B8=EC=9D=B4=20=EC=A0=9C=ED=95=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InputValidator 클래스 추가 - validatePlayerNames() 메소드를 통해 이름이 5글자 이내인지 확인한 후 5자 초과일시 IllegalArgumentException을 throw함 --- README.md | 6 ++++- src/main/java/InputScanner.java | 4 +-- src/main/java/InputValidator.java | 24 ++++++++++++++++++ src/main/java/LadderGameInput.java | 6 +++-- src/main/java/LadderGamePlayers.java | 8 ++++++ src/main/java/empty.txt | 0 src/test/java/InputScannerTest.java | 11 -------- src/test/java/InputValidatorTest.java | 29 +++++++++++++++++++++ src/test/java/LadderGameInputTest.java | 6 +++-- src/test/java/LadderGamePlayersTest.java | 32 ++++++++++++++++++++++++ 10 files changed, 108 insertions(+), 18 deletions(-) create mode 100644 src/main/java/InputValidator.java create mode 100644 src/main/java/LadderGamePlayers.java delete mode 100644 src/main/java/empty.txt create mode 100644 src/test/java/InputValidatorTest.java create mode 100644 src/test/java/LadderGamePlayersTest.java diff --git a/README.md b/README.md index 15d63bd..5a334ce 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,15 @@ ## To Do - ~~input 받기 -> LadderGameInput 클래스로 추상화~~ - ~~InputScanner 클래스 만들기~~ -- player 클래스 만들기 +- ~~player 클래스 만들기~~ +- ~~InputValidator 클래스 만들기~~ - ladder 클래스 만들기 - ladderGame 클래스 만들기 - output(실행결과) 출력하기 - 1x1 출력 - 2x3 출력 - 4x5 출력 +- LadderGameResultFirstLine +- LadderGameResultLine + \ No newline at end of file diff --git a/src/main/java/InputScanner.java b/src/main/java/InputScanner.java index 74cbff9..873b336 100644 --- a/src/main/java/InputScanner.java +++ b/src/main/java/InputScanner.java @@ -2,8 +2,8 @@ public class InputScanner { - public static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; - public static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; + private static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; + private static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; private Scanner scanner = new Scanner(System.in); diff --git a/src/main/java/InputValidator.java b/src/main/java/InputValidator.java new file mode 100644 index 0000000..b5c8c70 --- /dev/null +++ b/src/main/java/InputValidator.java @@ -0,0 +1,24 @@ +import java.util.List; + +public class InputValidator { + + private static final int PLAYER_NAME_MAX_LENGTH = 5; + private static final String ERROR_MESSAGE_NAME_LENGTH_EXCEEDED = "이름이 5자를 초과할 수 없습니다."; + + public static void validatePlayerNames(List playerNames) { + for (String playerName : playerNames) { + int playerNameLength = getPlayerNameLength(playerName); + IsSmallerThanCriterion(playerNameLength); + } + } + + public static int getPlayerNameLength(String playerName) { + return playerName.length(); + } + + public static void IsSmallerThanCriterion(int playerNameLength) { + if (playerNameLength > PLAYER_NAME_MAX_LENGTH) { + throw (new IllegalArgumentException(ERROR_MESSAGE_NAME_LENGTH_EXCEEDED)); + } + } +} diff --git a/src/main/java/LadderGameInput.java b/src/main/java/LadderGameInput.java index 9160e08..4f68179 100644 --- a/src/main/java/LadderGameInput.java +++ b/src/main/java/LadderGameInput.java @@ -1,3 +1,4 @@ +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -5,12 +6,13 @@ public class LadderGameInput { public static final String DELIMITER = ","; - private List playerNames; + private List playerNames = new ArrayList<>(); private int ladderHeight; public void getPlayerNamesFromInputScanner(InputScanner playerNamesScanner) { String playerNamesString = playerNamesScanner.getPlayerNamesFromUser(); - playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); + String[] tokens = playerNamesString.split(DELIMITER); + playerNames = Arrays.asList(tokens); } public void getLadderHeightFromInputScanner(InputScanner ladderHeightScanner ) { diff --git a/src/main/java/LadderGamePlayers.java b/src/main/java/LadderGamePlayers.java new file mode 100644 index 0000000..71e26ba --- /dev/null +++ b/src/main/java/LadderGamePlayers.java @@ -0,0 +1,8 @@ +import java.util.List; + +public class LadderGamePlayers { + + public static int getPlayerCount(List playerNames) { + return playerNames.size(); + } +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/InputScannerTest.java b/src/test/java/InputScannerTest.java index a995460..d611fb6 100644 --- a/src/test/java/InputScannerTest.java +++ b/src/test/java/InputScannerTest.java @@ -44,15 +44,4 @@ public void setInputStream(String inputString) { System.setIn(inputStream); } - @Test - public void test() { - // given - - // when - - // then - - } - - } diff --git a/src/test/java/InputValidatorTest.java b/src/test/java/InputValidatorTest.java new file mode 100644 index 0000000..1398bcc --- /dev/null +++ b/src/test/java/InputValidatorTest.java @@ -0,0 +1,29 @@ +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; + +class InputValidatorTest { + + private static final String DELIMITER = ","; + private static final String ERROR_MESSAGE_NAME_LENGTH_EXCEEDED = "이름이 5자를 초과할 수 없습니다."; + + @Test + public void testValidatePlayerNameIsSmallerThanCriterion() { + // given + String inputString = "태식,태식이,이름길이초과"; + List playerNames = Arrays.asList(inputString.split(DELIMITER)); + + // when + Throwable thrown = catchThrowable(() -> { InputValidator.validatePlayerNames(playerNames);}); + + // then + assertThat(thrown) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(ERROR_MESSAGE_NAME_LENGTH_EXCEEDED); + } + +} \ No newline at end of file diff --git a/src/test/java/LadderGameInputTest.java b/src/test/java/LadderGameInputTest.java index 71a1dd0..4427a61 100644 --- a/src/test/java/LadderGameInputTest.java +++ b/src/test/java/LadderGameInputTest.java @@ -9,6 +9,8 @@ public class LadderGameInputTest { + private static final String DELIMITER = ","; + @Test public void testGetSingleNameFromInputScanner() { // given @@ -17,7 +19,7 @@ public void testGetSingleNameFromInputScanner() { LadderGameInput input = new LadderGameInput(); - List playerName = Arrays.asList(inputString.split(",")); + List playerName = Arrays.asList(inputString.split(DELIMITER)); // when input.getPlayerNamesFromInputScanner(input.generateInputScanner()); @@ -36,7 +38,7 @@ public void testGetMultipleNamesFromInputScanner() { LadderGameInput input = new LadderGameInput(); - List playerNames = Arrays.asList(inputString.split(",")); + List playerNames = Arrays.asList(inputString.split(DELIMITER)); // when input.getPlayerNamesFromInputScanner(input.generateInputScanner()); diff --git a/src/test/java/LadderGamePlayersTest.java b/src/test/java/LadderGamePlayersTest.java new file mode 100644 index 0000000..7c46aa9 --- /dev/null +++ b/src/test/java/LadderGamePlayersTest.java @@ -0,0 +1,32 @@ +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class LadderGamePlayersTest { + + private static final String DELIMITER = ","; + + @Test + public void testGetPlayerCount() { + // given + String inputString= "태식,태식이,태식삼"; + List playerNames = Arrays.asList(inputString.split(DELIMITER)); + + // when + int playerCount = LadderGamePlayers.getPlayerCount(playerNames); + + // then + assertThat(playerCount) + .isNotNull() + .isEqualTo(3); + + } + + + + +} From 9422068ee1d5df6afc6e658fc0359fad049e55d4 Mon Sep 17 00:00:00 2001 From: YOO TS Date: Sat, 18 Jan 2020 01:47:23 +0900 Subject: [PATCH 04/31] =?UTF-8?q?=EC=82=AC=EB=8B=A4=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ladder, Line, Point 클래스 추가, Point는 Line 객체를 구성하고 Line은 Ladder를 구성하게 됨 - LadderGenarator, LinesGenerator, PointsGenerator 클래스 추가 --- README.md | 6 +-- src/main/java/InputScanner.java | 5 +++ src/main/java/InputValidator.java | 4 +- src/main/java/Ladder.java | 35 ++++++++++++++++ src/main/java/LadderGame.java | 16 ++++++++ src/main/java/LadderGameInput.java | 26 +++++++----- src/main/java/LadderGamePlayers.java | 10 ++++- src/main/java/LadderGamePrinter.java | 26 ++++++++++++ src/main/java/LadderGenerator.java | 10 +++++ src/main/java/Line.java | 37 +++++++++++++++++ src/main/java/LinesGenerator.java | 51 ++++++++++++++++++++++++ src/main/java/Point.java | 34 ++++++++++++++++ src/main/java/PointsGenerator.java | 43 ++++++++++++++++++++ src/test/java/LadderGameInputTest.java | 26 +++++------- src/test/java/LadderGamePlayersTest.java | 8 ++-- src/test/java/LadderGeneratorTest.java | 43 ++++++++++++++++++++ src/test/java/LinesGeneratorTest.java | 47 ++++++++++++++++++++++ src/test/java/PointsGeneratorTest.java | 50 +++++++++++++++++++++++ 18 files changed, 438 insertions(+), 39 deletions(-) create mode 100644 src/main/java/Ladder.java create mode 100644 src/main/java/LadderGamePrinter.java create mode 100644 src/main/java/LadderGenerator.java create mode 100644 src/main/java/Line.java create mode 100644 src/main/java/LinesGenerator.java create mode 100644 src/main/java/Point.java create mode 100644 src/main/java/PointsGenerator.java create mode 100644 src/test/java/LadderGeneratorTest.java create mode 100644 src/test/java/LinesGeneratorTest.java create mode 100644 src/test/java/PointsGeneratorTest.java diff --git a/README.md b/README.md index 5a334ce..0ea34f3 100644 --- a/README.md +++ b/README.md @@ -16,13 +16,13 @@ - ~~InputScanner 클래스 만들기~~ - ~~player 클래스 만들기~~ - ~~InputValidator 클래스 만들기~~ -- ladder 클래스 만들기 -- ladderGame 클래스 만들기 +- ~~Ladder 클래스 만들기~~ +- LadderGame 클래스 만들기 - output(실행결과) 출력하기 - 1x1 출력 - 2x3 출력 - 4x5 출력 - LadderGameResultFirstLine - LadderGameResultLine - +- LadderGameInput을 LadderHeight과 LadderGamePlayer로 쪼개기 \ No newline at end of file diff --git a/src/main/java/InputScanner.java b/src/main/java/InputScanner.java index 873b336..85426e2 100644 --- a/src/main/java/InputScanner.java +++ b/src/main/java/InputScanner.java @@ -4,6 +4,7 @@ public class InputScanner { private static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; private static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; + private static final String EMPTY_LINE = ""; private Scanner scanner = new Scanner(System.in); @@ -16,4 +17,8 @@ public int getLadderHeightFromUser() { System.out.println(MESSAGE_GET_LADDER_HEIGHT); return Integer.parseInt(scanner.nextLine()); } + + public static void printSeparationLine() { + System.out.println(EMPTY_LINE); + } } diff --git a/src/main/java/InputValidator.java b/src/main/java/InputValidator.java index b5c8c70..f3b1740 100644 --- a/src/main/java/InputValidator.java +++ b/src/main/java/InputValidator.java @@ -8,7 +8,7 @@ public class InputValidator { public static void validatePlayerNames(List playerNames) { for (String playerName : playerNames) { int playerNameLength = getPlayerNameLength(playerName); - IsSmallerThanCriterion(playerNameLength); + validatePlayerNameLength(playerNameLength); } } @@ -16,7 +16,7 @@ public static int getPlayerNameLength(String playerName) { return playerName.length(); } - public static void IsSmallerThanCriterion(int playerNameLength) { + public static void validatePlayerNameLength(int playerNameLength) { if (playerNameLength > PLAYER_NAME_MAX_LENGTH) { throw (new IllegalArgumentException(ERROR_MESSAGE_NAME_LENGTH_EXCEEDED)); } diff --git a/src/main/java/Ladder.java b/src/main/java/Ladder.java new file mode 100644 index 0000000..b2182dd --- /dev/null +++ b/src/main/java/Ladder.java @@ -0,0 +1,35 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class Ladder { + + public List lines = new ArrayList<>(); + + public Ladder() { + } + + public Ladder(List lines) { + this.lines = lines; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Ladder ladder = (Ladder) o; + return Objects.equals(lines, ladder.lines); + } + + @Override + public int hashCode() { + return Objects.hash(lines); + } + + @Override + public String toString() { + return "Ladder{" + + "lines=" + lines + + '}'; + } +} diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java index c8265a2..88613b4 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/LadderGame.java @@ -1,4 +1,20 @@ +import java.util.List; + public class LadderGame { + public static void main(String[] args) { + List playerNames = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); + InputValidator.validatePlayerNames(playerNames); + InputScanner.printSeparationLine(); + int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); + InputScanner.printSeparationLine(); + + LadderGamePlayers.calculatePlayerCount(playerNames); + int playerCount = LadderGamePlayers.getPlayerCount(); + + Ladder ladder = LadderGenerator.generateLadder(); + + LadderGamePrinter.printLadderGame(ladder); + } } diff --git a/src/main/java/LadderGameInput.java b/src/main/java/LadderGameInput.java index 4f68179..a7bca4b 100644 --- a/src/main/java/LadderGameInput.java +++ b/src/main/java/LadderGameInput.java @@ -6,28 +6,32 @@ public class LadderGameInput { public static final String DELIMITER = ","; - private List playerNames = new ArrayList<>(); - private int ladderHeight; + private static List playerNames = new ArrayList<>(); + private static int ladderHeight; - public void getPlayerNamesFromInputScanner(InputScanner playerNamesScanner) { + public static List getPlayerNamesFromInputScanner(InputScanner playerNamesScanner) { String playerNamesString = playerNamesScanner.getPlayerNamesFromUser(); - String[] tokens = playerNamesString.split(DELIMITER); - playerNames = Arrays.asList(tokens); + return covertStringToArrayList(playerNamesString); } - public void getLadderHeightFromInputScanner(InputScanner ladderHeightScanner ) { - ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); + public static List covertStringToArrayList(String playerNamesString) { + String[] tokens = generateStringTokensByDelimiter(playerNamesString); + return playerNames = Arrays.asList(tokens); } - public InputScanner generateInputScanner() { - return new InputScanner(); + public static String[] generateStringTokensByDelimiter(String playerNamesString) { + return playerNamesString.split(DELIMITER); } - public List getPlayerNames() { + public static int getLadderHeightFromInputScanner(InputScanner ladderHeightScanner) { + return ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); + } + + public static List getPlayerNames() { return playerNames; } - public int getLadderHeight() { + public static int getLadderHeight() { return ladderHeight; } } diff --git a/src/main/java/LadderGamePlayers.java b/src/main/java/LadderGamePlayers.java index 71e26ba..fd65924 100644 --- a/src/main/java/LadderGamePlayers.java +++ b/src/main/java/LadderGamePlayers.java @@ -2,7 +2,13 @@ public class LadderGamePlayers { - public static int getPlayerCount(List playerNames) { - return playerNames.size(); + private static int playerCount; + + public static void calculatePlayerCount(List playerNames) { + playerCount = playerNames.size(); + } + + public static int getPlayerCount() { + return playerCount; } } diff --git a/src/main/java/LadderGamePrinter.java b/src/main/java/LadderGamePrinter.java new file mode 100644 index 0000000..c99c79c --- /dev/null +++ b/src/main/java/LadderGamePrinter.java @@ -0,0 +1,26 @@ +import java.util.ArrayList; +import java.util.List; + +public class LadderGamePrinter { + private static Ladder ladder; + + public static void printLadderGame(Ladder ladder) { + LadderGamePrinter.ladder = ladder; + printPlayerName(); + printRow(); + } + + private static void printPlayerName() { + List playerNames = LadderGameInput.getPlayerNames(); + System.out.println(playerNames); + } + + private static void printRow() { + + } + + private static List generateRow(int rowIndex) { + + } + +} diff --git a/src/main/java/LadderGenerator.java b/src/main/java/LadderGenerator.java new file mode 100644 index 0000000..628098e --- /dev/null +++ b/src/main/java/LadderGenerator.java @@ -0,0 +1,10 @@ +import java.util.List; + +public class LadderGenerator { + + public static Ladder generateLadder() { + List lines = LinesGenerator.generateLines(); + return new Ladder(lines); + } + +} diff --git a/src/main/java/Line.java b/src/main/java/Line.java new file mode 100644 index 0000000..f48cb2e --- /dev/null +++ b/src/main/java/Line.java @@ -0,0 +1,37 @@ +import java.util.Objects; + +public class Line { + + private Point leftPoint; + private Point rightPoint; + public boolean exists = false; + + public Line(Point leftPoint, Point rightPoint) { + this.leftPoint = leftPoint; + this.rightPoint = rightPoint; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Line line = (Line) o; + return exists == line.exists && + Objects.equals(leftPoint, line.leftPoint) && + Objects.equals(rightPoint, line.rightPoint); + } + + @Override + public int hashCode() { + return Objects.hash(leftPoint, rightPoint, exists); + } + + @Override + public String toString() { + return "Line{" + + "leftPoint=" + leftPoint + + ", rightPoint=" + rightPoint + + ", exists=" + exists + + '}'; + } +} diff --git a/src/main/java/LinesGenerator.java b/src/main/java/LinesGenerator.java new file mode 100644 index 0000000..9eb2cb8 --- /dev/null +++ b/src/main/java/LinesGenerator.java @@ -0,0 +1,51 @@ +import java.util.ArrayList; +import java.util.List; + +public class LinesGenerator { + + private static List points = new ArrayList<>(); + private static List lines = new ArrayList<>(); + private static int numberOfLines; + private static int numberOfRows; + + + public static List generateLines() { + points = PointsGenerator.generatePoints(); + + setNumberOfRows(); + setNumberOfLines(); + + for (int rowIndex = 0; rowIndex < numberOfRows; rowIndex++) { + List row = generateRow(rowIndex); + lines.addAll(row); + } + + return lines; + } + + private static void setNumberOfRows() { + numberOfRows = LadderGameInput.getLadderHeight(); + } + + private static void setNumberOfLines() { + int playerCount = LadderGamePlayers.getPlayerCount(); + int numberOfLinesPerRow = playerCount - 1; + numberOfLines = numberOfLinesPerRow * numberOfRows; + } + + private static List generateRow(int rowIndex) { + List row = new ArrayList<>(); + int numberOfLinesPerRow = numberOfLines / numberOfRows; + int pointIndex = rowIndex * (numberOfLinesPerRow + 1); + int lastIndexOfRow = pointIndex + numberOfLinesPerRow; + + while (pointIndex < lastIndexOfRow) { + Line line = new Line(points.get(pointIndex), points.get(pointIndex + 1)); + row.add(line); + pointIndex++; + } + + return row; + } + +} diff --git a/src/main/java/Point.java b/src/main/java/Point.java new file mode 100644 index 0000000..86531b2 --- /dev/null +++ b/src/main/java/Point.java @@ -0,0 +1,34 @@ +import java.util.Objects; + +public class Point { + + private int x; + private int y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Point point = (Point) o; + return x == point.x && + y == point.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + @Override + public String toString() { + return "Point{" + + "x=" + x + + ", y=" + y + + '}'; + } +} diff --git a/src/main/java/PointsGenerator.java b/src/main/java/PointsGenerator.java new file mode 100644 index 0000000..0b7ddc5 --- /dev/null +++ b/src/main/java/PointsGenerator.java @@ -0,0 +1,43 @@ +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class PointsGenerator { + + private static int numberOfX; + private static int numberOfY; + + public static List generatePoints() { + setNumberOfPoints(); + ArrayList xs = createXs(); + ArrayList ys = createYs(); + + return xs.stream() + .flatMap(x -> ys.stream().map(y -> new Point(x, y))) + .collect(Collectors.toList()); + } + + private static void setNumberOfPoints() { + numberOfX = LadderGameInput.getLadderHeight(); + numberOfY = LadderGamePlayers.getPlayerCount(); + } + + public static ArrayList createXs() { + ArrayList xs = new ArrayList<>(); + for (int x = 0; x < numberOfX; x++) { + xs.add(x); + } + return xs; + } + + public static ArrayList createYs() { + ArrayList ys = new ArrayList<>(); + for (int y = 0; y < numberOfY; y++) { + ys.add(y); + } + return ys; + } + +} diff --git a/src/test/java/LadderGameInputTest.java b/src/test/java/LadderGameInputTest.java index 4427a61..cfabbd8 100644 --- a/src/test/java/LadderGameInputTest.java +++ b/src/test/java/LadderGameInputTest.java @@ -17,17 +17,15 @@ public void testGetSingleNameFromInputScanner() { String inputString = "태식"; setInputStream(inputString); - LadderGameInput input = new LadderGameInput(); - - List playerName = Arrays.asList(inputString.split(DELIMITER)); + List expectedPlayerName = Arrays.asList(inputString.split(DELIMITER)); // when - input.getPlayerNamesFromInputScanner(input.generateInputScanner()); + List playerName = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); // then - assertThat(input.getPlayerNames()) + assertThat(playerName) .isNotNull() - .isEqualTo(playerName); + .isEqualTo(expectedPlayerName); } @Test @@ -36,17 +34,15 @@ public void testGetMultipleNamesFromInputScanner() { String inputString = "태식,태식이,태식삼"; setInputStream(inputString); - LadderGameInput input = new LadderGameInput(); - - List playerNames = Arrays.asList(inputString.split(DELIMITER)); + List expectedPlayerNames = Arrays.asList(inputString.split(DELIMITER)); // when - input.getPlayerNamesFromInputScanner(input.generateInputScanner()); + List playerNames = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); // then - assertThat(input.getPlayerNames()) + assertThat(playerNames) .isNotNull() - .isEqualTo(playerNames); + .isEqualTo(expectedPlayerNames); } @Test @@ -55,13 +51,11 @@ public void testGetLadderHeightFromInputScanner() { String inputString = "2"; setInputStream(inputString); - LadderGameInput input = new LadderGameInput(); - // when - input.getLadderHeightFromInputScanner(input.generateInputScanner()); + int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); // then - assertThat(input.getLadderHeight()) + assertThat(ladderHeight) .isNotNull() .isEqualTo(2); } diff --git a/src/test/java/LadderGamePlayersTest.java b/src/test/java/LadderGamePlayersTest.java index 7c46aa9..662d3b4 100644 --- a/src/test/java/LadderGamePlayersTest.java +++ b/src/test/java/LadderGamePlayersTest.java @@ -4,7 +4,6 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; public class LadderGamePlayersTest { @@ -16,8 +15,10 @@ public void testGetPlayerCount() { String inputString= "태식,태식이,태식삼"; List playerNames = Arrays.asList(inputString.split(DELIMITER)); + LadderGamePlayers.calculatePlayerCount(playerNames); + // when - int playerCount = LadderGamePlayers.getPlayerCount(playerNames); + int playerCount = LadderGamePlayers.getPlayerCount(); // then assertThat(playerCount) @@ -26,7 +27,4 @@ public void testGetPlayerCount() { } - - - } diff --git a/src/test/java/LadderGeneratorTest.java b/src/test/java/LadderGeneratorTest.java new file mode 100644 index 0000000..3dc12a3 --- /dev/null +++ b/src/test/java/LadderGeneratorTest.java @@ -0,0 +1,43 @@ +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderGeneratorTest { + + private static final String DELIMITER = ","; + + @Test + public void testGenerate2x1Ladder() { + // given + Point leftPoint = new Point(0, 0); + Point rightPoint = new Point(0, 1); + + Line line = new Line(leftPoint, rightPoint); + + Ladder expectedLadder = new Ladder(); + expectedLadder.lines.add(line); + + String playerNamesString= "태식,태식이"; + List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); + LadderGamePlayers.calculatePlayerCount(playerNames); + + String ladderHeightString = "1"; + InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); + System.setIn(inputStream); + LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); + + // when + Ladder TwoByOneLadder = LadderGenerator.generateLadder(); + + // then + assertThat(TwoByOneLadder) + .isNotNull() + .isEqualTo(expectedLadder); + } + +} diff --git a/src/test/java/LinesGeneratorTest.java b/src/test/java/LinesGeneratorTest.java new file mode 100644 index 0000000..f337117 --- /dev/null +++ b/src/test/java/LinesGeneratorTest.java @@ -0,0 +1,47 @@ +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class LinesGeneratorTest { + + private static final String DELIMITER = ","; + + @BeforeAll + public static void setUp() { + String playerNamesString= "태식,태식이,태식삼"; + List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); + LadderGamePlayers.calculatePlayerCount(playerNames); + + String ladderHeightString = "2"; + InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); + System.setIn(inputStream); + LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); + } + + @Test + public void testGenerateLines() { + // given + List expectedLines = new ArrayList<>(); + expectedLines.add(new Line(new Point(0,0), new Point(0,1))); + expectedLines.add(new Line(new Point(0,1), new Point(0,2))); + expectedLines.add(new Line(new Point(1,0), new Point(1,1))); + expectedLines.add(new Line(new Point(1,1), new Point(1,2))); + + // when + List lines = LinesGenerator.generateLines(); + + // then + assertThat(lines) + .isNotNull() + .isEqualTo(expectedLines); + } + +} \ No newline at end of file diff --git a/src/test/java/PointsGeneratorTest.java b/src/test/java/PointsGeneratorTest.java new file mode 100644 index 0000000..96caa8b --- /dev/null +++ b/src/test/java/PointsGeneratorTest.java @@ -0,0 +1,50 @@ +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class PointsGeneratorTest { + + private static final String DELIMITER = ","; + + @BeforeAll + public static void setUp() { + String playerNamesString= "태식,태식이,태식삼"; + List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); + LadderGamePlayers.calculatePlayerCount(playerNames); + + String ladderHeightString = "2"; + InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); + System.setIn(inputStream); + LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); + } + + @Test + public void testGeneratePoints() { + // given + List expectedPoints = new ArrayList<>(); + expectedPoints.add(new Point(0, 0)); + expectedPoints.add(new Point(0, 1)); + expectedPoints.add(new Point(0, 2)); + expectedPoints.add(new Point(1, 0)); + expectedPoints.add(new Point(1, 1)); + expectedPoints.add(new Point(1, 2)); + + // when + List points = PointsGenerator.generatePoints(); + + // then + assertThat(points) + .isNotNull() + .isEqualTo(expectedPoints); + + } + +} \ No newline at end of file From 09e57240067701d8a185b2357ddb587950ded75e Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Sun, 26 Jan 2020 22:19:02 +0900 Subject: [PATCH 05/31] =?UTF-8?q?refactor:=20package=20=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=EB=A5=BC=20mvc=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 --- README.md | 10 +++++----- src/main/java/{ => laddergame}/LadderGame.java | 10 ++++++++++ src/main/java/{ => laddergame/domain}/Ladder.java | 4 +++- .../java/{ => laddergame/domain}/LadderGameInput.java | 4 ++++ .../{ => laddergame/domain}/LadderGamePlayers.java | 2 ++ .../java/{ => laddergame/domain}/LadderGenerator.java | 2 ++ src/main/java/{ => laddergame/domain}/Line.java | 4 +++- .../java/{ => laddergame/domain}/LinesGenerator.java | 2 ++ src/main/java/{ => laddergame/domain}/Point.java | 4 +++- .../java/{ => laddergame/domain}/PointsGenerator.java | 4 ++-- src/main/java/{ => laddergame/view}/InputScanner.java | 4 +++- .../java/{ => laddergame/view}/InputValidator.java | 2 ++ .../java/{ => laddergame/view}/LadderGamePrinter.java | 8 ++++++-- src/test/java/{ => laddergame}/InputScannerTest.java | 3 +++ src/test/java/{ => laddergame}/InputValidatorTest.java | 3 +++ .../java/{ => laddergame}/LadderGameInputTest.java | 4 ++++ .../java/{ => laddergame}/LadderGamePlayersTest.java | 3 +++ src/test/java/{ => laddergame}/LadderGameTest.java | 2 ++ .../java/{ => laddergame}/LadderGeneratorTest.java | 4 ++++ src/test/java/{ => laddergame}/LinesGeneratorTest.java | 5 ++++- .../java/{ => laddergame}/PointsGeneratorTest.java | 8 +++++++- 21 files changed, 77 insertions(+), 15 deletions(-) rename src/main/java/{ => laddergame}/LadderGame.java (69%) rename src/main/java/{ => laddergame/domain}/Ladder.java (90%) rename src/main/java/{ => laddergame/domain}/LadderGameInput.java (94%) rename src/main/java/{ => laddergame/domain}/LadderGamePlayers.java (91%) rename src/main/java/{ => laddergame/domain}/LadderGenerator.java (87%) rename src/main/java/{ => laddergame/domain}/Line.java (92%) rename src/main/java/{ => laddergame/domain}/LinesGenerator.java (98%) rename src/main/java/{ => laddergame/domain}/Point.java (89%) rename src/main/java/{ => laddergame/domain}/PointsGenerator.java (95%) rename src/main/java/{ => laddergame/view}/InputScanner.java (96%) rename src/main/java/{ => laddergame/view}/InputValidator.java (96%) rename src/main/java/{ => laddergame/view}/LadderGamePrinter.java (74%) rename src/test/java/{ => laddergame}/InputScannerTest.java (95%) rename src/test/java/{ => laddergame}/InputValidatorTest.java (94%) rename src/test/java/{ => laddergame}/LadderGameInputTest.java (94%) rename src/test/java/{ => laddergame}/LadderGamePlayersTest.java (91%) rename src/test/java/{ => laddergame}/LadderGameTest.java (61%) rename src/test/java/{ => laddergame}/LadderGeneratorTest.java (93%) rename src/test/java/{ => laddergame}/LinesGeneratorTest.java (94%) rename src/test/java/{ => laddergame}/PointsGeneratorTest.java (87%) diff --git a/README.md b/README.md index 0ea34f3..28c201b 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ --- ## To Do -- ~~input 받기 -> LadderGameInput 클래스로 추상화~~ -- ~~InputScanner 클래스 만들기~~ +- ~~input 받기 -> laddergame.domain.LadderGameInput 클래스로 추상화~~ +- ~~laddergame.view.InputScanner 클래스 만들기~~ - ~~player 클래스 만들기~~ -- ~~InputValidator 클래스 만들기~~ -- ~~Ladder 클래스 만들기~~ -- LadderGame 클래스 만들기 +- ~~laddergame.view.InputValidator 클래스 만들기~~ +- ~~laddergame.domain.Ladder 클래스 만들기~~ +- laddergame.LadderGame 클래스 만들기 - output(실행결과) 출력하기 - 1x1 출력 - 2x3 출력 diff --git a/src/main/java/LadderGame.java b/src/main/java/laddergame/LadderGame.java similarity index 69% rename from src/main/java/LadderGame.java rename to src/main/java/laddergame/LadderGame.java index 88613b4..ce84b4a 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/laddergame/LadderGame.java @@ -1,3 +1,13 @@ +package laddergame; + +import laddergame.domain.Ladder; +import laddergame.domain.LadderGameInput; +import laddergame.domain.LadderGamePlayers; +import laddergame.domain.LadderGenerator; +import laddergame.view.InputScanner; +import laddergame.view.InputValidator; +import laddergame.view.LadderGamePrinter; + import java.util.List; public class LadderGame { diff --git a/src/main/java/Ladder.java b/src/main/java/laddergame/domain/Ladder.java similarity index 90% rename from src/main/java/Ladder.java rename to src/main/java/laddergame/domain/Ladder.java index b2182dd..b68438d 100644 --- a/src/main/java/Ladder.java +++ b/src/main/java/laddergame/domain/Ladder.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -28,7 +30,7 @@ public int hashCode() { @Override public String toString() { - return "Ladder{" + + return "laddergame.domain.Ladder{" + "lines=" + lines + '}'; } diff --git a/src/main/java/LadderGameInput.java b/src/main/java/laddergame/domain/LadderGameInput.java similarity index 94% rename from src/main/java/LadderGameInput.java rename to src/main/java/laddergame/domain/LadderGameInput.java index a7bca4b..8775fcd 100644 --- a/src/main/java/LadderGameInput.java +++ b/src/main/java/laddergame/domain/LadderGameInput.java @@ -1,3 +1,7 @@ +package laddergame.domain; + +import laddergame.view.InputScanner; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/LadderGamePlayers.java b/src/main/java/laddergame/domain/LadderGamePlayers.java similarity index 91% rename from src/main/java/LadderGamePlayers.java rename to src/main/java/laddergame/domain/LadderGamePlayers.java index fd65924..6323fbb 100644 --- a/src/main/java/LadderGamePlayers.java +++ b/src/main/java/laddergame/domain/LadderGamePlayers.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.List; public class LadderGamePlayers { diff --git a/src/main/java/LadderGenerator.java b/src/main/java/laddergame/domain/LadderGenerator.java similarity index 87% rename from src/main/java/LadderGenerator.java rename to src/main/java/laddergame/domain/LadderGenerator.java index 628098e..ea10f50 100644 --- a/src/main/java/LadderGenerator.java +++ b/src/main/java/laddergame/domain/LadderGenerator.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.List; public class LadderGenerator { diff --git a/src/main/java/Line.java b/src/main/java/laddergame/domain/Line.java similarity index 92% rename from src/main/java/Line.java rename to src/main/java/laddergame/domain/Line.java index f48cb2e..120eeaa 100644 --- a/src/main/java/Line.java +++ b/src/main/java/laddergame/domain/Line.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.Objects; public class Line { @@ -28,7 +30,7 @@ public int hashCode() { @Override public String toString() { - return "Line{" + + return "laddergame.domain.Line{" + "leftPoint=" + leftPoint + ", rightPoint=" + rightPoint + ", exists=" + exists + diff --git a/src/main/java/LinesGenerator.java b/src/main/java/laddergame/domain/LinesGenerator.java similarity index 98% rename from src/main/java/LinesGenerator.java rename to src/main/java/laddergame/domain/LinesGenerator.java index 9eb2cb8..6da541a 100644 --- a/src/main/java/LinesGenerator.java +++ b/src/main/java/laddergame/domain/LinesGenerator.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/Point.java b/src/main/java/laddergame/domain/Point.java similarity index 89% rename from src/main/java/Point.java rename to src/main/java/laddergame/domain/Point.java index 86531b2..730288a 100644 --- a/src/main/java/Point.java +++ b/src/main/java/laddergame/domain/Point.java @@ -1,3 +1,5 @@ +package laddergame.domain; + import java.util.Objects; public class Point { @@ -26,7 +28,7 @@ public int hashCode() { @Override public String toString() { - return "Point{" + + return "laddergame.domain.Point{" + "x=" + x + ", y=" + y + '}'; diff --git a/src/main/java/PointsGenerator.java b/src/main/java/laddergame/domain/PointsGenerator.java similarity index 95% rename from src/main/java/PointsGenerator.java rename to src/main/java/laddergame/domain/PointsGenerator.java index 0b7ddc5..e1688bd 100644 --- a/src/main/java/PointsGenerator.java +++ b/src/main/java/laddergame/domain/PointsGenerator.java @@ -1,6 +1,6 @@ -import java.lang.reflect.Array; +package laddergame.domain; + import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/InputScanner.java b/src/main/java/laddergame/view/InputScanner.java similarity index 96% rename from src/main/java/InputScanner.java rename to src/main/java/laddergame/view/InputScanner.java index 85426e2..d239bbe 100644 --- a/src/main/java/InputScanner.java +++ b/src/main/java/laddergame/view/InputScanner.java @@ -1,3 +1,5 @@ +package laddergame.view; + import java.util.Scanner; public class InputScanner { @@ -16,7 +18,7 @@ public String getPlayerNamesFromUser() { public int getLadderHeightFromUser() { System.out.println(MESSAGE_GET_LADDER_HEIGHT); return Integer.parseInt(scanner.nextLine()); - } +} public static void printSeparationLine() { System.out.println(EMPTY_LINE); diff --git a/src/main/java/InputValidator.java b/src/main/java/laddergame/view/InputValidator.java similarity index 96% rename from src/main/java/InputValidator.java rename to src/main/java/laddergame/view/InputValidator.java index f3b1740..5506272 100644 --- a/src/main/java/InputValidator.java +++ b/src/main/java/laddergame/view/InputValidator.java @@ -1,3 +1,5 @@ +package laddergame.view; + import java.util.List; public class InputValidator { diff --git a/src/main/java/LadderGamePrinter.java b/src/main/java/laddergame/view/LadderGamePrinter.java similarity index 74% rename from src/main/java/LadderGamePrinter.java rename to src/main/java/laddergame/view/LadderGamePrinter.java index c99c79c..3296603 100644 --- a/src/main/java/LadderGamePrinter.java +++ b/src/main/java/laddergame/view/LadderGamePrinter.java @@ -1,4 +1,8 @@ -import java.util.ArrayList; +package laddergame.view; + +import laddergame.domain.Ladder; +import laddergame.domain.LadderGameInput; + import java.util.List; public class LadderGamePrinter { @@ -19,7 +23,7 @@ private static void printRow() { } - private static List generateRow(int rowIndex) { + private static void generateRow(int rowIndex) { } diff --git a/src/test/java/InputScannerTest.java b/src/test/java/laddergame/InputScannerTest.java similarity index 95% rename from src/test/java/InputScannerTest.java rename to src/test/java/laddergame/InputScannerTest.java index d611fb6..a27830c 100644 --- a/src/test/java/InputScannerTest.java +++ b/src/test/java/laddergame/InputScannerTest.java @@ -1,3 +1,6 @@ +package laddergame; + +import laddergame.view.InputScanner; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; diff --git a/src/test/java/InputValidatorTest.java b/src/test/java/laddergame/InputValidatorTest.java similarity index 94% rename from src/test/java/InputValidatorTest.java rename to src/test/java/laddergame/InputValidatorTest.java index 1398bcc..cbeb122 100644 --- a/src/test/java/InputValidatorTest.java +++ b/src/test/java/laddergame/InputValidatorTest.java @@ -1,3 +1,6 @@ +package laddergame; + +import laddergame.view.InputValidator; import org.junit.jupiter.api.Test; import java.util.Arrays; diff --git a/src/test/java/LadderGameInputTest.java b/src/test/java/laddergame/LadderGameInputTest.java similarity index 94% rename from src/test/java/LadderGameInputTest.java rename to src/test/java/laddergame/LadderGameInputTest.java index cfabbd8..9a08f75 100644 --- a/src/test/java/LadderGameInputTest.java +++ b/src/test/java/laddergame/LadderGameInputTest.java @@ -1,3 +1,7 @@ +package laddergame; + +import laddergame.domain.LadderGameInput; +import laddergame.view.InputScanner; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; diff --git a/src/test/java/LadderGamePlayersTest.java b/src/test/java/laddergame/LadderGamePlayersTest.java similarity index 91% rename from src/test/java/LadderGamePlayersTest.java rename to src/test/java/laddergame/LadderGamePlayersTest.java index 662d3b4..1458235 100644 --- a/src/test/java/LadderGamePlayersTest.java +++ b/src/test/java/laddergame/LadderGamePlayersTest.java @@ -1,3 +1,6 @@ +package laddergame; + +import laddergame.domain.LadderGamePlayers; import org.junit.jupiter.api.Test; import java.util.Arrays; diff --git a/src/test/java/LadderGameTest.java b/src/test/java/laddergame/LadderGameTest.java similarity index 61% rename from src/test/java/LadderGameTest.java rename to src/test/java/laddergame/LadderGameTest.java index 1d9a067..bf68a2a 100644 --- a/src/test/java/LadderGameTest.java +++ b/src/test/java/laddergame/LadderGameTest.java @@ -1,3 +1,5 @@ +package laddergame; + public class LadderGameTest { } diff --git a/src/test/java/LadderGeneratorTest.java b/src/test/java/laddergame/LadderGeneratorTest.java similarity index 93% rename from src/test/java/LadderGeneratorTest.java rename to src/test/java/laddergame/LadderGeneratorTest.java index 3dc12a3..2b34dfe 100644 --- a/src/test/java/LadderGeneratorTest.java +++ b/src/test/java/laddergame/LadderGeneratorTest.java @@ -1,3 +1,7 @@ +package laddergame; + +import laddergame.domain.*; +import laddergame.view.InputScanner; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; diff --git a/src/test/java/LinesGeneratorTest.java b/src/test/java/laddergame/LinesGeneratorTest.java similarity index 94% rename from src/test/java/LinesGeneratorTest.java rename to src/test/java/laddergame/LinesGeneratorTest.java index f337117..fa4ef06 100644 --- a/src/test/java/LinesGeneratorTest.java +++ b/src/test/java/laddergame/LinesGeneratorTest.java @@ -1,3 +1,7 @@ +package laddergame; + +import laddergame.domain.*; +import laddergame.view.InputScanner; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -8,7 +12,6 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class LinesGeneratorTest { diff --git a/src/test/java/PointsGeneratorTest.java b/src/test/java/laddergame/PointsGeneratorTest.java similarity index 87% rename from src/test/java/PointsGeneratorTest.java rename to src/test/java/laddergame/PointsGeneratorTest.java index 96caa8b..406b542 100644 --- a/src/test/java/PointsGeneratorTest.java +++ b/src/test/java/laddergame/PointsGeneratorTest.java @@ -1,5 +1,11 @@ +package laddergame; + +import laddergame.domain.LadderGameInput; +import laddergame.domain.LadderGamePlayers; +import laddergame.domain.Point; +import laddergame.domain.PointsGenerator; +import laddergame.view.InputScanner; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; From 93fe5e82cd6444e25311e065db7cb75895556916 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Sun, 26 Jan 2020 22:30:04 +0900 Subject: [PATCH 06/31] =?UTF-8?q?refactor:=20InputScanner=EC=9D=98=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EB=A5=BC=20InputView=EB=A1=9C=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/laddergame/view/InputView.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/laddergame/view/InputView.java diff --git a/src/main/java/laddergame/view/InputView.java b/src/main/java/laddergame/view/InputView.java new file mode 100644 index 0000000..d8a7c6f --- /dev/null +++ b/src/main/java/laddergame/view/InputView.java @@ -0,0 +1,20 @@ +package laddergame.view; + +import java.util.Scanner; + +public class InputView { + + private static final Scanner SCANNER = new Scanner(System.in); + private static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; + private static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; + + public String getPlayerNamesFromConsole() { + System.out.println(MESSAGE_GET_PLAYER_NAMES); + return SCANNER.nextLine(); + } + + public int getLadderHeightFromConsole() { + System.out.println(MESSAGE_GET_LADDER_HEIGHT); + return SCANNER.nextInt(); + } +} From d260eb2250c13fdcc0b9a23c36b80024b5139e41 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Sun, 26 Jan 2020 22:35:59 +0900 Subject: [PATCH 07/31] =?UTF-8?q?refactor:=20LadderGame=EC=9D=98=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EB=A5=BC=20LadderGameController=EB=A1=9C=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/laddergame/LadderGame.java | 26 +++----------- .../controller/LadderGameController.java | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 22 deletions(-) create mode 100644 src/main/java/laddergame/controller/LadderGameController.java diff --git a/src/main/java/laddergame/LadderGame.java b/src/main/java/laddergame/LadderGame.java index ce84b4a..115b654 100644 --- a/src/main/java/laddergame/LadderGame.java +++ b/src/main/java/laddergame/LadderGame.java @@ -1,30 +1,12 @@ package laddergame; -import laddergame.domain.Ladder; -import laddergame.domain.LadderGameInput; -import laddergame.domain.LadderGamePlayers; -import laddergame.domain.LadderGenerator; -import laddergame.view.InputScanner; -import laddergame.view.InputValidator; -import laddergame.view.LadderGamePrinter; - -import java.util.List; +import laddergame.controller.LadderGameController; +import laddergame.view.InputView; public class LadderGame { public static void main(String[] args) { - List playerNames = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); - InputValidator.validatePlayerNames(playerNames); - InputScanner.printSeparationLine(); - int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - InputScanner.printSeparationLine(); - - LadderGamePlayers.calculatePlayerCount(playerNames); - int playerCount = LadderGamePlayers.getPlayerCount(); - - Ladder ladder = LadderGenerator.generateLadder(); - - LadderGamePrinter.printLadderGame(ladder); + LadderGameController ladderGameController = new LadderGameController(new InputView()); + ladderGameController.run(); } - } diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java new file mode 100644 index 0000000..1e5db88 --- /dev/null +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -0,0 +1,35 @@ +package laddergame.controller; + +import laddergame.domain.Ladder; +import laddergame.domain.LadderGameInput; +import laddergame.domain.LadderGamePlayers; +import laddergame.domain.LadderGenerator; +import laddergame.view.InputScanner; +import laddergame.view.InputValidator; +import laddergame.view.InputView; +import laddergame.view.LadderGamePrinter; + +public class LadderGameController { + + private final InputView inputView; + + public LadderGameController(InputView inputView) { + this.inputView = inputView; + } + + public void run() { + String playerNames = inputView.getPlayerNamesFromConsole(); + InputValidator.validatePlayerNames(playerNames); + InputScanner.printSeparationLine(); + + int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); + InputScanner.printSeparationLine(); + + LadderGamePlayers.calculatePlayerCount(playerNames); + int playerCount = LadderGamePlayers.getPlayerCount(); + + Ladder ladder = LadderGenerator.generateLadder(); + + LadderGamePrinter.printLadderGame(ladder); + } +} From 34a673b012ae7830edc6a9225c544c3038d1c294 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Sun, 26 Jan 2020 23:05:09 +0900 Subject: [PATCH 08/31] =?UTF-8?q?feat:=20LadderGameService=EC=99=80=20Ladd?= =?UTF-8?q?erHeight=20=EA=B0=9D=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderGameController안의 run()에서 LadderGameService의 메서드들을 호출 - LadderHeight는 새롭게 객체를 만들었지만, Players의 경우 기존의 LadderGamePlayers의 이름만 바꿈 --- .../controller/LadderGameController.java | 23 +++++++------------ .../java/laddergame/domain/LadderHeight.java | 5 ++++ .../laddergame/domain/LinesGenerator.java | 4 +++- .../laddergame/domain/PointsGenerator.java | 4 +++- .../Players.java} | 4 ++-- .../laddergame/service/LadderGameService.java | 20 ++++++++++++++++ .../laddergame/LadderGamePlayersTest.java | 6 ++--- .../java/laddergame/LadderGeneratorTest.java | 3 ++- .../java/laddergame/LinesGeneratorTest.java | 3 ++- .../java/laddergame/PointsGeneratorTest.java | 4 ++-- 10 files changed, 50 insertions(+), 26 deletions(-) create mode 100644 src/main/java/laddergame/domain/LadderHeight.java rename src/main/java/laddergame/domain/{LadderGamePlayers.java => player/Players.java} (81%) create mode 100644 src/main/java/laddergame/service/LadderGameService.java diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index 1e5db88..f232b95 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -1,17 +1,15 @@ package laddergame.controller; import laddergame.domain.Ladder; -import laddergame.domain.LadderGameInput; -import laddergame.domain.LadderGamePlayers; -import laddergame.domain.LadderGenerator; -import laddergame.view.InputScanner; -import laddergame.view.InputValidator; +import laddergame.domain.LadderHeight; +import laddergame.domain.player.Players; +import laddergame.service.LadderGameService; import laddergame.view.InputView; -import laddergame.view.LadderGamePrinter; public class LadderGameController { private final InputView inputView; + private final LadderGameService ladderGameService = new LadderGameService(); public LadderGameController(InputView inputView) { this.inputView = inputView; @@ -19,17 +17,12 @@ public LadderGameController(InputView inputView) { public void run() { String playerNames = inputView.getPlayerNamesFromConsole(); - InputValidator.validatePlayerNames(playerNames); - InputScanner.printSeparationLine(); + Players players = ladderGameService.createPlayers(playerNames); - int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - InputScanner.printSeparationLine(); + int ladderHeightInput = inputView.getLadderHeightFromConsole(); + LadderHeight ladderHeight = ladderGameService.createLadderHeight(ladderHeightInput); - LadderGamePlayers.calculatePlayerCount(playerNames); - int playerCount = LadderGamePlayers.getPlayerCount(); + Ladder ladder = ladderGameService.createLadder(players, ladderHeight); - Ladder ladder = LadderGenerator.generateLadder(); - - LadderGamePrinter.printLadderGame(ladder); } } diff --git a/src/main/java/laddergame/domain/LadderHeight.java b/src/main/java/laddergame/domain/LadderHeight.java new file mode 100644 index 0000000..45effad --- /dev/null +++ b/src/main/java/laddergame/domain/LadderHeight.java @@ -0,0 +1,5 @@ +package laddergame.domain; + +public class LadderHeight { + +} diff --git a/src/main/java/laddergame/domain/LinesGenerator.java b/src/main/java/laddergame/domain/LinesGenerator.java index 6da541a..afeaa4a 100644 --- a/src/main/java/laddergame/domain/LinesGenerator.java +++ b/src/main/java/laddergame/domain/LinesGenerator.java @@ -1,5 +1,7 @@ package laddergame.domain; +import laddergame.domain.player.Players; + import java.util.ArrayList; import java.util.List; @@ -30,7 +32,7 @@ private static void setNumberOfRows() { } private static void setNumberOfLines() { - int playerCount = LadderGamePlayers.getPlayerCount(); + int playerCount = Players.getPlayerCount(); int numberOfLinesPerRow = playerCount - 1; numberOfLines = numberOfLinesPerRow * numberOfRows; } diff --git a/src/main/java/laddergame/domain/PointsGenerator.java b/src/main/java/laddergame/domain/PointsGenerator.java index e1688bd..747cf93 100644 --- a/src/main/java/laddergame/domain/PointsGenerator.java +++ b/src/main/java/laddergame/domain/PointsGenerator.java @@ -1,5 +1,7 @@ package laddergame.domain; +import laddergame.domain.player.Players; + import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -21,7 +23,7 @@ public static List generatePoints() { private static void setNumberOfPoints() { numberOfX = LadderGameInput.getLadderHeight(); - numberOfY = LadderGamePlayers.getPlayerCount(); + numberOfY = Players.getPlayerCount(); } public static ArrayList createXs() { diff --git a/src/main/java/laddergame/domain/LadderGamePlayers.java b/src/main/java/laddergame/domain/player/Players.java similarity index 81% rename from src/main/java/laddergame/domain/LadderGamePlayers.java rename to src/main/java/laddergame/domain/player/Players.java index 6323fbb..ec54d9e 100644 --- a/src/main/java/laddergame/domain/LadderGamePlayers.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -1,8 +1,8 @@ -package laddergame.domain; +package laddergame.domain.player; import java.util.List; -public class LadderGamePlayers { +public class Players { private static int playerCount; diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java new file mode 100644 index 0000000..5d47275 --- /dev/null +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -0,0 +1,20 @@ +package laddergame.service; + +import laddergame.domain.Ladder; +import laddergame.domain.LadderHeight; +import laddergame.domain.player.Players; + +public class LadderGameService { + + public Players createPlayers(String playerNames) { + return new Players(); + } + + public LadderHeight createLadderHeight(int ladderHightInput) { + return new LadderHeight(); + } + + public Ladder createLadder(Players players, LadderHeight ladderHeight) { + return new Ladder(); + } +} diff --git a/src/test/java/laddergame/LadderGamePlayersTest.java b/src/test/java/laddergame/LadderGamePlayersTest.java index 1458235..4236465 100644 --- a/src/test/java/laddergame/LadderGamePlayersTest.java +++ b/src/test/java/laddergame/LadderGamePlayersTest.java @@ -1,6 +1,6 @@ package laddergame; -import laddergame.domain.LadderGamePlayers; +import laddergame.domain.player.Players; import org.junit.jupiter.api.Test; import java.util.Arrays; @@ -18,10 +18,10 @@ public void testGetPlayerCount() { String inputString= "태식,태식이,태식삼"; List playerNames = Arrays.asList(inputString.split(DELIMITER)); - LadderGamePlayers.calculatePlayerCount(playerNames); + Players.calculatePlayerCount(playerNames); // when - int playerCount = LadderGamePlayers.getPlayerCount(); + int playerCount = Players.getPlayerCount(); // then assertThat(playerCount) diff --git a/src/test/java/laddergame/LadderGeneratorTest.java b/src/test/java/laddergame/LadderGeneratorTest.java index 2b34dfe..3957171 100644 --- a/src/test/java/laddergame/LadderGeneratorTest.java +++ b/src/test/java/laddergame/LadderGeneratorTest.java @@ -1,6 +1,7 @@ package laddergame; import laddergame.domain.*; +import laddergame.domain.player.Players; import laddergame.view.InputScanner; import org.junit.jupiter.api.Test; @@ -28,7 +29,7 @@ public void testGenerate2x1Ladder() { String playerNamesString= "태식,태식이"; List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - LadderGamePlayers.calculatePlayerCount(playerNames); + Players.calculatePlayerCount(playerNames); String ladderHeightString = "1"; InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); diff --git a/src/test/java/laddergame/LinesGeneratorTest.java b/src/test/java/laddergame/LinesGeneratorTest.java index fa4ef06..e747004 100644 --- a/src/test/java/laddergame/LinesGeneratorTest.java +++ b/src/test/java/laddergame/LinesGeneratorTest.java @@ -1,6 +1,7 @@ package laddergame; import laddergame.domain.*; +import laddergame.domain.player.Players; import laddergame.view.InputScanner; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -21,7 +22,7 @@ class LinesGeneratorTest { public static void setUp() { String playerNamesString= "태식,태식이,태식삼"; List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - LadderGamePlayers.calculatePlayerCount(playerNames); + Players.calculatePlayerCount(playerNames); String ladderHeightString = "2"; InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); diff --git a/src/test/java/laddergame/PointsGeneratorTest.java b/src/test/java/laddergame/PointsGeneratorTest.java index 406b542..c524f65 100644 --- a/src/test/java/laddergame/PointsGeneratorTest.java +++ b/src/test/java/laddergame/PointsGeneratorTest.java @@ -1,7 +1,7 @@ package laddergame; import laddergame.domain.LadderGameInput; -import laddergame.domain.LadderGamePlayers; +import laddergame.domain.player.Players; import laddergame.domain.Point; import laddergame.domain.PointsGenerator; import laddergame.view.InputScanner; @@ -24,7 +24,7 @@ class PointsGeneratorTest { public static void setUp() { String playerNamesString= "태식,태식이,태식삼"; List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - LadderGamePlayers.calculatePlayerCount(playerNames); + Players.calculatePlayerCount(playerNames); String ladderHeightString = "2"; InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); From 5c9131763be398132f6611dfe7564597828fce4e Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Sun, 26 Jan 2020 23:34:43 +0900 Subject: [PATCH 09/31] =?UTF-8?q?doc:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 28c201b..3da274a 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,19 @@ -# java-ladder 게임 +# 사다리 게임 +## 기능 구현 목록 +### 참여자 이름 입력 +- 여러 사람의 이름은 쉼표(,)를 기준으로 구분 +- 참여자의 이름은 최대 5글자 +- 앞 뒤 공백을 제거 +- 중복된 이름이 있는 경우 예외 처리 -## 기능 요구사항 -1. 사다리 게임에 참여하는 사람의 이름을 최대 5글자까지 부여할 수 있다. -2. 사다리를 출력할 때 사람 이름도 같이 출력한다. -3. 사람 이름은 쉼표(,)를 기준으로 구분한다. -4. 사람 이름을 5자 기준으로 출력하기 때문에 사다리 폭도 넓어져야 한다. -5. 사다리 타기가 정상적으로 동작하려면 라인이 겹치지 않도록 해야 한다. - - |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할 -지 결정할 수 없다. +### 사다리 높이 입력 ---- +### 사다리 생성 +- 사다리의 라인이 겹치지 않도록 사다리를 생성 +e.g. |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할 +지 결정할 수 없다. -## To Do -- ~~input 받기 -> laddergame.domain.LadderGameInput 클래스로 추상화~~ -- ~~laddergame.view.InputScanner 클래스 만들기~~ -- ~~player 클래스 만들기~~ -- ~~laddergame.view.InputValidator 클래스 만들기~~ -- ~~laddergame.domain.Ladder 클래스 만들기~~ -- laddergame.LadderGame 클래스 만들기 -- output(실행결과) 출력하기 - - 1x1 출력 - - 2x3 출력 - - 4x5 출력 -- LadderGameResultFirstLine -- LadderGameResultLine -- LadderGameInput을 LadderHeight과 LadderGamePlayer로 쪼개기 - \ No newline at end of file +### 실행결과 출력 +- 사다리 위에 사람 이름을 출력 +- 사람 이름을 5자 기준으로 출력 +- 사다리 폭 또한 사람 이름을 기준으로 함 From ed9829097e8edab0efa5f6e30da96d7755242b69 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Mon, 27 Jan 2020 15:55:17 +0900 Subject: [PATCH 10/31] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=B0=B8?= =?UTF-8?q?=EC=97=AC=EC=9E=90=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=84=9C=20Players=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderGameService에서 Players를 생성 - Players는 Player 객체를 담고 있는 일급 객체 - Players는 중복된 참여자가 있는지 검사 - Player는 참여자의 이름이 5자 이내인지 검사 --- .../laddergame/domain/LinesGenerator.java | 2 +- .../laddergame/domain/PointsGenerator.java | 2 +- .../java/laddergame/domain/player/Player.java | 39 +++++++++++++++++++ .../laddergame/domain/player/Players.java | 17 +++++--- .../laddergame/service/LadderGameService.java | 22 ++++++++++- 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 src/main/java/laddergame/domain/player/Player.java diff --git a/src/main/java/laddergame/domain/LinesGenerator.java b/src/main/java/laddergame/domain/LinesGenerator.java index afeaa4a..6f24f8a 100644 --- a/src/main/java/laddergame/domain/LinesGenerator.java +++ b/src/main/java/laddergame/domain/LinesGenerator.java @@ -32,7 +32,7 @@ private static void setNumberOfRows() { } private static void setNumberOfLines() { - int playerCount = Players.getPlayerCount(); + int playerCount = 0; //Players.getPlayerCount(); int numberOfLinesPerRow = playerCount - 1; numberOfLines = numberOfLinesPerRow * numberOfRows; } diff --git a/src/main/java/laddergame/domain/PointsGenerator.java b/src/main/java/laddergame/domain/PointsGenerator.java index 747cf93..4aa83a7 100644 --- a/src/main/java/laddergame/domain/PointsGenerator.java +++ b/src/main/java/laddergame/domain/PointsGenerator.java @@ -23,7 +23,7 @@ public static List generatePoints() { private static void setNumberOfPoints() { numberOfX = LadderGameInput.getLadderHeight(); - numberOfY = Players.getPlayerCount(); + numberOfY = 0; //Players.getPlayerCount(); } public static ArrayList createXs() { diff --git a/src/main/java/laddergame/domain/player/Player.java b/src/main/java/laddergame/domain/player/Player.java new file mode 100644 index 0000000..889db11 --- /dev/null +++ b/src/main/java/laddergame/domain/player/Player.java @@ -0,0 +1,39 @@ +package laddergame.domain.player; + +import java.util.Objects; + +public class Player { + + private static final int PLAYER_NAME_MAX_LENGTH = 5; + + private final String name; + + public Player(final String name) { + this.name = name; + + if (nameIsLongerThanMaxLength()) { + throw new IllegalArgumentException(); + } + } + + private boolean nameIsLongerThanMaxLength() { + return name.length() > PLAYER_NAME_MAX_LENGTH; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Player player = (Player) o; + return Objects.equals(name, player.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } +} diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index ec54d9e..241dfc4 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -1,16 +1,23 @@ package laddergame.domain.player; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class Players { - private static int playerCount; + List players = new ArrayList<>(); - public static void calculatePlayerCount(List playerNames) { - playerCount = playerNames.size(); + public Players(List players) { + if (hasDuplicatedNamesIn(players)) { + throw new IllegalArgumentException(); + } + this.players = players; } - public static int getPlayerCount() { - return playerCount; + private boolean hasDuplicatedNamesIn(List players) { + Set nameSet = new HashSet<>(players); + return players.size() != nameSet.size(); } } diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index 5d47275..b4713ef 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -2,12 +2,32 @@ import laddergame.domain.Ladder; import laddergame.domain.LadderHeight; +import laddergame.domain.player.Player; import laddergame.domain.player.Players; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class LadderGameService { + private static final String DELIMITER_PLAYER_NAME = ","; + public Players createPlayers(String playerNames) { - return new Players(); + String[] parsedPlayerNames = parsePlayerNames(playerNames); + List playerList = createPlayerList(parsedPlayerNames); + return new Players(playerList); + } + + private String[] parsePlayerNames(String playerNames) { + return playerNames.split(DELIMITER_PLAYER_NAME); + } + + private List createPlayerList(String[] playerNames) { + return Arrays.stream(playerNames) + .map(String::trim) + .map(Player::new) + .collect(Collectors.toList()); } public LadderHeight createLadderHeight(int ladderHightInput) { From 16ca1e41b8eaec3c65e3b97d52611f37c4d38629 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Mon, 27 Jan 2020 16:21:52 +0900 Subject: [PATCH 11/31] =?UTF-8?q?feat:=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EB=86=92=EC=9D=B4=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=84=9C=20Lad?= =?UTF-8?q?derHeight=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderHeight에서 사다리 높이가 정수 1 이상인지 검사 - 그 밖에 Domain 패키지 안의 클래스들의 구조를 정리 --- README.md | 3 ++- .../controller/LadderGameController.java | 4 ++-- .../java/laddergame/domain/LadderHeight.java | 5 ---- .../domain/{ => ladder}/Ladder.java | 4 ++-- .../domain/{ => ladder}/LadderGenerator.java | 2 +- .../laddergame/domain/{ => ladder}/Line.java | 4 ++-- .../domain/{ => ladder}/LinesGenerator.java | 4 ++-- .../laddergame/domain/{ => ladder}/Point.java | 4 ++-- .../domain/{ => ladder}/PointsGenerator.java | 4 ++-- .../domain/ladderheight/LadderHeight.java | 24 +++++++++++++++++++ .../java/laddergame/domain/player/Player.java | 8 +++---- .../laddergame/service/LadderGameService.java | 6 ++--- .../laddergame/view/LadderGamePrinter.java | 2 +- .../java/laddergame/LadderGeneratorTest.java | 4 ++++ .../java/laddergame/LinesGeneratorTest.java | 3 +++ .../java/laddergame/PointsGeneratorTest.java | 4 ++-- 16 files changed, 56 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/laddergame/domain/LadderHeight.java rename src/main/java/laddergame/domain/{ => ladder}/Ladder.java (89%) rename src/main/java/laddergame/domain/{ => ladder}/LadderGenerator.java (85%) rename src/main/java/laddergame/domain/{ => ladder}/Line.java (91%) rename src/main/java/laddergame/domain/{ => ladder}/LinesGenerator.java (95%) rename src/main/java/laddergame/domain/{ => ladder}/Point.java (88%) rename src/main/java/laddergame/domain/{ => ladder}/PointsGenerator.java (93%) create mode 100644 src/main/java/laddergame/domain/ladderheight/LadderHeight.java diff --git a/README.md b/README.md index 3da274a..1fe9b8f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ - 앞 뒤 공백을 제거 - 중복된 이름이 있는 경우 예외 처리 -### 사다리 높이 입력 +### 사다리 높이 입력 +- 사다리 높이는 1 이상이여야함 ### 사다리 생성 - 사다리의 라인이 겹치지 않도록 사다리를 생성 diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index f232b95..d1386d6 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -1,7 +1,7 @@ package laddergame.controller; -import laddergame.domain.Ladder; -import laddergame.domain.LadderHeight; +import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; import laddergame.service.LadderGameService; import laddergame.view.InputView; diff --git a/src/main/java/laddergame/domain/LadderHeight.java b/src/main/java/laddergame/domain/LadderHeight.java deleted file mode 100644 index 45effad..0000000 --- a/src/main/java/laddergame/domain/LadderHeight.java +++ /dev/null @@ -1,5 +0,0 @@ -package laddergame.domain; - -public class LadderHeight { - -} diff --git a/src/main/java/laddergame/domain/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java similarity index 89% rename from src/main/java/laddergame/domain/Ladder.java rename to src/main/java/laddergame/domain/ladder/Ladder.java index b68438d..5d97074 100644 --- a/src/main/java/laddergame/domain/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -1,4 +1,4 @@ -package laddergame.domain; +package laddergame.domain.ladder; import java.util.ArrayList; import java.util.List; @@ -30,7 +30,7 @@ public int hashCode() { @Override public String toString() { - return "laddergame.domain.Ladder{" + + return "laddergame.domain.ladder.Ladder{" + "lines=" + lines + '}'; } diff --git a/src/main/java/laddergame/domain/LadderGenerator.java b/src/main/java/laddergame/domain/ladder/LadderGenerator.java similarity index 85% rename from src/main/java/laddergame/domain/LadderGenerator.java rename to src/main/java/laddergame/domain/ladder/LadderGenerator.java index ea10f50..7b1466f 100644 --- a/src/main/java/laddergame/domain/LadderGenerator.java +++ b/src/main/java/laddergame/domain/ladder/LadderGenerator.java @@ -1,4 +1,4 @@ -package laddergame.domain; +package laddergame.domain.ladder; import java.util.List; diff --git a/src/main/java/laddergame/domain/Line.java b/src/main/java/laddergame/domain/ladder/Line.java similarity index 91% rename from src/main/java/laddergame/domain/Line.java rename to src/main/java/laddergame/domain/ladder/Line.java index 120eeaa..1ee4b9b 100644 --- a/src/main/java/laddergame/domain/Line.java +++ b/src/main/java/laddergame/domain/ladder/Line.java @@ -1,4 +1,4 @@ -package laddergame.domain; +package laddergame.domain.ladder; import java.util.Objects; @@ -30,7 +30,7 @@ public int hashCode() { @Override public String toString() { - return "laddergame.domain.Line{" + + return "laddergame.domain.ladder.Line{" + "leftPoint=" + leftPoint + ", rightPoint=" + rightPoint + ", exists=" + exists + diff --git a/src/main/java/laddergame/domain/LinesGenerator.java b/src/main/java/laddergame/domain/ladder/LinesGenerator.java similarity index 95% rename from src/main/java/laddergame/domain/LinesGenerator.java rename to src/main/java/laddergame/domain/ladder/LinesGenerator.java index 6f24f8a..faf5cb8 100644 --- a/src/main/java/laddergame/domain/LinesGenerator.java +++ b/src/main/java/laddergame/domain/ladder/LinesGenerator.java @@ -1,6 +1,6 @@ -package laddergame.domain; +package laddergame.domain.ladder; -import laddergame.domain.player.Players; +import laddergame.domain.LadderGameInput; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/laddergame/domain/Point.java b/src/main/java/laddergame/domain/ladder/Point.java similarity index 88% rename from src/main/java/laddergame/domain/Point.java rename to src/main/java/laddergame/domain/ladder/Point.java index 730288a..a68cad5 100644 --- a/src/main/java/laddergame/domain/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -1,4 +1,4 @@ -package laddergame.domain; +package laddergame.domain.ladder; import java.util.Objects; @@ -28,7 +28,7 @@ public int hashCode() { @Override public String toString() { - return "laddergame.domain.Point{" + + return "laddergame.domain.ladder.Point{" + "x=" + x + ", y=" + y + '}'; diff --git a/src/main/java/laddergame/domain/PointsGenerator.java b/src/main/java/laddergame/domain/ladder/PointsGenerator.java similarity index 93% rename from src/main/java/laddergame/domain/PointsGenerator.java rename to src/main/java/laddergame/domain/ladder/PointsGenerator.java index 4aa83a7..b43c087 100644 --- a/src/main/java/laddergame/domain/PointsGenerator.java +++ b/src/main/java/laddergame/domain/ladder/PointsGenerator.java @@ -1,6 +1,6 @@ -package laddergame.domain; +package laddergame.domain.ladder; -import laddergame.domain.player.Players; +import laddergame.domain.LadderGameInput; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/laddergame/domain/ladderheight/LadderHeight.java b/src/main/java/laddergame/domain/ladderheight/LadderHeight.java new file mode 100644 index 0000000..4e1c38d --- /dev/null +++ b/src/main/java/laddergame/domain/ladderheight/LadderHeight.java @@ -0,0 +1,24 @@ +package laddergame.domain.ladderheight; + +public class LadderHeight { + + private static final int LADDER_HEIGHT_MIN_LENGTH = 1; + + private final int height; + + public LadderHeight(int height) { + if (isLongerThanMinLength(height)) { + throw new IllegalArgumentException(); + } + + this.height = height; + } + + private boolean isLongerThanMinLength(int height) { + return height >= LADDER_HEIGHT_MIN_LENGTH; + } + + public int getHeight() { + return height; + } +} diff --git a/src/main/java/laddergame/domain/player/Player.java b/src/main/java/laddergame/domain/player/Player.java index 889db11..949b3d3 100644 --- a/src/main/java/laddergame/domain/player/Player.java +++ b/src/main/java/laddergame/domain/player/Player.java @@ -9,14 +9,14 @@ public class Player { private final String name; public Player(final String name) { - this.name = name; - - if (nameIsLongerThanMaxLength()) { + if (isLongerThanMaxLength(name)) { throw new IllegalArgumentException(); } + + this.name = name; } - private boolean nameIsLongerThanMaxLength() { + private boolean isLongerThanMaxLength(String name) { return name.length() > PLAYER_NAME_MAX_LENGTH; } diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index b4713ef..e7d7dc7 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -1,7 +1,7 @@ package laddergame.service; -import laddergame.domain.Ladder; -import laddergame.domain.LadderHeight; +import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Player; import laddergame.domain.player.Players; @@ -31,7 +31,7 @@ private List createPlayerList(String[] playerNames) { } public LadderHeight createLadderHeight(int ladderHightInput) { - return new LadderHeight(); + return new LadderHeight(ladderHightInput); } public Ladder createLadder(Players players, LadderHeight ladderHeight) { diff --git a/src/main/java/laddergame/view/LadderGamePrinter.java b/src/main/java/laddergame/view/LadderGamePrinter.java index 3296603..dd0839e 100644 --- a/src/main/java/laddergame/view/LadderGamePrinter.java +++ b/src/main/java/laddergame/view/LadderGamePrinter.java @@ -1,6 +1,6 @@ package laddergame.view; -import laddergame.domain.Ladder; +import laddergame.domain.ladder.Ladder; import laddergame.domain.LadderGameInput; import java.util.List; diff --git a/src/test/java/laddergame/LadderGeneratorTest.java b/src/test/java/laddergame/LadderGeneratorTest.java index 3957171..aca8550 100644 --- a/src/test/java/laddergame/LadderGeneratorTest.java +++ b/src/test/java/laddergame/LadderGeneratorTest.java @@ -1,6 +1,10 @@ package laddergame; import laddergame.domain.*; +import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladder.LadderGenerator; +import laddergame.domain.ladder.Line; +import laddergame.domain.ladder.Point; import laddergame.domain.player.Players; import laddergame.view.InputScanner; import org.junit.jupiter.api.Test; diff --git a/src/test/java/laddergame/LinesGeneratorTest.java b/src/test/java/laddergame/LinesGeneratorTest.java index e747004..af6c025 100644 --- a/src/test/java/laddergame/LinesGeneratorTest.java +++ b/src/test/java/laddergame/LinesGeneratorTest.java @@ -1,6 +1,9 @@ package laddergame; import laddergame.domain.*; +import laddergame.domain.ladder.Line; +import laddergame.domain.ladder.LinesGenerator; +import laddergame.domain.ladder.Point; import laddergame.domain.player.Players; import laddergame.view.InputScanner; import org.junit.jupiter.api.BeforeAll; diff --git a/src/test/java/laddergame/PointsGeneratorTest.java b/src/test/java/laddergame/PointsGeneratorTest.java index c524f65..9c85219 100644 --- a/src/test/java/laddergame/PointsGeneratorTest.java +++ b/src/test/java/laddergame/PointsGeneratorTest.java @@ -2,8 +2,8 @@ import laddergame.domain.LadderGameInput; import laddergame.domain.player.Players; -import laddergame.domain.Point; -import laddergame.domain.PointsGenerator; +import laddergame.domain.ladder.Point; +import laddergame.domain.ladder.PointsGenerator; import laddergame.view.InputScanner; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; From 4ce42af805199c26a1f54592803fe8189148d515 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Mon, 27 Jan 2020 21:56:30 +0900 Subject: [PATCH 12/31] =?UTF-8?q?refactor:=20Ladder=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EC=97=90=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 팩토리 메서드 with()가 Ladder 객체를 생성 - 기존의 LadderGenerator 클래스는 삭제 --- gradlew.bat | 6 +-- .../java/laddergame/domain/ladder/Ladder.java | 36 +++++-------- .../domain/ladder/LadderGenerator.java | 12 ----- .../ladder/{Line.java => LadderLine.java} | 12 ++--- .../domain/ladder/LinesGenerator.java | 18 +++---- .../java/laddergame/domain/player/Player.java | 2 +- .../laddergame/domain/player/Players.java | 12 +++-- .../laddergame/service/LadderGameService.java | 6 +-- .../java/laddergame/LadderGeneratorTest.java | 52 ------------------- .../java/laddergame/LinesGeneratorTest.java | 18 +++---- 10 files changed, 53 insertions(+), 121 deletions(-) delete mode 100644 src/main/java/laddergame/domain/ladder/LadderGenerator.java rename src/main/java/laddergame/domain/ladder/{Line.java => LadderLine.java} (70%) delete mode 100644 src/test/java/laddergame/LadderGeneratorTest.java diff --git a/gradlew.bat b/gradlew.bat index 0f8d593..700e192 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -46,12 +46,12 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windows variants +@rem Get command-ladderLine arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args -@rem Slurp the command line arguments. +@rem Slurp the command ladderLine arguments. set CMD_LINE_ARGS= set _SKIP=2 @@ -61,7 +61,7 @@ if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :execute -@rem Setup the command line +@rem Setup the command ladderLine set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar diff --git a/src/main/java/laddergame/domain/ladder/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java index 5d97074..a285627 100644 --- a/src/main/java/laddergame/domain/ladder/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -1,37 +1,29 @@ package laddergame.domain.ladder; +import laddergame.domain.ladderheight.LadderHeight; +import laddergame.domain.player.Players; + import java.util.ArrayList; import java.util.List; -import java.util.Objects; public class Ladder { - public List lines = new ArrayList<>(); - - public Ladder() { - } + private final List lines; - public Ladder(List lines) { + private Ladder(final List lines) { this.lines = lines; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Ladder ladder = (Ladder) o; - return Objects.equals(lines, ladder.lines); - } + public static Ladder with(final Players players, final LadderHeight ladderHeight) { + List lines = new ArrayList<>(); + int width = players.size(); + int height = ladderHeight.getHeight(); - @Override - public int hashCode() { - return Objects.hash(lines); - } + for (int i = 0; i < height; i++) { + LadderLine line = LadderLine.with(width, i); + lines.add(line); + } - @Override - public String toString() { - return "laddergame.domain.ladder.Ladder{" + - "lines=" + lines + - '}'; + return new Ladder(lines); } } diff --git a/src/main/java/laddergame/domain/ladder/LadderGenerator.java b/src/main/java/laddergame/domain/ladder/LadderGenerator.java deleted file mode 100644 index 7b1466f..0000000 --- a/src/main/java/laddergame/domain/ladder/LadderGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package laddergame.domain.ladder; - -import java.util.List; - -public class LadderGenerator { - - public static Ladder generateLadder() { - List lines = LinesGenerator.generateLines(); - return new Ladder(lines); - } - -} diff --git a/src/main/java/laddergame/domain/ladder/Line.java b/src/main/java/laddergame/domain/ladder/LadderLine.java similarity index 70% rename from src/main/java/laddergame/domain/ladder/Line.java rename to src/main/java/laddergame/domain/ladder/LadderLine.java index 1ee4b9b..0653856 100644 --- a/src/main/java/laddergame/domain/ladder/Line.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -2,13 +2,13 @@ import java.util.Objects; -public class Line { +public class LadderLine { private Point leftPoint; private Point rightPoint; public boolean exists = false; - public Line(Point leftPoint, Point rightPoint) { + public LadderLine(Point leftPoint, Point rightPoint) { this.leftPoint = leftPoint; this.rightPoint = rightPoint; } @@ -17,10 +17,10 @@ public Line(Point leftPoint, Point rightPoint) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Line line = (Line) o; - return exists == line.exists && - Objects.equals(leftPoint, line.leftPoint) && - Objects.equals(rightPoint, line.rightPoint); + LadderLine ladderLine = (LadderLine) o; + return exists == ladderLine.exists && + Objects.equals(leftPoint, ladderLine.leftPoint) && + Objects.equals(rightPoint, ladderLine.rightPoint); } @Override diff --git a/src/main/java/laddergame/domain/ladder/LinesGenerator.java b/src/main/java/laddergame/domain/ladder/LinesGenerator.java index faf5cb8..9a99b65 100644 --- a/src/main/java/laddergame/domain/ladder/LinesGenerator.java +++ b/src/main/java/laddergame/domain/ladder/LinesGenerator.java @@ -8,23 +8,23 @@ public class LinesGenerator { private static List points = new ArrayList<>(); - private static List lines = new ArrayList<>(); + private static List ladderLines = new ArrayList<>(); private static int numberOfLines; private static int numberOfRows; - public static List generateLines() { + public static List generateLines() { points = PointsGenerator.generatePoints(); setNumberOfRows(); setNumberOfLines(); for (int rowIndex = 0; rowIndex < numberOfRows; rowIndex++) { - List row = generateRow(rowIndex); - lines.addAll(row); + List row = generateRow(rowIndex); + ladderLines.addAll(row); } - return lines; + return ladderLines; } private static void setNumberOfRows() { @@ -37,15 +37,15 @@ private static void setNumberOfLines() { numberOfLines = numberOfLinesPerRow * numberOfRows; } - private static List generateRow(int rowIndex) { - List row = new ArrayList<>(); + private static List generateRow(int rowIndex) { + List row = new ArrayList<>(); int numberOfLinesPerRow = numberOfLines / numberOfRows; int pointIndex = rowIndex * (numberOfLinesPerRow + 1); int lastIndexOfRow = pointIndex + numberOfLinesPerRow; while (pointIndex < lastIndexOfRow) { - Line line = new Line(points.get(pointIndex), points.get(pointIndex + 1)); - row.add(line); + LadderLine ladderLine = new LadderLine(points.get(pointIndex), points.get(pointIndex + 1)); + row.add(ladderLine); pointIndex++; } diff --git a/src/main/java/laddergame/domain/player/Player.java b/src/main/java/laddergame/domain/player/Player.java index 949b3d3..8d42fe7 100644 --- a/src/main/java/laddergame/domain/player/Player.java +++ b/src/main/java/laddergame/domain/player/Player.java @@ -16,7 +16,7 @@ public Player(final String name) { this.name = name; } - private boolean isLongerThanMaxLength(String name) { + private boolean isLongerThanMaxLength(final String name) { return name.length() > PLAYER_NAME_MAX_LENGTH; } diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index 241dfc4..8b5fa12 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -1,23 +1,27 @@ package laddergame.domain.player; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Players { - List players = new ArrayList<>(); + private final List players; - public Players(List players) { + public Players(final List players) { if (hasDuplicatedNamesIn(players)) { throw new IllegalArgumentException(); } + this.players = players; } - private boolean hasDuplicatedNamesIn(List players) { + private boolean hasDuplicatedNamesIn(final List players) { Set nameSet = new HashSet<>(players); return players.size() != nameSet.size(); } + + public int size() { + return players.size(); + } } diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index e7d7dc7..9e1a360 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -30,11 +30,11 @@ private List createPlayerList(String[] playerNames) { .collect(Collectors.toList()); } - public LadderHeight createLadderHeight(int ladderHightInput) { - return new LadderHeight(ladderHightInput); + public LadderHeight createLadderHeight(int ladderHeightInput) { + return new LadderHeight(ladderHeightInput); } public Ladder createLadder(Players players, LadderHeight ladderHeight) { - return new Ladder(); + return Ladder.with(players, ladderHeight); } } diff --git a/src/test/java/laddergame/LadderGeneratorTest.java b/src/test/java/laddergame/LadderGeneratorTest.java deleted file mode 100644 index aca8550..0000000 --- a/src/test/java/laddergame/LadderGeneratorTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package laddergame; - -import laddergame.domain.*; -import laddergame.domain.ladder.Ladder; -import laddergame.domain.ladder.LadderGenerator; -import laddergame.domain.ladder.Line; -import laddergame.domain.ladder.Point; -import laddergame.domain.player.Players; -import laddergame.view.InputScanner; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LadderGeneratorTest { - - private static final String DELIMITER = ","; - - @Test - public void testGenerate2x1Ladder() { - // given - Point leftPoint = new Point(0, 0); - Point rightPoint = new Point(0, 1); - - Line line = new Line(leftPoint, rightPoint); - - Ladder expectedLadder = new Ladder(); - expectedLadder.lines.add(line); - - String playerNamesString= "태식,태식이"; - List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - Players.calculatePlayerCount(playerNames); - - String ladderHeightString = "1"; - InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); - System.setIn(inputStream); - LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - - // when - Ladder TwoByOneLadder = LadderGenerator.generateLadder(); - - // then - assertThat(TwoByOneLadder) - .isNotNull() - .isEqualTo(expectedLadder); - } - -} diff --git a/src/test/java/laddergame/LinesGeneratorTest.java b/src/test/java/laddergame/LinesGeneratorTest.java index af6c025..e88da25 100644 --- a/src/test/java/laddergame/LinesGeneratorTest.java +++ b/src/test/java/laddergame/LinesGeneratorTest.java @@ -1,7 +1,7 @@ package laddergame; import laddergame.domain.*; -import laddergame.domain.ladder.Line; +import laddergame.domain.ladder.LadderLine; import laddergame.domain.ladder.LinesGenerator; import laddergame.domain.ladder.Point; import laddergame.domain.player.Players; @@ -36,19 +36,19 @@ public static void setUp() { @Test public void testGenerateLines() { // given - List expectedLines = new ArrayList<>(); - expectedLines.add(new Line(new Point(0,0), new Point(0,1))); - expectedLines.add(new Line(new Point(0,1), new Point(0,2))); - expectedLines.add(new Line(new Point(1,0), new Point(1,1))); - expectedLines.add(new Line(new Point(1,1), new Point(1,2))); + List expectedLadderLines = new ArrayList<>(); + expectedLadderLines.add(new LadderLine(new Point(0,0), new Point(0,1))); + expectedLadderLines.add(new LadderLine(new Point(0,1), new Point(0,2))); + expectedLadderLines.add(new LadderLine(new Point(1,0), new Point(1,1))); + expectedLadderLines.add(new LadderLine(new Point(1,1), new Point(1,2))); // when - List lines = LinesGenerator.generateLines(); + List ladderLines = LinesGenerator.generateLines(); // then - assertThat(lines) + assertThat(ladderLines) .isNotNull() - .isEqualTo(expectedLines); + .isEqualTo(expectedLadderLines); } } \ No newline at end of file From 02dc9de8d775d29471593cdb01080be4e67ef635 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Thu, 30 Jan 2020 15:00:24 +0900 Subject: [PATCH 13/31] =?UTF-8?q?refactor:=20LadderLine=EA=B3=BC=20Point?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderLine에서 Point를 생성 - Point는 좌우의 다른 Point들과 연결되어있는지의 정보를 가진 enum객체 - 그 밖의 불필요한 테스트 파일 삭제 --- .../laddergame/domain/LadderGameInput.java | 41 ----------- .../java/laddergame/domain/ladder/Ladder.java | 2 +- .../laddergame/domain/ladder/LadderLine.java | 55 +++++++------- .../domain/ladder/LinesGenerator.java | 55 -------------- .../java/laddergame/domain/ladder/Point.java | 38 ++++------ .../domain/ladder/PointsGenerator.java | 45 ------------ .../laddergame/domain/player/Players.java | 4 +- .../java/laddergame/view/InputScanner.java | 26 ------- .../java/laddergame/view/InputValidator.java | 26 ------- .../laddergame/view/LadderGamePrinter.java | 1 - .../java/laddergame/InputScannerTest.java | 50 ------------- .../java/laddergame/InputValidatorTest.java | 32 --------- .../java/laddergame/LadderGameInputTest.java | 72 ------------------- .../laddergame/LadderGamePlayersTest.java | 33 --------- src/test/java/laddergame/LadderGameTest.java | 5 -- .../java/laddergame/LinesGeneratorTest.java | 54 -------------- .../java/laddergame/PointsGeneratorTest.java | 56 --------------- 17 files changed, 48 insertions(+), 547 deletions(-) delete mode 100644 src/main/java/laddergame/domain/LadderGameInput.java delete mode 100644 src/main/java/laddergame/domain/ladder/LinesGenerator.java delete mode 100644 src/main/java/laddergame/domain/ladder/PointsGenerator.java delete mode 100644 src/main/java/laddergame/view/InputScanner.java delete mode 100644 src/main/java/laddergame/view/InputValidator.java delete mode 100644 src/test/java/laddergame/InputScannerTest.java delete mode 100644 src/test/java/laddergame/InputValidatorTest.java delete mode 100644 src/test/java/laddergame/LadderGameInputTest.java delete mode 100644 src/test/java/laddergame/LadderGamePlayersTest.java delete mode 100644 src/test/java/laddergame/LadderGameTest.java delete mode 100644 src/test/java/laddergame/LinesGeneratorTest.java delete mode 100644 src/test/java/laddergame/PointsGeneratorTest.java diff --git a/src/main/java/laddergame/domain/LadderGameInput.java b/src/main/java/laddergame/domain/LadderGameInput.java deleted file mode 100644 index 8775fcd..0000000 --- a/src/main/java/laddergame/domain/LadderGameInput.java +++ /dev/null @@ -1,41 +0,0 @@ -package laddergame.domain; - -import laddergame.view.InputScanner; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class LadderGameInput { - - public static final String DELIMITER = ","; - - private static List playerNames = new ArrayList<>(); - private static int ladderHeight; - - public static List getPlayerNamesFromInputScanner(InputScanner playerNamesScanner) { - String playerNamesString = playerNamesScanner.getPlayerNamesFromUser(); - return covertStringToArrayList(playerNamesString); - } - - public static List covertStringToArrayList(String playerNamesString) { - String[] tokens = generateStringTokensByDelimiter(playerNamesString); - return playerNames = Arrays.asList(tokens); - } - - public static String[] generateStringTokensByDelimiter(String playerNamesString) { - return playerNamesString.split(DELIMITER); - } - - public static int getLadderHeightFromInputScanner(InputScanner ladderHeightScanner) { - return ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); - } - - public static List getPlayerNames() { - return playerNames; - } - - public static int getLadderHeight() { - return ladderHeight; - } -} diff --git a/src/main/java/laddergame/domain/ladder/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java index a285627..983414f 100644 --- a/src/main/java/laddergame/domain/ladder/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -20,7 +20,7 @@ public static Ladder with(final Players players, final LadderHeight ladderHeight int height = ladderHeight.getHeight(); for (int i = 0; i < height; i++) { - LadderLine line = LadderLine.with(width, i); + LadderLine line = LadderLine.with(width); lines.add(line); } diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index 0653856..f4899ae 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -1,39 +1,44 @@ package laddergame.domain.ladder; -import java.util.Objects; +import java.util.ArrayList; +import java.util.List; public class LadderLine { - private Point leftPoint; - private Point rightPoint; - public boolean exists = false; + private final List points; - public LadderLine(Point leftPoint, Point rightPoint) { - this.leftPoint = leftPoint; - this.rightPoint = rightPoint; + public LadderLine(final List points) { + this.points = points; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - LadderLine ladderLine = (LadderLine) o; - return exists == ladderLine.exists && - Objects.equals(leftPoint, ladderLine.leftPoint) && - Objects.equals(rightPoint, ladderLine.rightPoint); + public static LadderLine with(final int width) { + List points = new ArrayList<>(); + + for (int i = 0; i < width; i++) { + Point point = generatePoint(width); + points.add(point); + } + + return new LadderLine(points); + } + + private static Point generatePoint(int width) { + if(isFirstPoint()) { + return Point.generateFirstPoint(); + } + + if (isLastPoint(width)) { + return Point.generateLastPoint(); + } + + return Point.generatePoint(); } - @Override - public int hashCode() { - return Objects.hash(leftPoint, rightPoint, exists); + private static boolean isFirstPoint() { + return points == null; } - @Override - public String toString() { - return "laddergame.domain.ladder.Line{" + - "leftPoint=" + leftPoint + - ", rightPoint=" + rightPoint + - ", exists=" + exists + - '}'; + private static boolean isLastPoint(int width) { + return points.size() == width; } } diff --git a/src/main/java/laddergame/domain/ladder/LinesGenerator.java b/src/main/java/laddergame/domain/ladder/LinesGenerator.java deleted file mode 100644 index 9a99b65..0000000 --- a/src/main/java/laddergame/domain/ladder/LinesGenerator.java +++ /dev/null @@ -1,55 +0,0 @@ -package laddergame.domain.ladder; - -import laddergame.domain.LadderGameInput; - -import java.util.ArrayList; -import java.util.List; - -public class LinesGenerator { - - private static List points = new ArrayList<>(); - private static List ladderLines = new ArrayList<>(); - private static int numberOfLines; - private static int numberOfRows; - - - public static List generateLines() { - points = PointsGenerator.generatePoints(); - - setNumberOfRows(); - setNumberOfLines(); - - for (int rowIndex = 0; rowIndex < numberOfRows; rowIndex++) { - List row = generateRow(rowIndex); - ladderLines.addAll(row); - } - - return ladderLines; - } - - private static void setNumberOfRows() { - numberOfRows = LadderGameInput.getLadderHeight(); - } - - private static void setNumberOfLines() { - int playerCount = 0; //Players.getPlayerCount(); - int numberOfLinesPerRow = playerCount - 1; - numberOfLines = numberOfLinesPerRow * numberOfRows; - } - - private static List generateRow(int rowIndex) { - List row = new ArrayList<>(); - int numberOfLinesPerRow = numberOfLines / numberOfRows; - int pointIndex = rowIndex * (numberOfLinesPerRow + 1); - int lastIndexOfRow = pointIndex + numberOfLinesPerRow; - - while (pointIndex < lastIndexOfRow) { - LadderLine ladderLine = new LadderLine(points.get(pointIndex), points.get(pointIndex + 1)); - row.add(ladderLine); - pointIndex++; - } - - return row; - } - -} diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index a68cad5..783c85a 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -1,36 +1,28 @@ package laddergame.domain.ladder; -import java.util.Objects; +public enum Point { -public class Point { + LEFT(true, false), + RIGHT(false, true), + NONE(false, false); - private int x; - private int y; + private boolean leftConnection; + private boolean rightConnection; - public Point(int x, int y) { - this.x = x; - this.y = y; + Point(boolean leftConnection, boolean rightConnection) { + this.leftConnection = leftConnection; + this.rightConnection = rightConnection; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Point point = (Point) o; - return x == point.x && - y == point.y; + public static Point generateFirstPoint() { + } - @Override - public int hashCode() { - return Objects.hash(x, y); + public static Point generateLastPoint() { + } - @Override - public String toString() { - return "laddergame.domain.ladder.Point{" + - "x=" + x + - ", y=" + y + - '}'; + public static Point generatePoint() { + } } diff --git a/src/main/java/laddergame/domain/ladder/PointsGenerator.java b/src/main/java/laddergame/domain/ladder/PointsGenerator.java deleted file mode 100644 index b43c087..0000000 --- a/src/main/java/laddergame/domain/ladder/PointsGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -package laddergame.domain.ladder; - -import laddergame.domain.LadderGameInput; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class PointsGenerator { - - private static int numberOfX; - private static int numberOfY; - - public static List generatePoints() { - setNumberOfPoints(); - ArrayList xs = createXs(); - ArrayList ys = createYs(); - - return xs.stream() - .flatMap(x -> ys.stream().map(y -> new Point(x, y))) - .collect(Collectors.toList()); - } - - private static void setNumberOfPoints() { - numberOfX = LadderGameInput.getLadderHeight(); - numberOfY = 0; //Players.getPlayerCount(); - } - - public static ArrayList createXs() { - ArrayList xs = new ArrayList<>(); - for (int x = 0; x < numberOfX; x++) { - xs.add(x); - } - return xs; - } - - public static ArrayList createYs() { - ArrayList ys = new ArrayList<>(); - for (int y = 0; y < numberOfY; y++) { - ys.add(y); - } - return ys; - } - -} diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index 8b5fa12..c45101a 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -9,14 +9,14 @@ public class Players { private final List players; public Players(final List players) { - if (hasDuplicatedNamesIn(players)) { + if (hasDuplicatedNames(players)) { throw new IllegalArgumentException(); } this.players = players; } - private boolean hasDuplicatedNamesIn(final List players) { + private boolean hasDuplicatedNames(final List players) { Set nameSet = new HashSet<>(players); return players.size() != nameSet.size(); } diff --git a/src/main/java/laddergame/view/InputScanner.java b/src/main/java/laddergame/view/InputScanner.java deleted file mode 100644 index d239bbe..0000000 --- a/src/main/java/laddergame/view/InputScanner.java +++ /dev/null @@ -1,26 +0,0 @@ -package laddergame.view; - -import java.util.Scanner; - -public class InputScanner { - - private static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; - private static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; - private static final String EMPTY_LINE = ""; - - private Scanner scanner = new Scanner(System.in); - - public String getPlayerNamesFromUser() { - System.out.println(MESSAGE_GET_PLAYER_NAMES); - return scanner.nextLine(); - } - - public int getLadderHeightFromUser() { - System.out.println(MESSAGE_GET_LADDER_HEIGHT); - return Integer.parseInt(scanner.nextLine()); -} - - public static void printSeparationLine() { - System.out.println(EMPTY_LINE); - } -} diff --git a/src/main/java/laddergame/view/InputValidator.java b/src/main/java/laddergame/view/InputValidator.java deleted file mode 100644 index 5506272..0000000 --- a/src/main/java/laddergame/view/InputValidator.java +++ /dev/null @@ -1,26 +0,0 @@ -package laddergame.view; - -import java.util.List; - -public class InputValidator { - - private static final int PLAYER_NAME_MAX_LENGTH = 5; - private static final String ERROR_MESSAGE_NAME_LENGTH_EXCEEDED = "이름이 5자를 초과할 수 없습니다."; - - public static void validatePlayerNames(List playerNames) { - for (String playerName : playerNames) { - int playerNameLength = getPlayerNameLength(playerName); - validatePlayerNameLength(playerNameLength); - } - } - - public static int getPlayerNameLength(String playerName) { - return playerName.length(); - } - - public static void validatePlayerNameLength(int playerNameLength) { - if (playerNameLength > PLAYER_NAME_MAX_LENGTH) { - throw (new IllegalArgumentException(ERROR_MESSAGE_NAME_LENGTH_EXCEEDED)); - } - } -} diff --git a/src/main/java/laddergame/view/LadderGamePrinter.java b/src/main/java/laddergame/view/LadderGamePrinter.java index dd0839e..a69d2fb 100644 --- a/src/main/java/laddergame/view/LadderGamePrinter.java +++ b/src/main/java/laddergame/view/LadderGamePrinter.java @@ -1,7 +1,6 @@ package laddergame.view; import laddergame.domain.ladder.Ladder; -import laddergame.domain.LadderGameInput; import java.util.List; diff --git a/src/test/java/laddergame/InputScannerTest.java b/src/test/java/laddergame/InputScannerTest.java deleted file mode 100644 index a27830c..0000000 --- a/src/test/java/laddergame/InputScannerTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package laddergame; - -import laddergame.view.InputScanner; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import static org.assertj.core.api.Assertions.assertThat; - -public class InputScannerTest { - - @Test - public void testGetPlayerNames() { - // given - String inputString = "태식\r\n"; - setInputStream(inputString); - InputScanner playerNamesScanner = new InputScanner(); - - // when - String playerNames = playerNamesScanner.getPlayerNamesFromUser(); - - // then - assertThat(playerNames) - .isNotNull() - .isEqualTo("태식"); - } - - @Test - public void testGetLadderHeight() { - // given - String inputString = "2\r\n"; - setInputStream(inputString); - InputScanner ladderHeightScanner = new InputScanner(); - - // when - int ladderHeight = ladderHeightScanner.getLadderHeightFromUser(); - - // then - assertThat(ladderHeight) - .isNotNull() - .isEqualTo(2); - } - - public void setInputStream(String inputString) { - InputStream inputStream = new ByteArrayInputStream(inputString.getBytes()); - System.setIn(inputStream); - } - -} diff --git a/src/test/java/laddergame/InputValidatorTest.java b/src/test/java/laddergame/InputValidatorTest.java deleted file mode 100644 index cbeb122..0000000 --- a/src/test/java/laddergame/InputValidatorTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package laddergame; - -import laddergame.view.InputValidator; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.catchThrowable; - -class InputValidatorTest { - - private static final String DELIMITER = ","; - private static final String ERROR_MESSAGE_NAME_LENGTH_EXCEEDED = "이름이 5자를 초과할 수 없습니다."; - - @Test - public void testValidatePlayerNameIsSmallerThanCriterion() { - // given - String inputString = "태식,태식이,이름길이초과"; - List playerNames = Arrays.asList(inputString.split(DELIMITER)); - - // when - Throwable thrown = catchThrowable(() -> { InputValidator.validatePlayerNames(playerNames);}); - - // then - assertThat(thrown) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining(ERROR_MESSAGE_NAME_LENGTH_EXCEEDED); - } - -} \ No newline at end of file diff --git a/src/test/java/laddergame/LadderGameInputTest.java b/src/test/java/laddergame/LadderGameInputTest.java deleted file mode 100644 index 9a08f75..0000000 --- a/src/test/java/laddergame/LadderGameInputTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package laddergame; - -import laddergame.domain.LadderGameInput; -import laddergame.view.InputScanner; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LadderGameInputTest { - - private static final String DELIMITER = ","; - - @Test - public void testGetSingleNameFromInputScanner() { - // given - String inputString = "태식"; - setInputStream(inputString); - - List expectedPlayerName = Arrays.asList(inputString.split(DELIMITER)); - - // when - List playerName = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); - - // then - assertThat(playerName) - .isNotNull() - .isEqualTo(expectedPlayerName); - } - - @Test - public void testGetMultipleNamesFromInputScanner() { - // given - String inputString = "태식,태식이,태식삼"; - setInputStream(inputString); - - List expectedPlayerNames = Arrays.asList(inputString.split(DELIMITER)); - - // when - List playerNames = LadderGameInput.getPlayerNamesFromInputScanner(new InputScanner()); - - // then - assertThat(playerNames) - .isNotNull() - .isEqualTo(expectedPlayerNames); - } - - @Test - public void testGetLadderHeightFromInputScanner() { - // given - String inputString = "2"; - setInputStream(inputString); - - // when - int ladderHeight = LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - - // then - assertThat(ladderHeight) - .isNotNull() - .isEqualTo(2); - } - - public void setInputStream(String inputString) { - InputStream inputStream = new ByteArrayInputStream(inputString.getBytes()); - System.setIn(inputStream); - } - -} diff --git a/src/test/java/laddergame/LadderGamePlayersTest.java b/src/test/java/laddergame/LadderGamePlayersTest.java deleted file mode 100644 index 4236465..0000000 --- a/src/test/java/laddergame/LadderGamePlayersTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package laddergame; - -import laddergame.domain.player.Players; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LadderGamePlayersTest { - - private static final String DELIMITER = ","; - - @Test - public void testGetPlayerCount() { - // given - String inputString= "태식,태식이,태식삼"; - List playerNames = Arrays.asList(inputString.split(DELIMITER)); - - Players.calculatePlayerCount(playerNames); - - // when - int playerCount = Players.getPlayerCount(); - - // then - assertThat(playerCount) - .isNotNull() - .isEqualTo(3); - - } - -} diff --git a/src/test/java/laddergame/LadderGameTest.java b/src/test/java/laddergame/LadderGameTest.java deleted file mode 100644 index bf68a2a..0000000 --- a/src/test/java/laddergame/LadderGameTest.java +++ /dev/null @@ -1,5 +0,0 @@ -package laddergame; - -public class LadderGameTest { - -} diff --git a/src/test/java/laddergame/LinesGeneratorTest.java b/src/test/java/laddergame/LinesGeneratorTest.java deleted file mode 100644 index e88da25..0000000 --- a/src/test/java/laddergame/LinesGeneratorTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package laddergame; - -import laddergame.domain.*; -import laddergame.domain.ladder.LadderLine; -import laddergame.domain.ladder.LinesGenerator; -import laddergame.domain.ladder.Point; -import laddergame.domain.player.Players; -import laddergame.view.InputScanner; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -class LinesGeneratorTest { - - private static final String DELIMITER = ","; - - @BeforeAll - public static void setUp() { - String playerNamesString= "태식,태식이,태식삼"; - List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - Players.calculatePlayerCount(playerNames); - - String ladderHeightString = "2"; - InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); - System.setIn(inputStream); - LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - } - - @Test - public void testGenerateLines() { - // given - List expectedLadderLines = new ArrayList<>(); - expectedLadderLines.add(new LadderLine(new Point(0,0), new Point(0,1))); - expectedLadderLines.add(new LadderLine(new Point(0,1), new Point(0,2))); - expectedLadderLines.add(new LadderLine(new Point(1,0), new Point(1,1))); - expectedLadderLines.add(new LadderLine(new Point(1,1), new Point(1,2))); - - // when - List ladderLines = LinesGenerator.generateLines(); - - // then - assertThat(ladderLines) - .isNotNull() - .isEqualTo(expectedLadderLines); - } - -} \ No newline at end of file diff --git a/src/test/java/laddergame/PointsGeneratorTest.java b/src/test/java/laddergame/PointsGeneratorTest.java deleted file mode 100644 index 9c85219..0000000 --- a/src/test/java/laddergame/PointsGeneratorTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package laddergame; - -import laddergame.domain.LadderGameInput; -import laddergame.domain.player.Players; -import laddergame.domain.ladder.Point; -import laddergame.domain.ladder.PointsGenerator; -import laddergame.view.InputScanner; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -class PointsGeneratorTest { - - private static final String DELIMITER = ","; - - @BeforeAll - public static void setUp() { - String playerNamesString= "태식,태식이,태식삼"; - List playerNames = Arrays.asList(playerNamesString.split(DELIMITER)); - Players.calculatePlayerCount(playerNames); - - String ladderHeightString = "2"; - InputStream inputStream = new ByteArrayInputStream(ladderHeightString.getBytes()); - System.setIn(inputStream); - LadderGameInput.getLadderHeightFromInputScanner(new InputScanner()); - } - - @Test - public void testGeneratePoints() { - // given - List expectedPoints = new ArrayList<>(); - expectedPoints.add(new Point(0, 0)); - expectedPoints.add(new Point(0, 1)); - expectedPoints.add(new Point(0, 2)); - expectedPoints.add(new Point(1, 0)); - expectedPoints.add(new Point(1, 1)); - expectedPoints.add(new Point(1, 2)); - - // when - List points = PointsGenerator.generatePoints(); - - // then - assertThat(points) - .isNotNull() - .isEqualTo(expectedPoints); - - } - -} \ No newline at end of file From 12ba062e25fa064987d5a9146fff50ee638f951c Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Thu, 30 Jan 2020 15:28:07 +0900 Subject: [PATCH 14/31] =?UTF-8?q?feat:=20LadderCreationStrategy=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Maunal과 Random Strategy가 해당 인터페이스를 implement - Point가 생성될 때 Strategy의 isConnectable()에서 boolean값을 반환받음 --- .../controller/LadderGameController.java | 3 ++- src/main/java/laddergame/domain/ladder/Ladder.java | 5 +++-- .../java/laddergame/domain/ladder/LadderLine.java | 14 ++++++++------ src/main/java/laddergame/domain/ladder/Point.java | 8 +++++--- .../ladder/Strategy/LadderCreationStrategy.java | 6 ++++++ .../Strategy/ManualLadderCreationStrategy.java | 9 +++++++++ .../Strategy/RandomLadderCreationStrategy.java | 11 +++++++++++ .../java/laddergame/service/LadderGameService.java | 5 +++-- 8 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java create mode 100644 src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java create mode 100644 src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index d1386d6..c3c73b5 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -1,6 +1,7 @@ package laddergame.controller; import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladder.Strategy.RandomLadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; import laddergame.service.LadderGameService; @@ -22,7 +23,7 @@ public void run() { int ladderHeightInput = inputView.getLadderHeightFromConsole(); LadderHeight ladderHeight = ladderGameService.createLadderHeight(ladderHeightInput); - Ladder ladder = ladderGameService.createLadder(players, ladderHeight); + Ladder ladder = ladderGameService.createLadder(players, ladderHeight, new RandomLadderCreationStrategy()); } } diff --git a/src/main/java/laddergame/domain/ladder/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java index 983414f..57bc534 100644 --- a/src/main/java/laddergame/domain/ladder/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -1,5 +1,6 @@ package laddergame.domain.ladder; +import laddergame.domain.ladder.Strategy.LadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; @@ -14,13 +15,13 @@ private Ladder(final List lines) { this.lines = lines; } - public static Ladder with(final Players players, final LadderHeight ladderHeight) { + public static Ladder with(final Players players, final LadderHeight ladderHeight, LadderCreationStrategy strategy) { List lines = new ArrayList<>(); int width = players.size(); int height = ladderHeight.getHeight(); for (int i = 0; i < height; i++) { - LadderLine line = LadderLine.with(width); + LadderLine line = LadderLine.with(width, strategy); lines.add(line); } diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index f4899ae..72da6e7 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -1,5 +1,7 @@ package laddergame.domain.ladder; +import laddergame.domain.ladder.Strategy.LadderCreationStrategy; + import java.util.ArrayList; import java.util.List; @@ -11,27 +13,27 @@ public LadderLine(final List points) { this.points = points; } - public static LadderLine with(final int width) { + public static LadderLine with(final int width, LadderCreationStrategy strategy) { List points = new ArrayList<>(); for (int i = 0; i < width; i++) { - Point point = generatePoint(width); + Point point = generatePoint(width, strategy); points.add(point); } return new LadderLine(points); } - private static Point generatePoint(int width) { + private static Point generatePoint(int width, LadderCreationStrategy strategy) { if(isFirstPoint()) { - return Point.generateFirstPoint(); + return Point.generateFirstPoint(strategy); } if (isLastPoint(width)) { - return Point.generateLastPoint(); + return Point.generateLastPoint(strategy); } - return Point.generatePoint(); + return Point.generatePoint(strategy); } private static boolean isFirstPoint() { diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index 783c85a..424d7bb 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -1,5 +1,7 @@ package laddergame.domain.ladder; +import laddergame.domain.ladder.Strategy.LadderCreationStrategy; + public enum Point { LEFT(true, false), @@ -14,15 +16,15 @@ public enum Point { this.rightConnection = rightConnection; } - public static Point generateFirstPoint() { + public static Point generateFirstPoint(LadderCreationStrategy strategy) { } - public static Point generateLastPoint() { + public static Point generateLastPoint(LadderCreationStrategy strategy) { } - public static Point generatePoint() { + public static Point generatePoint(LadderCreationStrategy strategy) { } } diff --git a/src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java new file mode 100644 index 0000000..21f8da2 --- /dev/null +++ b/src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java @@ -0,0 +1,6 @@ +package laddergame.domain.ladder.Strategy; + +public interface LadderCreationStrategy { + + boolean isConnectable(); +} diff --git a/src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java new file mode 100644 index 0000000..2f28c7e --- /dev/null +++ b/src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java @@ -0,0 +1,9 @@ +package laddergame.domain.ladder.Strategy; + +public class ManualLadderCreationStrategy implements LadderCreationStrategy { + + @Override + public boolean isConnectable() { + return true; + } +} diff --git a/src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java new file mode 100644 index 0000000..880569c --- /dev/null +++ b/src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java @@ -0,0 +1,11 @@ +package laddergame.domain.ladder.Strategy; + +import java.util.Random; + +public class RandomLadderCreationStrategy implements LadderCreationStrategy{ + + @Override + public boolean isConnectable() { + return new Random().nextBoolean(); + } +} diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index 9e1a360..5736bd0 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -1,6 +1,7 @@ package laddergame.service; import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladder.Strategy.LadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Player; import laddergame.domain.player.Players; @@ -34,7 +35,7 @@ public LadderHeight createLadderHeight(int ladderHeightInput) { return new LadderHeight(ladderHeightInput); } - public Ladder createLadder(Players players, LadderHeight ladderHeight) { - return Ladder.with(players, ladderHeight); + public Ladder createLadder(Players players, LadderHeight ladderHeight, LadderCreationStrategy strategy) { + return Ladder.with(players, ladderHeight, strategy); } } From a092efe279b2c02baa62db641a688fbbf8f11d19 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Thu, 30 Jan 2020 16:59:14 +0900 Subject: [PATCH 15/31] =?UTF-8?q?feat:=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderLine과 Point 객체 수정 - Point 객체에서 현재 Point의 connection에 따라 다음 Point가 가질 수 있는 connection을 지정 --- .../laddergame/domain/ladder/LadderLine.java | 21 +++++++++++-------- .../java/laddergame/domain/ladder/Point.java | 15 +++++++++++-- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index 72da6e7..766d616 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -15,32 +15,35 @@ public LadderLine(final List points) { public static LadderLine with(final int width, LadderCreationStrategy strategy) { List points = new ArrayList<>(); + Point previousPoint = null; for (int i = 0; i < width; i++) { - Point point = generatePoint(width, strategy); + int remain = width - i; + Point point = generatePoint(previousPoint, remain, strategy); points.add(point); + previousPoint = point; } return new LadderLine(points); } - private static Point generatePoint(int width, LadderCreationStrategy strategy) { - if(isFirstPoint()) { + private static Point generatePoint(Point point, int remain, LadderCreationStrategy strategy) { + if (isFirstPoint(point)) { return Point.generateFirstPoint(strategy); } - if (isLastPoint(width)) { + if (isLastPoint(remain)) { return Point.generateLastPoint(strategy); } - return Point.generatePoint(strategy); + return point.decideNextPoint(strategy); } - private static boolean isFirstPoint() { - return points == null; + private static boolean isFirstPoint(Point point) { + return point == null; } - private static boolean isLastPoint(int width) { - return points.size() == width; + private static boolean isLastPoint(int remain) { + return remain == 1; } } diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index 424d7bb..d957423 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -17,14 +17,25 @@ public enum Point { } public static Point generateFirstPoint(LadderCreationStrategy strategy) { - + return generatePoint(false, strategy.isConnectable()); } public static Point generateLastPoint(LadderCreationStrategy strategy) { + return generatePoint(strategy.isConnectable(), false); + } + public Point decideNextPoint(LadderCreationStrategy strategy) { + if (rightConnection) { + return generatePoint(true, false ); + } + return generatePoint(false, strategy.isConnectable()); } - public static Point generatePoint(LadderCreationStrategy strategy) { + private static Point generatePoint(boolean leftConnection, boolean rightConnection) { + if (leftConnection && !rightConnection) { return LEFT; } + + if (!leftConnection && rightConnection) { return RIGHT; } + return NONE; } } From c975af2d1bca19bdfb16ce268b97a42914e97feb Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Thu, 30 Jan 2020 21:35:28 +0900 Subject: [PATCH 16/31] =?UTF-8?q?test:=20PointTest=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/laddergame/domain/ladder/Point.java | 12 +++++- .../laddergame/view/LadderGamePrinter.java | 29 ------------- .../laddergame/domain/ladder/PointTest.java | 43 +++++++++++++++++++ 3 files changed, 53 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/laddergame/view/LadderGamePrinter.java create mode 100644 src/test/java/laddergame/domain/ladder/PointTest.java diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index d957423..fe2140d 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -32,9 +32,17 @@ public Point decideNextPoint(LadderCreationStrategy strategy) { } private static Point generatePoint(boolean leftConnection, boolean rightConnection) { - if (leftConnection && !rightConnection) { return LEFT; } + if (leftConnection && rightConnection) { + throw new IllegalArgumentException(); + } + + if (leftConnection) { + return LEFT; + } - if (!leftConnection && rightConnection) { return RIGHT; } + if (rightConnection) { + return RIGHT; + } return NONE; } diff --git a/src/main/java/laddergame/view/LadderGamePrinter.java b/src/main/java/laddergame/view/LadderGamePrinter.java deleted file mode 100644 index a69d2fb..0000000 --- a/src/main/java/laddergame/view/LadderGamePrinter.java +++ /dev/null @@ -1,29 +0,0 @@ -package laddergame.view; - -import laddergame.domain.ladder.Ladder; - -import java.util.List; - -public class LadderGamePrinter { - private static Ladder ladder; - - public static void printLadderGame(Ladder ladder) { - LadderGamePrinter.ladder = ladder; - printPlayerName(); - printRow(); - } - - private static void printPlayerName() { - List playerNames = LadderGameInput.getPlayerNames(); - System.out.println(playerNames); - } - - private static void printRow() { - - } - - private static void generateRow(int rowIndex) { - - } - -} diff --git a/src/test/java/laddergame/domain/ladder/PointTest.java b/src/test/java/laddergame/domain/ladder/PointTest.java new file mode 100644 index 0000000..b8c7e93 --- /dev/null +++ b/src/test/java/laddergame/domain/ladder/PointTest.java @@ -0,0 +1,43 @@ +package laddergame.domain.ladder; + +import laddergame.domain.ladder.Strategy.ManualLadderCreationStrategy; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class PointTest { + + @Test + void 첫번째_포인트의_leftConnection은_false() { + //given + Point firstPoint = Point.generateFirstPoint(new ManualLadderCreationStrategy()); + Point expected = Point.RIGHT; + + //then + assertThat(firstPoint).isEqualTo(expected); + } + + @Test + void 마지막_포인트의_rightConnection은_false() { + //given + Point LastPoint = Point.generateLastPoint(new ManualLadderCreationStrategy()); + Point expected = Point.LEFT; + + //then + assertThat(LastPoint).isEqualTo(expected); + } + + @Test + void 다음_포인트의_connection이_잘_결정되는지_테스트() { + //given + Point nextOfLeft = Point.LEFT.decideNextPoint(new ManualLadderCreationStrategy()); + Point nextOfRight = Point.RIGHT.decideNextPoint(new ManualLadderCreationStrategy()); + Point nextOfNone = Point.NONE.decideNextPoint(new ManualLadderCreationStrategy()); + + //then + assertThat(nextOfLeft).isEqualTo(Point.RIGHT); + assertThat(nextOfRight).isEqualTo(Point.LEFT); + assertThat(nextOfNone).isEqualTo(Point.RIGHT); + } +} \ No newline at end of file From a538a99cb0bbab283f65cfd2cc443a98cd680772 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Thu, 30 Jan 2020 22:20:18 +0900 Subject: [PATCH 17/31] =?UTF-8?q?test:=20LadderLineTest=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 테스트 통과를 위해 Point의 generateLastPoint 메서드의 버그 수정 - 이어서 PointTest도 수정 --- .../laddergame/domain/ladder/LadderLine.java | 27 ++++++++++- .../java/laddergame/domain/ladder/Point.java | 15 +++++- .../domain/ladder/LadderLineTest.java | 46 +++++++++++++++++++ .../laddergame/domain/ladder/PointTest.java | 8 ++-- 4 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 src/test/java/laddergame/domain/ladder/LadderLineTest.java diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index 766d616..d7e3dfa 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class LadderLine { @@ -33,7 +34,7 @@ private static Point generatePoint(Point point, int remain, LadderCreationStrate } if (isLastPoint(remain)) { - return Point.generateLastPoint(strategy); + return Point.generateLastPoint(point); } return point.decideNextPoint(strategy); @@ -46,4 +47,28 @@ private static boolean isFirstPoint(Point point) { private static boolean isLastPoint(int remain) { return remain == 1; } + + public int size() { + return points.size(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LadderLine that = (LadderLine) o; + return Objects.equals(points, that.points); + } + + @Override + public int hashCode() { + return Objects.hash(points); + } + + @Override + public String toString() { + return "LadderLine{" + + "points=" + points + + '}'; + } } diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index fe2140d..c117457 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -20,8 +20,11 @@ public static Point generateFirstPoint(LadderCreationStrategy strategy) { return generatePoint(false, strategy.isConnectable()); } - public static Point generateLastPoint(LadderCreationStrategy strategy) { - return generatePoint(strategy.isConnectable(), false); + public static Point generateLastPoint(Point point) { + if (point.hasRightConnection()) { + return generatePoint(true, false); + } + return generatePoint(false, false); } public Point decideNextPoint(LadderCreationStrategy strategy) { @@ -46,4 +49,12 @@ private static Point generatePoint(boolean leftConnection, boolean rightConnecti return NONE; } + + private boolean hasRightConnection() { + return rightConnection; + } + + private boolean hasLeftConnection() { + return leftConnection; + } } diff --git a/src/test/java/laddergame/domain/ladder/LadderLineTest.java b/src/test/java/laddergame/domain/ladder/LadderLineTest.java new file mode 100644 index 0000000..1e59f81 --- /dev/null +++ b/src/test/java/laddergame/domain/ladder/LadderLineTest.java @@ -0,0 +1,46 @@ +package laddergame.domain.ladder; + +import laddergame.domain.ladder.Strategy.ManualLadderCreationStrategy; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class LadderLineTest { + + private LadderLine ladderLine; + + @BeforeEach + void setUp() { + List points = new ArrayList<>(); + points.add(Point.RIGHT); + points.add(Point.LEFT); + points.add(Point.RIGHT); + points.add(Point.LEFT); + points.add(Point.NONE); + + ladderLine = new LadderLine(points); + } + + @Test + void with() { + //given + LadderLine actualLadderLine = LadderLine.with(5, new ManualLadderCreationStrategy()); + + //then + assertThat(actualLadderLine).isEqualTo(ladderLine); + } + + @Test + void size() { + // given + LadderLine actualLadderLine = LadderLine.with(5, new ManualLadderCreationStrategy()); + + // then + assertThat(actualLadderLine.size()).isEqualTo(ladderLine.size()); + } +} \ No newline at end of file diff --git a/src/test/java/laddergame/domain/ladder/PointTest.java b/src/test/java/laddergame/domain/ladder/PointTest.java index b8c7e93..2965b29 100644 --- a/src/test/java/laddergame/domain/ladder/PointTest.java +++ b/src/test/java/laddergame/domain/ladder/PointTest.java @@ -9,7 +9,7 @@ class PointTest { @Test - void 첫번째_포인트의_leftConnection은_false() { + void generateFirstPoint() { //given Point firstPoint = Point.generateFirstPoint(new ManualLadderCreationStrategy()); Point expected = Point.RIGHT; @@ -19,9 +19,9 @@ class PointTest { } @Test - void 마지막_포인트의_rightConnection은_false() { + void generateLastPoint() { //given - Point LastPoint = Point.generateLastPoint(new ManualLadderCreationStrategy()); + Point LastPoint = Point.generateLastPoint(Point.RIGHT); Point expected = Point.LEFT; //then @@ -29,7 +29,7 @@ class PointTest { } @Test - void 다음_포인트의_connection이_잘_결정되는지_테스트() { + void decideNextPoint() { //given Point nextOfLeft = Point.LEFT.decideNextPoint(new ManualLadderCreationStrategy()); Point nextOfRight = Point.RIGHT.decideNextPoint(new ManualLadderCreationStrategy()); From dc460cafa6b576853255e5ccc472c18cc21f057a Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 14:47:46 +0900 Subject: [PATCH 18/31] =?UTF-8?q?doc:=20=EA=B8=B0=EB=8A=A5=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EB=AA=A9=EB=A1=9D=EC=97=90=20'=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=B4=20=EA=B3=B5=EB=B0=B1=EC=9D=BC=20=EC=88=98=20=EC=97=86?= =?UTF-8?q?=EC=9D=8C'=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - '참여자 이름 입력'에 '이름이 공백일 수 없음' 추가 --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1fe9b8f..32e5573 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,21 @@ # 사다리 게임 ## 기능 구현 목록 ### 참여자 이름 입력 -- 여러 사람의 이름은 쉼표(,)를 기준으로 구분 -- 참여자의 이름은 최대 5글자 -- 앞 뒤 공백을 제거 -- 중복된 이름이 있는 경우 예외 처리 +- [x] 여러 사람의 이름은 쉼표(,)를 기준으로 구분 +- [x] 참여자의 이름은 최대 5글자 +- [x] 앞 뒤 공백을 제거 +- [x] 중복된 이름이 있는 경우 예외 처리 +- [ ] 이름이 공백일 수 없음 ### 사다리 높이 입력 -- 사다리 높이는 1 이상이여야함 +- [x] 사다리 높이는 1 이상이여야함 ### 사다리 생성 -- 사다리의 라인이 겹치지 않도록 사다리를 생성 +- [x] 사다리의 라인이 겹치지 않도록 사다리를 생성 e.g. |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할 지 결정할 수 없다. ### 실행결과 출력 -- 사다리 위에 사람 이름을 출력 -- 사람 이름을 5자 기준으로 출력 -- 사다리 폭 또한 사람 이름을 기준으로 함 +- [ ] 사다리 위에 사람 이름을 출력 +- [ ] 사람 이름을 5자 기준으로 출력 +- [ ] 사다리 폭 또한 사람 이름을 기준으로 함 From 37a54e6f7fc7b8541a327f11dc70963b1405809c Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 14:54:49 +0900 Subject: [PATCH 19/31] =?UTF-8?q?feat:=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EC=97=90=20getter=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OutputView에서 사용하기 위함 --- src/main/java/laddergame/domain/ladder/Ladder.java | 4 ++++ src/main/java/laddergame/domain/ladder/LadderLine.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/laddergame/domain/ladder/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java index 57bc534..4074869 100644 --- a/src/main/java/laddergame/domain/ladder/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -27,4 +27,8 @@ public static Ladder with(final Players players, final LadderHeight ladderHeight return new Ladder(lines); } + + public List getLines() { + return lines; + } } diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index d7e3dfa..8fead8f 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -52,6 +52,10 @@ public int size() { return points.size(); } + public List getPoints() { + return points; + } + @Override public boolean equals(Object o) { if (this == o) return true; From 895ccedc6174f4baf3d266d568ee57b689692bf7 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 14:56:46 +0900 Subject: [PATCH 20/31] =?UTF-8?q?refactor:=20Player=EC=99=80=20Point?= =?UTF-8?q?=EC=9D=98=20=EC=9D=BC=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OutputView에서의 사용을 위해 일부 접근자 수정 --- src/main/java/laddergame/domain/ladder/Point.java | 6 +----- src/main/java/laddergame/domain/player/Player.java | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index c117457..61f864b 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -50,11 +50,7 @@ private static Point generatePoint(boolean leftConnection, boolean rightConnecti return NONE; } - private boolean hasRightConnection() { + public boolean hasRightConnection() { return rightConnection; } - - private boolean hasLeftConnection() { - return leftConnection; - } } diff --git a/src/main/java/laddergame/domain/player/Player.java b/src/main/java/laddergame/domain/player/Player.java index 8d42fe7..38078ae 100644 --- a/src/main/java/laddergame/domain/player/Player.java +++ b/src/main/java/laddergame/domain/player/Player.java @@ -4,7 +4,7 @@ public class Player { - private static final int PLAYER_NAME_MAX_LENGTH = 5; + public static final int PLAYER_NAME_MAX_LENGTH = 5; private final String name; From 737fd27015700dcbfa675b4f7653e234dab737ef Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 14:58:02 +0900 Subject: [PATCH 21/31] =?UTF-8?q?fix:=20LadderHeight=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=9E=90=EC=9D=98=20=EA=B8=B8=EC=9D=B4?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EC=97=90=EB=9F=AC=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/laddergame/domain/ladderheight/LadderHeight.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/laddergame/domain/ladderheight/LadderHeight.java b/src/main/java/laddergame/domain/ladderheight/LadderHeight.java index 4e1c38d..7694952 100644 --- a/src/main/java/laddergame/domain/ladderheight/LadderHeight.java +++ b/src/main/java/laddergame/domain/ladderheight/LadderHeight.java @@ -7,7 +7,7 @@ public class LadderHeight { private final int height; public LadderHeight(int height) { - if (isLongerThanMinLength(height)) { + if (!isLongerThanMinLength(height)) { throw new IllegalArgumentException(); } From 05a7d11064ace0344b1d9625b7812338da8b4054 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 14:59:39 +0900 Subject: [PATCH 22/31] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EB=8B=A4=EB=A6=AC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OutputView 객체 추가 - LadderGame과 LadderGameController에서 OutputView를 사용하도록 수정 - Players에 OutputView에 사용할 stream 메서드 추가 --- src/main/java/laddergame/LadderGame.java | 3 +- .../controller/LadderGameController.java | 6 +- .../laddergame/domain/player/Players.java | 5 ++ src/main/java/laddergame/view/OutputView.java | 81 +++++++++++++++++++ 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/main/java/laddergame/view/OutputView.java diff --git a/src/main/java/laddergame/LadderGame.java b/src/main/java/laddergame/LadderGame.java index 115b654..cb87853 100644 --- a/src/main/java/laddergame/LadderGame.java +++ b/src/main/java/laddergame/LadderGame.java @@ -2,11 +2,12 @@ import laddergame.controller.LadderGameController; import laddergame.view.InputView; +import laddergame.view.OutputView; public class LadderGame { public static void main(String[] args) { - LadderGameController ladderGameController = new LadderGameController(new InputView()); + LadderGameController ladderGameController = new LadderGameController(new InputView(), new OutputView()); ladderGameController.run(); } } diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index c3c73b5..e7aefc7 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -6,14 +6,17 @@ import laddergame.domain.player.Players; import laddergame.service.LadderGameService; import laddergame.view.InputView; +import laddergame.view.OutputView; public class LadderGameController { private final InputView inputView; + private final OutputView outputView; private final LadderGameService ladderGameService = new LadderGameService(); - public LadderGameController(InputView inputView) { + public LadderGameController(InputView inputView, OutputView outputView) { this.inputView = inputView; + this.outputView = outputView; } public void run() { @@ -25,5 +28,6 @@ public void run() { Ladder ladder = ladderGameService.createLadder(players, ladderHeight, new RandomLadderCreationStrategy()); + outputView.printResult(players, ladder); } } diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index c45101a..e185a53 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -3,6 +3,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Stream; public class Players { @@ -24,4 +25,8 @@ private boolean hasDuplicatedNames(final List players) { public int size() { return players.size(); } + + public Stream stream() { + return players.stream(); + } } diff --git a/src/main/java/laddergame/view/OutputView.java b/src/main/java/laddergame/view/OutputView.java new file mode 100644 index 0000000..38b0686 --- /dev/null +++ b/src/main/java/laddergame/view/OutputView.java @@ -0,0 +1,81 @@ +package laddergame.view; + +import laddergame.domain.player.Player; +import org.apache.commons.lang3.StringUtils; +import laddergame.domain.ladder.Ladder; +import laddergame.domain.ladder.LadderLine; +import laddergame.domain.ladder.Point; +import laddergame.domain.player.Players; + +import java.util.ArrayList; +import java.util.List; + +public class OutputView { + + private static String MESSAGE_GAME_RESULT = "실행결과"; + + public void printResult(Players players, Ladder ladder) { + System.out.println(); + System.out.println(MESSAGE_GAME_RESULT); + System.out.println(); + + printPlayerNames(players); + printLadder(ladder); + } + + private void printPlayerNames(Players players) { + String playerNames = getAlignedPlayerNames(players); + + System.out.println(playerNames); + } + + private String getAlignedPlayerNames(Players players) { + List playerNames = new ArrayList<>(); + players.stream().forEach(player -> playerNames.add(player.getName())); + + String alignedPlayerNames =""; + for (String playerName : playerNames) { + String alignedPlayerName = getAlignedPlayerName(playerName); + alignedPlayerNames += alignedPlayerName; + } + + return alignedPlayerNames; + } + + private String getAlignedPlayerName(String playerName) { + return StringUtils.leftPad(playerName, Player.PLAYER_NAME_MAX_LENGTH + 1); + } + + private void printLadder(Ladder ladder) { + List lines = ladder.getLines(); + + for (LadderLine line : lines) { + printLadderLine(line); + } + } + + private void printLadderLine(LadderLine line) { + String lineString = lineToString(line); + + System.out.println(lineString); + } + + private String lineToString(LadderLine line) { + List points = line.getPoints(); + String result = " "; + + for (Point point : points) { + String connectionString = connectionToString(point); + result += ("|" + connectionString); + } + + return result; + } + + private String connectionToString(Point point) { + if (point.hasRightConnection()) { + return "-----"; + } + return " "; + } +} From ca27caef0fb4c6758ec12cbc1d56334bbbcff1b8 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 15:05:27 +0900 Subject: [PATCH 23/31] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EB=8B=A4=EB=A6=AC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - build.gradle에 StringUtils 디펜던시 추가 --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 12ee531..726ae4b 100644 --- a/build.gradle +++ b/build.gradle @@ -15,4 +15,5 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1' testCompile "org.assertj:assertj-core:3.14.0" + compile 'org.apache.commons:commons-lang3:3.9' } From a4364770e511a5b0340531e755ee5f64ab43fb75 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 16:03:57 +0900 Subject: [PATCH 24/31] =?UTF-8?q?refactor=20:=20OutputView=EC=9D=98=20?= =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20Pla?= =?UTF-8?q?yers=EB=A1=9C=20=EC=9D=B4=EC=A3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Outputview의 printResult 메서드 내의 추상화 수준을 맞추기 위해 printResultMessage 메서드로 코드를 분리 - Player의 이름을 출력을 위해 align하는 로직을 Players로 추출 - 추출한 메서드인 getAlignedPlayerNames 내의 로직을 정리하여 3개의 메서드로 쪼갬 --- README.md | 6 +-- .../laddergame/domain/player/Players.java | 44 +++++++++++++++++-- src/main/java/laddergame/view/OutputView.java | 33 ++++---------- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 32e5573..8577e29 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,6 @@ e.g. |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 지 결정할 수 없다. ### 실행결과 출력 -- [ ] 사다리 위에 사람 이름을 출력 -- [ ] 사람 이름을 5자 기준으로 출력 -- [ ] 사다리 폭 또한 사람 이름을 기준으로 함 +- [x] 사다리 위에 사람 이름을 출력 +- [x] 사람 이름을 5자 기준으로 출력 +- [x] 사다리 폭 또한 사람 이름을 기준으로 함 diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index e185a53..5bd3e4e 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -1,13 +1,15 @@ package laddergame.domain.player; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Stream; public class Players { - private final List players; + private List players; public Players(final List players) { if (hasDuplicatedNames(players)) { @@ -26,7 +28,41 @@ public int size() { return players.size(); } - public Stream stream() { - return players.stream(); + public String getAlignedPlayerNames() { + List playerNames = playerNamesToList(); + + List alignedPlayerNames = alignPlayerNames(playerNames); + + return playerNamesToString(alignedPlayerNames); + } + + private List playerNamesToList() { + List playerNames = new ArrayList<>(); + + players.forEach(player -> playerNames.add(player.getName())); + return playerNames; + } + + private List alignPlayerNames(List playerNames) { + List alignedPlayerNames = new ArrayList<>(); + + for (String playerName : playerNames) { + String alignedPlayerName = alignPlayerName(playerName); + alignedPlayerNames.add(alignedPlayerName); + } + return alignedPlayerNames; + } + + private String alignPlayerName(String playerName) { + return StringUtils.leftPad(playerName, Player.PLAYER_NAME_MAX_LENGTH + 1); + } + + private String playerNamesToString(List playerNames) { + String alignedPlayerNames =""; + + for (String playerName : playerNames) { + alignedPlayerNames += playerName; + } + return alignedPlayerNames; } } diff --git a/src/main/java/laddergame/view/OutputView.java b/src/main/java/laddergame/view/OutputView.java index 38b0686..3dca912 100644 --- a/src/main/java/laddergame/view/OutputView.java +++ b/src/main/java/laddergame/view/OutputView.java @@ -1,13 +1,10 @@ package laddergame.view; -import laddergame.domain.player.Player; -import org.apache.commons.lang3.StringUtils; import laddergame.domain.ladder.Ladder; import laddergame.domain.ladder.LadderLine; import laddergame.domain.ladder.Point; import laddergame.domain.player.Players; -import java.util.ArrayList; import java.util.List; public class OutputView { @@ -15,35 +12,23 @@ public class OutputView { private static String MESSAGE_GAME_RESULT = "실행결과"; public void printResult(Players players, Ladder ladder) { - System.out.println(); - System.out.println(MESSAGE_GAME_RESULT); - System.out.println(); + printResultMessage(); printPlayerNames(players); + printLadder(ladder); } - private void printPlayerNames(Players players) { - String playerNames = getAlignedPlayerNames(players); - - System.out.println(playerNames); + private void printResultMessage() { + System.out.println(); + System.out.println(MESSAGE_GAME_RESULT); + System.out.println(); } - private String getAlignedPlayerNames(Players players) { - List playerNames = new ArrayList<>(); - players.stream().forEach(player -> playerNames.add(player.getName())); - - String alignedPlayerNames =""; - for (String playerName : playerNames) { - String alignedPlayerName = getAlignedPlayerName(playerName); - alignedPlayerNames += alignedPlayerName; - } - - return alignedPlayerNames; - } + private void printPlayerNames(Players players) { + String playerNames = players.getAlignedPlayerNames(); - private String getAlignedPlayerName(String playerName) { - return StringUtils.leftPad(playerName, Player.PLAYER_NAME_MAX_LENGTH + 1); + System.out.println(playerNames); } private void printLadder(Ladder ladder) { From 51c66b01275402af54a70269a006427357de8333 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 16:20:06 +0900 Subject: [PATCH 25/31] =?UTF-8?q?refactor:=20OutputView=EC=9D=98=20?= =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20Lad?= =?UTF-8?q?derLine=EA=B3=BC=20Point=EB=A1=9C=20=EC=9D=B4=EC=A3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LineToString과 LineToConnection을 각각 LadderLine과 Point로 이동시킴 - 사다리를 표현하는 String들을 LadderLine의 static 변수로 추출 --- .../laddergame/domain/ladder/LadderLine.java | 15 ++++++++++++ .../java/laddergame/domain/ladder/Point.java | 7 ++++++ src/main/java/laddergame/view/OutputView.java | 24 ++----------------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index 8fead8f..33c615d 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -8,6 +8,10 @@ public class LadderLine { + public static final String POINT= "|"; + public static final String CONNECTION= "-----"; + public static final String NON_CONNECTION= " "; + private final List points; public LadderLine(final List points) { @@ -52,6 +56,17 @@ public int size() { return points.size(); } + public String lineToString() { + List points = getPoints(); + + String result = " "; + for (Point point : points) { + String connectionString = point.connectionToString(); + result += (POINT + connectionString); + } + return result; + } + public List getPoints() { return points; } diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index 61f864b..b0edce8 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -53,4 +53,11 @@ private static Point generatePoint(boolean leftConnection, boolean rightConnecti public boolean hasRightConnection() { return rightConnection; } + + public String connectionToString() { + if (hasRightConnection()) { + return LadderLine.CONNECTION; + } + return LadderLine.NON_CONNECTION; + } } diff --git a/src/main/java/laddergame/view/OutputView.java b/src/main/java/laddergame/view/OutputView.java index 3dca912..26d407c 100644 --- a/src/main/java/laddergame/view/OutputView.java +++ b/src/main/java/laddergame/view/OutputView.java @@ -2,14 +2,13 @@ import laddergame.domain.ladder.Ladder; import laddergame.domain.ladder.LadderLine; -import laddergame.domain.ladder.Point; import laddergame.domain.player.Players; import java.util.List; public class OutputView { - private static String MESSAGE_GAME_RESULT = "실행결과"; + private static final String MESSAGE_GAME_RESULT = "실행결과"; public void printResult(Players players, Ladder ladder) { printResultMessage(); @@ -40,27 +39,8 @@ private void printLadder(Ladder ladder) { } private void printLadderLine(LadderLine line) { - String lineString = lineToString(line); + String lineString = line.lineToString(); System.out.println(lineString); } - - private String lineToString(LadderLine line) { - List points = line.getPoints(); - String result = " "; - - for (Point point : points) { - String connectionString = connectionToString(point); - result += ("|" + connectionString); - } - - return result; - } - - private String connectionToString(Point point) { - if (point.hasRightConnection()) { - return "-----"; - } - return " "; - } } From fa9783b55b4fdec85bbdd67b673b2245abb6a457 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 16:49:17 +0900 Subject: [PATCH 26/31] =?UTF-8?q?doc:=20=EA=B8=B0=EB=8A=A5=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EB=AA=A9=EB=A1=9D=EC=97=90=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=A0=20=EA=B8=B0=EB=8A=A5=EB=93=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사다리게임 결과의 입출력 기능들을 목록에 추가 --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8577e29..571b594 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,12 @@ - [x] 중복된 이름이 있는 경우 예외 처리 - [ ] 이름이 공백일 수 없음 +### 실행결과 입력 +- [ ] 여러 결과는 쉼표(,)를 기준으로 구분 +- [ ] 결과는 최대 5글자 +- [ ] 앞 뒤 공백을 제거 +- [ ] 결과가 공백일 수 없음 + ### 사다리 높이 입력 - [x] 사다리 높이는 1 이상이여야함 @@ -15,7 +21,13 @@ e.g. |-----|-----|  모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할 지 결정할 수 없다. -### 실행결과 출력 +### 사다리 출력 - [x] 사다리 위에 사람 이름을 출력 - [x] 사람 이름을 5자 기준으로 출력 - [x] 사다리 폭 또한 사람 이름을 기준으로 함 +- [ ] 사다리 아래에 결과를 출력 +- [ ] 결과를 5자 기준으로 출력 + +### 사다리게임 결과 출력 +- [ ] 'all'을 입력시 전체참여자의 실행결과를 출력 +- [ ] 개인의 이름을 입력시 해당하는 참여자의 실행결과를 출력 \ No newline at end of file From e34411d04a318ee02d68995b894da0c822536c4d Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 17:07:28 +0900 Subject: [PATCH 27/31] =?UTF-8?q?feat:=20InputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=98=A4=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InputView에 getGameResultFromConsole 메서드 추가 - controller에서 InputView가 받아온 문자열을 result 변수에 저장 --- .../java/laddergame/controller/LadderGameController.java | 5 +++++ src/main/java/laddergame/view/InputView.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index e7aefc7..65bc0f4 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -23,11 +23,16 @@ public void run() { String playerNames = inputView.getPlayerNamesFromConsole(); Players players = ladderGameService.createPlayers(playerNames); + String gameResults = inputView.getGameResultFromConsole(); + //Results results = ladderGameService.createResults(gameResults); + int ladderHeightInput = inputView.getLadderHeightFromConsole(); LadderHeight ladderHeight = ladderGameService.createLadderHeight(ladderHeightInput); Ladder ladder = ladderGameService.createLadder(players, ladderHeight, new RandomLadderCreationStrategy()); + //LadderGame ladderGame = ladderGameService.createLadderGame(players, results, ladder); + outputView.printResult(players, ladder); } } diff --git a/src/main/java/laddergame/view/InputView.java b/src/main/java/laddergame/view/InputView.java index d8a7c6f..735b631 100644 --- a/src/main/java/laddergame/view/InputView.java +++ b/src/main/java/laddergame/view/InputView.java @@ -6,6 +6,7 @@ public class InputView { private static final Scanner SCANNER = new Scanner(System.in); private static final String MESSAGE_GET_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; + private static final String MESSAGE_GET_GAME_RESULTS = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; private static final String MESSAGE_GET_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; public String getPlayerNamesFromConsole() { @@ -13,6 +14,11 @@ public String getPlayerNamesFromConsole() { return SCANNER.nextLine(); } + public String getGameResultFromConsole() { + System.out.println(MESSAGE_GET_GAME_RESULTS); + return SCANNER.nextLine(); + } + public int getLadderHeightFromConsole() { System.out.println(MESSAGE_GET_LADDER_HEIGHT); return SCANNER.nextInt(); From 1c6646384e7823d2a9783f099474ab9020334ba2 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 17:11:10 +0900 Subject: [PATCH 28/31] =?UTF-8?q?style:=20Ladder=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=95=88=EC=9D=98=20Strategy=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EC=9D=98=20=EC=9D=B4=EB=A6=84=EC=9D=84=20strategy?= =?UTF-8?q?=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/laddergame/controller/LadderGameController.java | 2 +- src/main/java/laddergame/domain/ladder/Ladder.java | 2 +- src/main/java/laddergame/domain/ladder/LadderLine.java | 2 +- src/main/java/laddergame/domain/ladder/Point.java | 2 +- .../ladder/{Strategy => strategy}/LadderCreationStrategy.java | 2 +- .../{Strategy => strategy}/ManualLadderCreationStrategy.java | 2 +- .../{Strategy => strategy}/RandomLadderCreationStrategy.java | 2 +- src/main/java/laddergame/service/LadderGameService.java | 2 +- src/test/java/laddergame/domain/ladder/LadderLineTest.java | 3 +-- src/test/java/laddergame/domain/ladder/PointTest.java | 3 +-- 10 files changed, 10 insertions(+), 12 deletions(-) rename src/main/java/laddergame/domain/ladder/{Strategy => strategy}/LadderCreationStrategy.java (63%) rename src/main/java/laddergame/domain/ladder/{Strategy => strategy}/ManualLadderCreationStrategy.java (78%) rename src/main/java/laddergame/domain/ladder/{Strategy => strategy}/RandomLadderCreationStrategy.java (82%) diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index 65bc0f4..1a49c84 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -1,7 +1,7 @@ package laddergame.controller; import laddergame.domain.ladder.Ladder; -import laddergame.domain.ladder.Strategy.RandomLadderCreationStrategy; +import laddergame.domain.ladder.strategy.RandomLadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; import laddergame.service.LadderGameService; diff --git a/src/main/java/laddergame/domain/ladder/Ladder.java b/src/main/java/laddergame/domain/ladder/Ladder.java index 4074869..61c7343 100644 --- a/src/main/java/laddergame/domain/ladder/Ladder.java +++ b/src/main/java/laddergame/domain/ladder/Ladder.java @@ -1,6 +1,6 @@ package laddergame.domain.ladder; -import laddergame.domain.ladder.Strategy.LadderCreationStrategy; +import laddergame.domain.ladder.strategy.LadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; diff --git a/src/main/java/laddergame/domain/ladder/LadderLine.java b/src/main/java/laddergame/domain/ladder/LadderLine.java index 33c615d..7735664 100644 --- a/src/main/java/laddergame/domain/ladder/LadderLine.java +++ b/src/main/java/laddergame/domain/ladder/LadderLine.java @@ -1,6 +1,6 @@ package laddergame.domain.ladder; -import laddergame.domain.ladder.Strategy.LadderCreationStrategy; +import laddergame.domain.ladder.strategy.LadderCreationStrategy; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/laddergame/domain/ladder/Point.java b/src/main/java/laddergame/domain/ladder/Point.java index b0edce8..daac6c1 100644 --- a/src/main/java/laddergame/domain/ladder/Point.java +++ b/src/main/java/laddergame/domain/ladder/Point.java @@ -1,6 +1,6 @@ package laddergame.domain.ladder; -import laddergame.domain.ladder.Strategy.LadderCreationStrategy; +import laddergame.domain.ladder.strategy.LadderCreationStrategy; public enum Point { diff --git a/src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/strategy/LadderCreationStrategy.java similarity index 63% rename from src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java rename to src/main/java/laddergame/domain/ladder/strategy/LadderCreationStrategy.java index 21f8da2..6674d98 100644 --- a/src/main/java/laddergame/domain/ladder/Strategy/LadderCreationStrategy.java +++ b/src/main/java/laddergame/domain/ladder/strategy/LadderCreationStrategy.java @@ -1,4 +1,4 @@ -package laddergame.domain.ladder.Strategy; +package laddergame.domain.ladder.strategy; public interface LadderCreationStrategy { diff --git a/src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/strategy/ManualLadderCreationStrategy.java similarity index 78% rename from src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java rename to src/main/java/laddergame/domain/ladder/strategy/ManualLadderCreationStrategy.java index 2f28c7e..5a4747d 100644 --- a/src/main/java/laddergame/domain/ladder/Strategy/ManualLadderCreationStrategy.java +++ b/src/main/java/laddergame/domain/ladder/strategy/ManualLadderCreationStrategy.java @@ -1,4 +1,4 @@ -package laddergame.domain.ladder.Strategy; +package laddergame.domain.ladder.strategy; public class ManualLadderCreationStrategy implements LadderCreationStrategy { diff --git a/src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java b/src/main/java/laddergame/domain/ladder/strategy/RandomLadderCreationStrategy.java similarity index 82% rename from src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java rename to src/main/java/laddergame/domain/ladder/strategy/RandomLadderCreationStrategy.java index 880569c..5292251 100644 --- a/src/main/java/laddergame/domain/ladder/Strategy/RandomLadderCreationStrategy.java +++ b/src/main/java/laddergame/domain/ladder/strategy/RandomLadderCreationStrategy.java @@ -1,4 +1,4 @@ -package laddergame.domain.ladder.Strategy; +package laddergame.domain.ladder.strategy; import java.util.Random; diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index 5736bd0..d89b6be 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -1,7 +1,7 @@ package laddergame.service; import laddergame.domain.ladder.Ladder; -import laddergame.domain.ladder.Strategy.LadderCreationStrategy; +import laddergame.domain.ladder.strategy.LadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Player; import laddergame.domain.player.Players; diff --git a/src/test/java/laddergame/domain/ladder/LadderLineTest.java b/src/test/java/laddergame/domain/ladder/LadderLineTest.java index 1e59f81..cacaa66 100644 --- a/src/test/java/laddergame/domain/ladder/LadderLineTest.java +++ b/src/test/java/laddergame/domain/ladder/LadderLineTest.java @@ -1,6 +1,6 @@ package laddergame.domain.ladder; -import laddergame.domain.ladder.Strategy.ManualLadderCreationStrategy; +import laddergame.domain.ladder.strategy.ManualLadderCreationStrategy; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -8,7 +8,6 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class LadderLineTest { diff --git a/src/test/java/laddergame/domain/ladder/PointTest.java b/src/test/java/laddergame/domain/ladder/PointTest.java index 2965b29..954d504 100644 --- a/src/test/java/laddergame/domain/ladder/PointTest.java +++ b/src/test/java/laddergame/domain/ladder/PointTest.java @@ -1,10 +1,9 @@ package laddergame.domain.ladder; -import laddergame.domain.ladder.Strategy.ManualLadderCreationStrategy; +import laddergame.domain.ladder.strategy.ManualLadderCreationStrategy; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class PointTest { From cf3b3b1765b8fc8fc214f221476c30f4b32b6f1c Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 17:25:28 +0900 Subject: [PATCH 29/31] =?UTF-8?q?feat:=20Results=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LadderGameService에 createResults 메서드가 Results 객체를 반환 - LadderGameService의 parsePlayerNames 메서드를 createResults에서도 재사용가능하도록 parse로 변경하고 이에 맞게 리팩토링 - createPlayers를 리팩토링하던 중 createPlayerList 메서드를 Players로 이주시킴 --- .../controller/LadderGameController.java | 3 ++- .../laddergame/domain/player/Players.java | 13 ++++++++---- .../laddergame/domain/result/Results.java | 4 ++++ .../laddergame/service/LadderGameService.java | 20 +++++++++---------- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 src/main/java/laddergame/domain/result/Results.java diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index 1a49c84..a653551 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -4,6 +4,7 @@ import laddergame.domain.ladder.strategy.RandomLadderCreationStrategy; import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Players; +import laddergame.domain.result.Results; import laddergame.service.LadderGameService; import laddergame.view.InputView; import laddergame.view.OutputView; @@ -24,7 +25,7 @@ public void run() { Players players = ladderGameService.createPlayers(playerNames); String gameResults = inputView.getGameResultFromConsole(); - //Results results = ladderGameService.createResults(gameResults); + Results results = ladderGameService.createResults(gameResults); int ladderHeightInput = inputView.getLadderHeightFromConsole(); LadderHeight ladderHeight = ladderGameService.createLadderHeight(ladderHeightInput); diff --git a/src/main/java/laddergame/domain/player/Players.java b/src/main/java/laddergame/domain/player/Players.java index 5bd3e4e..0f4998f 100644 --- a/src/main/java/laddergame/domain/player/Players.java +++ b/src/main/java/laddergame/domain/player/Players.java @@ -2,10 +2,8 @@ import org.apache.commons.lang3.StringUtils; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; public class Players { @@ -28,6 +26,13 @@ public int size() { return players.size(); } + public static List createPlayerList(String[] playerNames) { + return Arrays.stream(playerNames) + .map(String::trim) + .map(Player::new) + .collect(Collectors.toList()); + } + public String getAlignedPlayerNames() { List playerNames = playerNamesToList(); diff --git a/src/main/java/laddergame/domain/result/Results.java b/src/main/java/laddergame/domain/result/Results.java new file mode 100644 index 0000000..770555d --- /dev/null +++ b/src/main/java/laddergame/domain/result/Results.java @@ -0,0 +1,4 @@ +package laddergame.domain.result; + +public class Results { +} diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index d89b6be..e97efc6 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -5,6 +5,7 @@ import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Player; import laddergame.domain.player.Players; +import laddergame.domain.result.Results; import java.util.Arrays; import java.util.List; @@ -12,23 +13,22 @@ public class LadderGameService { - private static final String DELIMITER_PLAYER_NAME = ","; + private static final String NAME_DELIMITER = ","; public Players createPlayers(String playerNames) { - String[] parsedPlayerNames = parsePlayerNames(playerNames); - List playerList = createPlayerList(parsedPlayerNames); + String[] parsedPlayerNames = parse(playerNames); + List playerList = Players.createPlayerList(parsedPlayerNames); return new Players(playerList); } - private String[] parsePlayerNames(String playerNames) { - return playerNames.split(DELIMITER_PLAYER_NAME); + public Results createResults(String gameResults) { + String[] parsedResultNames = parse(gameResults); + List resultList = Results.createResultList(parsedResultNames); + return new Results(resultList); } - private List createPlayerList(String[] playerNames) { - return Arrays.stream(playerNames) - .map(String::trim) - .map(Player::new) - .collect(Collectors.toList()); + private String[] parse(String names) { + return names.split(DELIMITER_PLAYER_NAME); } public LadderHeight createLadderHeight(int ladderHeightInput) { From 8911a2c5d8fab6099034300fcd220e8ccd20804b Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 20:01:45 +0900 Subject: [PATCH 30/31] =?UTF-8?q?feat:=20Result=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Results의 createResultList에서 Result 객체를 생성 - Result의 생성자에서 name의 길이를 검사 --- README.md | 6 ++--- .../java/laddergame/domain/result/Result.java | 24 +++++++++++++++++++ .../laddergame/domain/result/Results.java | 17 +++++++++++++ .../laddergame/service/LadderGameService.java | 5 ++-- 4 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 src/main/java/laddergame/domain/result/Result.java diff --git a/README.md b/README.md index 571b594..b5c5452 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ - [ ] 이름이 공백일 수 없음 ### 실행결과 입력 -- [ ] 여러 결과는 쉼표(,)를 기준으로 구분 -- [ ] 결과는 최대 5글자 -- [ ] 앞 뒤 공백을 제거 +- [x] 여러 결과는 쉼표(,)를 기준으로 구분 +- [x] 결과는 최대 5글자 +- [x] 앞 뒤 공백을 제거 - [ ] 결과가 공백일 수 없음 ### 사다리 높이 입력 diff --git a/src/main/java/laddergame/domain/result/Result.java b/src/main/java/laddergame/domain/result/Result.java new file mode 100644 index 0000000..2012033 --- /dev/null +++ b/src/main/java/laddergame/domain/result/Result.java @@ -0,0 +1,24 @@ +package laddergame.domain.result; + +public class Result { + + public static final int RESULT_NAME_MAX_LENGTH = 5; + + private final String name; + + public Result(final String name) { + if (isLongerThanMaxLength(name)) { + throw new IllegalArgumentException(); + } + + this.name = name; + } + + private boolean isLongerThanMaxLength(final String name) { + return name.length() > RESULT_NAME_MAX_LENGTH; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/laddergame/domain/result/Results.java b/src/main/java/laddergame/domain/result/Results.java index 770555d..adaa47f 100644 --- a/src/main/java/laddergame/domain/result/Results.java +++ b/src/main/java/laddergame/domain/result/Results.java @@ -1,4 +1,21 @@ package laddergame.domain.result; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class Results { + + private final List results; + + public Results(List results) { + this.results = results; + } + + public static List createResultList(String[] resultNames) { + return Arrays.stream(resultNames) + .map(String::trim) + .map(Result::new) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index e97efc6..cac03d8 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -5,11 +5,10 @@ import laddergame.domain.ladderheight.LadderHeight; import laddergame.domain.player.Player; import laddergame.domain.player.Players; +import laddergame.domain.result.Result; import laddergame.domain.result.Results; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; public class LadderGameService { @@ -28,7 +27,7 @@ public Results createResults(String gameResults) { } private String[] parse(String names) { - return names.split(DELIMITER_PLAYER_NAME); + return names.split(NAME_DELIMITER); } public LadderHeight createLadderHeight(int ladderHeightInput) { From 8bc16326709a1729c3802726c55ff3ca7fe56132 Mon Sep 17 00:00:00 2001 From: taesikyoo Date: Fri, 31 Jan 2020 20:15:48 +0900 Subject: [PATCH 31/31] =?UTF-8?q?feat:=20Result=EC=9D=98=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=EC=99=80=20Player=EC=9D=98=20=EC=88=98=EA=B0=80=20?= =?UTF-8?q?=EA=B0=99=EC=9D=80=EC=A7=80=20=EC=B2=B4=ED=81=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Results의 생성자에서 입력받은 객체의 수가 같은지를 체크 --- README.md | 3 ++- .../laddergame/controller/LadderGameController.java | 2 +- src/main/java/laddergame/domain/result/Results.java | 10 +++++++++- .../java/laddergame/service/LadderGameService.java | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b5c5452..81b174b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ - [x] 여러 결과는 쉼표(,)를 기준으로 구분 - [x] 결과는 최대 5글자 - [x] 앞 뒤 공백을 제거 -- [ ] 결과가 공백일 수 없음 +- [ ] 결과가 공백일 수 없음 +- [ ] 참여자 수와 결과의 수가 같아야 함 ### 사다리 높이 입력 - [x] 사다리 높이는 1 이상이여야함 diff --git a/src/main/java/laddergame/controller/LadderGameController.java b/src/main/java/laddergame/controller/LadderGameController.java index a653551..eff1a09 100644 --- a/src/main/java/laddergame/controller/LadderGameController.java +++ b/src/main/java/laddergame/controller/LadderGameController.java @@ -25,7 +25,7 @@ public void run() { Players players = ladderGameService.createPlayers(playerNames); String gameResults = inputView.getGameResultFromConsole(); - Results results = ladderGameService.createResults(gameResults); + Results results = ladderGameService.createResults(gameResults, players.size()); int ladderHeightInput = inputView.getLadderHeightFromConsole(); LadderHeight ladderHeight = ladderGameService.createLadderHeight(ladderHeightInput); diff --git a/src/main/java/laddergame/domain/result/Results.java b/src/main/java/laddergame/domain/result/Results.java index adaa47f..20694b9 100644 --- a/src/main/java/laddergame/domain/result/Results.java +++ b/src/main/java/laddergame/domain/result/Results.java @@ -8,7 +8,11 @@ public class Results { private final List results; - public Results(List results) { + public Results(final List results, int playerCount) { + if (!haveSameCount(results.size(), playerCount)) { + throw new IllegalArgumentException(); + } + this.results = results; } @@ -18,4 +22,8 @@ public static List createResultList(String[] resultNames) { .map(Result::new) .collect(Collectors.toList()); } + + private boolean haveSameCount(int resultCount, int playerCount) { + return resultCount == playerCount; + } } diff --git a/src/main/java/laddergame/service/LadderGameService.java b/src/main/java/laddergame/service/LadderGameService.java index cac03d8..e9e1917 100644 --- a/src/main/java/laddergame/service/LadderGameService.java +++ b/src/main/java/laddergame/service/LadderGameService.java @@ -20,10 +20,10 @@ public Players createPlayers(String playerNames) { return new Players(playerList); } - public Results createResults(String gameResults) { + public Results createResults(String gameResults, int playerCount) { String[] parsedResultNames = parse(gameResults); List resultList = Results.createResultList(parsedResultNames); - return new Results(resultList); + return new Results(resultList, playerCount); } private String[] parse(String names) {