From fd3780dbaef5d1125d8bf05155da16e0e4cebd30 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 18:35:36 +0900 Subject: [PATCH 01/27] Add User class --- src/main/java/ladder/domain/User.java | 21 +++++++++++++++++++++ src/test/java/ladder/UserTest.java | 17 +++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/main/java/ladder/domain/User.java create mode 100644 src/test/java/ladder/UserTest.java diff --git a/src/main/java/ladder/domain/User.java b/src/main/java/ladder/domain/User.java new file mode 100644 index 0000000..22c0a88 --- /dev/null +++ b/src/main/java/ladder/domain/User.java @@ -0,0 +1,21 @@ +package ladder.domain; + +public class User { + private final String name; + private final int LIMITED_NUMBER_OF_CHARACTERS = 5; + + private User(String name) { + this.name = name; + } + + public static User from(String name) { + return new User(name); + } + + @Override + public String toString() { + int blankCount = LIMITED_NUMBER_OF_CHARACTERS - name.length(); + + return " ".repeat(Math.max(0, blankCount)) + name; + } +} diff --git a/src/test/java/ladder/UserTest.java b/src/test/java/ladder/UserTest.java new file mode 100644 index 0000000..94951a3 --- /dev/null +++ b/src/test/java/ladder/UserTest.java @@ -0,0 +1,17 @@ +package ladder; + +import ladder.domain.User; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class UserTest { + @Test + @DisplayName("toString") + void toStringMethod() { + User user = User.from("john"); + + assertThat(user.toString()).isEqualTo(" john"); + } +} From 35ab8650661fe86aa586d881d10ea87aa1559472 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:23:25 +0900 Subject: [PATCH 02/27] Add Users class --- src/main/java/ladder/domain/Users.java | 27 ++++++++++++++++++++++++++ src/test/java/ladder/UserTest.java | 4 ++-- src/test/java/ladder/UsersTest.java | 17 ++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ladder/domain/Users.java create mode 100644 src/test/java/ladder/UsersTest.java diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java new file mode 100644 index 0000000..2538eaa --- /dev/null +++ b/src/main/java/ladder/domain/Users.java @@ -0,0 +1,27 @@ +package ladder.domain; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class Users { + private final List users; + + private Users(String names) { + this.users = Arrays.stream(names.split(",")).map(User::from).collect(Collectors.toList()); + } + + public static Users from(String names) { + return new Users(names); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + for (User user : this.users) { + result.append(user.toString()).append(" "); + } + + return result.toString(); + } +} diff --git a/src/test/java/ladder/UserTest.java b/src/test/java/ladder/UserTest.java index 94951a3..a76683f 100644 --- a/src/test/java/ladder/UserTest.java +++ b/src/test/java/ladder/UserTest.java @@ -10,8 +10,8 @@ public class UserTest { @Test @DisplayName("toString") void toStringMethod() { - User user = User.from("john"); + User user = User.from("din"); - assertThat(user.toString()).isEqualTo(" john"); + assertThat(user.toString()).isEqualTo(" din"); } } diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java new file mode 100644 index 0000000..1ae5d1d --- /dev/null +++ b/src/test/java/ladder/UsersTest.java @@ -0,0 +1,17 @@ +package ladder; + +import ladder.domain.Users; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class UsersTest { + @Test + @DisplayName("toString") + void toStringMethod() { + Users users = Users.from("john,james,tom,buddy,din"); + + assertThat(users.toString()).isEqualTo(" john james tom buddy din "); + } +} From b3cadf436cc174642b3e7d2f48b2f951a2252701 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:27:25 +0900 Subject: [PATCH 03/27] Add Input.getPlayersName() method --- src/main/java/ladder/controller/LadderGame.java | 10 ++++++++++ src/main/java/ladder/view/Input.java | 12 ++++++++++++ src/main/java/ladder/view/Output.java | 4 ++++ 3 files changed, 26 insertions(+) create mode 100644 src/main/java/ladder/controller/LadderGame.java create mode 100644 src/main/java/ladder/view/Input.java create mode 100644 src/main/java/ladder/view/Output.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java new file mode 100644 index 0000000..96f358b --- /dev/null +++ b/src/main/java/ladder/controller/LadderGame.java @@ -0,0 +1,10 @@ +package ladder.controller; + +import ladder.view.Input; + +public class LadderGame { + public static void main(String[] args) { + String playersName = Input.getPlayersName(); + + } +} diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java new file mode 100644 index 0000000..27cd565 --- /dev/null +++ b/src/main/java/ladder/view/Input.java @@ -0,0 +1,12 @@ +package ladder.view; + +import java.util.Scanner; + +public class Input { + public static String getPlayersName() { + System.out.println("참여할 사람의 이름을 입력하세요. 이름은 쉼표(,)로 구분합니다"); + Scanner scanner = new Scanner(System.in); + + return scanner.nextLine(); + } +} diff --git a/src/main/java/ladder/view/Output.java b/src/main/java/ladder/view/Output.java new file mode 100644 index 0000000..6f691ff --- /dev/null +++ b/src/main/java/ladder/view/Output.java @@ -0,0 +1,4 @@ +package ladder.view; + +public class Output { +} From 25d26189f85229bca9491ba136fb8e244e364cdb Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:40:24 +0900 Subject: [PATCH 04/27] Add PlayersName class to wrap primitive types --- .../java/ladder/controller/LadderGame.java | 3 +- src/main/java/ladder/domain/PlayersName.java | 29 +++++++++++++++++++ src/main/java/ladder/view/Input.java | 6 ++-- src/test/java/ladder/PlayersNameTest.java | 22 ++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ladder/domain/PlayersName.java create mode 100644 src/test/java/ladder/PlayersNameTest.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 96f358b..c85ff0e 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,10 +1,11 @@ package ladder.controller; +import ladder.domain.PlayersName; import ladder.view.Input; public class LadderGame { public static void main(String[] args) { - String playersName = Input.getPlayersName(); + PlayersName playersName = Input.getPlayersName(); } } diff --git a/src/main/java/ladder/domain/PlayersName.java b/src/main/java/ladder/domain/PlayersName.java new file mode 100644 index 0000000..0fcb8fe --- /dev/null +++ b/src/main/java/ladder/domain/PlayersName.java @@ -0,0 +1,29 @@ +package ladder.domain; + +import java.util.Optional; + +public class PlayersName { + private final String names; + + private PlayersName(String names) { + this.validator(names); + this.names = names; + } + + public static PlayersName from(String names) { + return new PlayersName(names); + } + + private void validator(String names) { + Optional optNames = Optional.ofNullable(names); + if (optNames.isEmpty()) { + throw new IllegalArgumentException(); + } + + for (String name : names.split(",")) { + if (name.length() > 5 || name.length() < 1) { + throw new IllegalArgumentException(); + } + }; + } +} diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 27cd565..7f2c81d 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -1,12 +1,14 @@ package ladder.view; +import ladder.domain.PlayersName; + import java.util.Scanner; public class Input { - public static String getPlayersName() { + public static PlayersName getPlayersName() { System.out.println("참여할 사람의 이름을 입력하세요. 이름은 쉼표(,)로 구분합니다"); Scanner scanner = new Scanner(System.in); - return scanner.nextLine(); + return PlayersName.from(scanner.nextLine()); } } diff --git a/src/test/java/ladder/PlayersNameTest.java b/src/test/java/ladder/PlayersNameTest.java new file mode 100644 index 0000000..3894c72 --- /dev/null +++ b/src/test/java/ladder/PlayersNameTest.java @@ -0,0 +1,22 @@ +package ladder; + +import ladder.domain.PlayersName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class PlayersNameTest { + @Test + void nullCheck() { + assertThatThrownBy(() -> { + PlayersName playersName = PlayersName.from(null); + }).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void invalidNames() { + assertThatThrownBy(() -> { + PlayersName playersName = PlayersName.from("john,christina"); + }).isInstanceOf(IllegalArgumentException.class); + } +} From da6e6a4cb70a97ae06a592bd2ea094eec5b67b91 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:50:54 +0900 Subject: [PATCH 05/27] Add getUsers() to PlayersName class --- src/main/java/ladder/domain/PlayersName.java | 11 +++++++++++ src/main/java/ladder/domain/Users.java | 8 ++++---- src/test/java/ladder/PlayersNameTest.java | 11 +++++++++++ src/test/java/ladder/UsersTest.java | 3 ++- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/ladder/domain/PlayersName.java b/src/main/java/ladder/domain/PlayersName.java index 0fcb8fe..56313f4 100644 --- a/src/main/java/ladder/domain/PlayersName.java +++ b/src/main/java/ladder/domain/PlayersName.java @@ -1,6 +1,9 @@ package ladder.domain; +import java.util.Arrays; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; public class PlayersName { private final String names; @@ -26,4 +29,12 @@ private void validator(String names) { } }; } + + public Users getUsers() { + List userNames = Arrays.stream(this.names.split(",")) + .map(User::from) + .collect(Collectors.toList()); + + return Users.from(userNames); + } } diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java index 2538eaa..a9f7f1b 100644 --- a/src/main/java/ladder/domain/Users.java +++ b/src/main/java/ladder/domain/Users.java @@ -7,12 +7,12 @@ public class Users { private final List users; - private Users(String names) { - this.users = Arrays.stream(names.split(",")).map(User::from).collect(Collectors.toList()); + private Users(List users) { + this.users = users; } - public static Users from(String names) { - return new Users(names); + public static Users from(List users) { + return new Users(users); } @Override diff --git a/src/test/java/ladder/PlayersNameTest.java b/src/test/java/ladder/PlayersNameTest.java index 3894c72..4dcb476 100644 --- a/src/test/java/ladder/PlayersNameTest.java +++ b/src/test/java/ladder/PlayersNameTest.java @@ -1,8 +1,10 @@ package ladder; import ladder.domain.PlayersName; +import ladder.domain.Users; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; public class PlayersNameTest { @@ -19,4 +21,13 @@ void invalidNames() { PlayersName playersName = PlayersName.from("john,christina"); }).isInstanceOf(IllegalArgumentException.class); } + + @Test + void getUsers() { + PlayersName playersName = PlayersName.from("john,tom,jenny"); + + Users users = playersName.getUsers(); + + assertThat(users.toString()).isEqualTo(" john tom jenny "); + } } diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java index 1ae5d1d..0ac82d4 100644 --- a/src/test/java/ladder/UsersTest.java +++ b/src/test/java/ladder/UsersTest.java @@ -1,5 +1,6 @@ package ladder; +import ladder.domain.PlayersName; import ladder.domain.Users; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -10,7 +11,7 @@ public class UsersTest { @Test @DisplayName("toString") void toStringMethod() { - Users users = Users.from("john,james,tom,buddy,din"); + Users users = PlayersName.from("john,james,tom,buddy,din").getUsers(); assertThat(users.toString()).isEqualTo(" john james tom buddy din "); } From 194b24e024b91ed86b7761f54d417484b768ca03 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:52:01 +0900 Subject: [PATCH 06/27] Modify PlayersName class name to UsersNameReader --- src/main/java/ladder/controller/LadderGame.java | 4 ++-- .../{PlayersName.java => UsersNameReader.java} | 8 ++++---- src/main/java/ladder/view/Input.java | 6 +++--- ...PlayersNameTest.java => UsersNameReaderTest.java} | 12 ++++++------ src/test/java/ladder/UsersTest.java | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) rename src/main/java/ladder/domain/{PlayersName.java => UsersNameReader.java} (83%) rename src/test/java/ladder/{PlayersNameTest.java => UsersNameReaderTest.java} (61%) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index c85ff0e..f961ef9 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,11 +1,11 @@ package ladder.controller; -import ladder.domain.PlayersName; +import ladder.domain.UsersNameReader; import ladder.view.Input; public class LadderGame { public static void main(String[] args) { - PlayersName playersName = Input.getPlayersName(); + UsersNameReader usersNameReader = Input.getPlayersName(); } } diff --git a/src/main/java/ladder/domain/PlayersName.java b/src/main/java/ladder/domain/UsersNameReader.java similarity index 83% rename from src/main/java/ladder/domain/PlayersName.java rename to src/main/java/ladder/domain/UsersNameReader.java index 56313f4..97351d5 100644 --- a/src/main/java/ladder/domain/PlayersName.java +++ b/src/main/java/ladder/domain/UsersNameReader.java @@ -5,16 +5,16 @@ import java.util.Optional; import java.util.stream.Collectors; -public class PlayersName { +public class UsersNameReader { private final String names; - private PlayersName(String names) { + private UsersNameReader(String names) { this.validator(names); this.names = names; } - public static PlayersName from(String names) { - return new PlayersName(names); + public static UsersNameReader from(String names) { + return new UsersNameReader(names); } private void validator(String names) { diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 7f2c81d..161cb52 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -1,14 +1,14 @@ package ladder.view; -import ladder.domain.PlayersName; +import ladder.domain.UsersNameReader; import java.util.Scanner; public class Input { - public static PlayersName getPlayersName() { + public static UsersNameReader getPlayersName() { System.out.println("참여할 사람의 이름을 입력하세요. 이름은 쉼표(,)로 구분합니다"); Scanner scanner = new Scanner(System.in); - return PlayersName.from(scanner.nextLine()); + return UsersNameReader.from(scanner.nextLine()); } } diff --git a/src/test/java/ladder/PlayersNameTest.java b/src/test/java/ladder/UsersNameReaderTest.java similarity index 61% rename from src/test/java/ladder/PlayersNameTest.java rename to src/test/java/ladder/UsersNameReaderTest.java index 4dcb476..ecd2d6b 100644 --- a/src/test/java/ladder/PlayersNameTest.java +++ b/src/test/java/ladder/UsersNameReaderTest.java @@ -1,32 +1,32 @@ package ladder; -import ladder.domain.PlayersName; +import ladder.domain.UsersNameReader; import ladder.domain.Users; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -public class PlayersNameTest { +public class UsersNameReaderTest { @Test void nullCheck() { assertThatThrownBy(() -> { - PlayersName playersName = PlayersName.from(null); + UsersNameReader usersNameReader = UsersNameReader.from(null); }).isInstanceOf(IllegalArgumentException.class); } @Test void invalidNames() { assertThatThrownBy(() -> { - PlayersName playersName = PlayersName.from("john,christina"); + UsersNameReader usersNameReader = UsersNameReader.from("john,christina"); }).isInstanceOf(IllegalArgumentException.class); } @Test void getUsers() { - PlayersName playersName = PlayersName.from("john,tom,jenny"); + UsersNameReader usersNameReader = UsersNameReader.from("john,tom,jenny"); - Users users = playersName.getUsers(); + Users users = usersNameReader.getUsers(); assertThat(users.toString()).isEqualTo(" john tom jenny "); } diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java index 0ac82d4..ad7e2ff 100644 --- a/src/test/java/ladder/UsersTest.java +++ b/src/test/java/ladder/UsersTest.java @@ -1,6 +1,6 @@ package ladder; -import ladder.domain.PlayersName; +import ladder.domain.UsersNameReader; import ladder.domain.Users; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,7 +11,7 @@ public class UsersTest { @Test @DisplayName("toString") void toStringMethod() { - Users users = PlayersName.from("john,james,tom,buddy,din").getUsers(); + Users users = UsersNameReader.from("john,james,tom,buddy,din").getUsers(); assertThat(users.toString()).isEqualTo(" john james tom buddy din "); } From e7ba28b7d858cf4d6f901344ce671dcd7a62ee0f Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:53:18 +0900 Subject: [PATCH 07/27] Modify getPlayersName method name to getUsersName --- src/main/java/ladder/controller/LadderGame.java | 2 +- src/main/java/ladder/view/Input.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index f961ef9..8b77787 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -5,7 +5,7 @@ public class LadderGame { public static void main(String[] args) { - UsersNameReader usersNameReader = Input.getPlayersName(); + UsersNameReader usersNameReader = Input.getUsersName(); } } diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 161cb52..3362b71 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -5,7 +5,7 @@ import java.util.Scanner; public class Input { - public static UsersNameReader getPlayersName() { + public static UsersNameReader getUsersName() { System.out.println("참여할 사람의 이름을 입력하세요. 이름은 쉼표(,)로 구분합니다"); Scanner scanner = new Scanner(System.in); From 8c6eb20ae02e5411eb3a9bf372c88286c931c106 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 19:55:00 +0900 Subject: [PATCH 08/27] Modifiy getUsers method name to convertNamesToUser --- src/main/java/ladder/domain/UsersNameReader.java | 2 +- src/test/java/ladder/UsersNameReaderTest.java | 2 +- src/test/java/ladder/UsersTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/domain/UsersNameReader.java b/src/main/java/ladder/domain/UsersNameReader.java index 97351d5..dc6da9e 100644 --- a/src/main/java/ladder/domain/UsersNameReader.java +++ b/src/main/java/ladder/domain/UsersNameReader.java @@ -30,7 +30,7 @@ private void validator(String names) { }; } - public Users getUsers() { + public Users convertNamesToUsers() { List userNames = Arrays.stream(this.names.split(",")) .map(User::from) .collect(Collectors.toList()); diff --git a/src/test/java/ladder/UsersNameReaderTest.java b/src/test/java/ladder/UsersNameReaderTest.java index ecd2d6b..5a9bd1e 100644 --- a/src/test/java/ladder/UsersNameReaderTest.java +++ b/src/test/java/ladder/UsersNameReaderTest.java @@ -26,7 +26,7 @@ void invalidNames() { void getUsers() { UsersNameReader usersNameReader = UsersNameReader.from("john,tom,jenny"); - Users users = usersNameReader.getUsers(); + Users users = usersNameReader.convertNamesToUsers(); assertThat(users.toString()).isEqualTo(" john tom jenny "); } diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java index ad7e2ff..1dc1cb0 100644 --- a/src/test/java/ladder/UsersTest.java +++ b/src/test/java/ladder/UsersTest.java @@ -11,7 +11,7 @@ public class UsersTest { @Test @DisplayName("toString") void toStringMethod() { - Users users = UsersNameReader.from("john,james,tom,buddy,din").getUsers(); + Users users = UsersNameReader.from("john,james,tom,buddy,din").convertNamesToUsers(); assertThat(users.toString()).isEqualTo(" john james tom buddy din "); } From 213fa986d35e3799666613c8fc8ed04b10b54604 Mon Sep 17 00:00:00 2001 From: woomin Date: Wed, 1 Jul 2020 20:21:36 +0900 Subject: [PATCH 09/27] Modify from() factory method name to newInstance --- src/main/java/ladder/domain/User.java | 2 +- src/main/java/ladder/domain/Users.java | 2 +- src/main/java/ladder/domain/UsersNameReader.java | 6 +++--- src/main/java/ladder/view/Input.java | 2 +- src/test/java/ladder/UserTest.java | 2 +- src/test/java/ladder/UsersNameReaderTest.java | 6 +++--- src/test/java/ladder/UsersTest.java | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/ladder/domain/User.java b/src/main/java/ladder/domain/User.java index 22c0a88..30cccef 100644 --- a/src/main/java/ladder/domain/User.java +++ b/src/main/java/ladder/domain/User.java @@ -8,7 +8,7 @@ private User(String name) { this.name = name; } - public static User from(String name) { + public static User newInstance(String name) { return new User(name); } diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java index a9f7f1b..38c34f2 100644 --- a/src/main/java/ladder/domain/Users.java +++ b/src/main/java/ladder/domain/Users.java @@ -11,7 +11,7 @@ private Users(List users) { this.users = users; } - public static Users from(List users) { + public static Users newInstance(List users) { return new Users(users); } diff --git a/src/main/java/ladder/domain/UsersNameReader.java b/src/main/java/ladder/domain/UsersNameReader.java index dc6da9e..edfc7bc 100644 --- a/src/main/java/ladder/domain/UsersNameReader.java +++ b/src/main/java/ladder/domain/UsersNameReader.java @@ -13,7 +13,7 @@ private UsersNameReader(String names) { this.names = names; } - public static UsersNameReader from(String names) { + public static UsersNameReader newInstace(String names) { return new UsersNameReader(names); } @@ -32,9 +32,9 @@ private void validator(String names) { public Users convertNamesToUsers() { List userNames = Arrays.stream(this.names.split(",")) - .map(User::from) + .map(User::newInstance) .collect(Collectors.toList()); - return Users.from(userNames); + return Users.newInstance(userNames); } } diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 3362b71..39be917 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -9,6 +9,6 @@ public static UsersNameReader getUsersName() { System.out.println("참여할 사람의 이름을 입력하세요. 이름은 쉼표(,)로 구분합니다"); Scanner scanner = new Scanner(System.in); - return UsersNameReader.from(scanner.nextLine()); + return UsersNameReader.newInstace(scanner.nextLine()); } } diff --git a/src/test/java/ladder/UserTest.java b/src/test/java/ladder/UserTest.java index a76683f..cf0aa43 100644 --- a/src/test/java/ladder/UserTest.java +++ b/src/test/java/ladder/UserTest.java @@ -10,7 +10,7 @@ public class UserTest { @Test @DisplayName("toString") void toStringMethod() { - User user = User.from("din"); + User user = User.newInstance("din"); assertThat(user.toString()).isEqualTo(" din"); } diff --git a/src/test/java/ladder/UsersNameReaderTest.java b/src/test/java/ladder/UsersNameReaderTest.java index 5a9bd1e..31ae042 100644 --- a/src/test/java/ladder/UsersNameReaderTest.java +++ b/src/test/java/ladder/UsersNameReaderTest.java @@ -11,20 +11,20 @@ public class UsersNameReaderTest { @Test void nullCheck() { assertThatThrownBy(() -> { - UsersNameReader usersNameReader = UsersNameReader.from(null); + UsersNameReader usersNameReader = UsersNameReader.newInstace(null); }).isInstanceOf(IllegalArgumentException.class); } @Test void invalidNames() { assertThatThrownBy(() -> { - UsersNameReader usersNameReader = UsersNameReader.from("john,christina"); + UsersNameReader usersNameReader = UsersNameReader.newInstace("john,christina"); }).isInstanceOf(IllegalArgumentException.class); } @Test void getUsers() { - UsersNameReader usersNameReader = UsersNameReader.from("john,tom,jenny"); + UsersNameReader usersNameReader = UsersNameReader.newInstace("john,tom,jenny"); Users users = usersNameReader.convertNamesToUsers(); diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java index 1dc1cb0..a092e96 100644 --- a/src/test/java/ladder/UsersTest.java +++ b/src/test/java/ladder/UsersTest.java @@ -11,7 +11,7 @@ public class UsersTest { @Test @DisplayName("toString") void toStringMethod() { - Users users = UsersNameReader.from("john,james,tom,buddy,din").convertNamesToUsers(); + Users users = UsersNameReader.newInstace("john,james,tom,buddy,din").convertNamesToUsers(); assertThat(users.toString()).isEqualTo(" john james tom buddy din "); } From a1017f9cff8cf51afc6ebb791e986b3aa8f8d372 Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 10:57:20 +0900 Subject: [PATCH 10/27] Modify the name of constant --- src/main/java/ladder/domain/User.java | 4 ++-- src/main/java/ladder/domain/Users.java | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/ladder/domain/User.java b/src/main/java/ladder/domain/User.java index 30cccef..176a350 100644 --- a/src/main/java/ladder/domain/User.java +++ b/src/main/java/ladder/domain/User.java @@ -2,7 +2,7 @@ public class User { private final String name; - private final int LIMITED_NUMBER_OF_CHARACTERS = 5; + private final int MAX_NUMBER_OF_CHARACTERS = 5; private User(String name) { this.name = name; @@ -14,7 +14,7 @@ public static User newInstance(String name) { @Override public String toString() { - int blankCount = LIMITED_NUMBER_OF_CHARACTERS - name.length(); + int blankCount = MAX_NUMBER_OF_CHARACTERS - name.length(); return " ".repeat(Math.max(0, blankCount)) + name; } diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java index 38c34f2..f96ec0c 100644 --- a/src/main/java/ladder/domain/Users.java +++ b/src/main/java/ladder/domain/Users.java @@ -1,8 +1,6 @@ package ladder.domain; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; public class Users { private final List users; From 0d79d0300612802994cc3fffe463efb28a563f77 Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 11:05:36 +0900 Subject: [PATCH 11/27] Add getNumberOfUsers() method to Users class --- src/main/java/ladder/controller/LadderGame.java | 2 ++ src/main/java/ladder/domain/Users.java | 4 ++++ src/test/java/ladder/UsersTest.java | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 8b77787..0c27a95 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,11 +1,13 @@ package ladder.controller; +import ladder.domain.Users; import ladder.domain.UsersNameReader; import ladder.view.Input; public class LadderGame { public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); + Users users = usersNameReader.convertNamesToUsers(); } } diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java index f96ec0c..9a8915c 100644 --- a/src/main/java/ladder/domain/Users.java +++ b/src/main/java/ladder/domain/Users.java @@ -22,4 +22,8 @@ public String toString() { return result.toString(); } + + public int getNumberOfUsers() { + return users.size(); + } } diff --git a/src/test/java/ladder/UsersTest.java b/src/test/java/ladder/UsersTest.java index a092e96..cfe4417 100644 --- a/src/test/java/ladder/UsersTest.java +++ b/src/test/java/ladder/UsersTest.java @@ -2,17 +2,27 @@ import ladder.domain.UsersNameReader; import ladder.domain.Users; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; public class UsersTest { + Users users; + @BeforeEach + void init() { + users = UsersNameReader.newInstace("john,james,tom,buddy,din").convertNamesToUsers(); + } + @Test @DisplayName("toString") void toStringMethod() { - Users users = UsersNameReader.newInstace("john,james,tom,buddy,din").convertNamesToUsers(); - assertThat(users.toString()).isEqualTo(" john james tom buddy din "); } + + @Test + void getNumberOfUsers() { + assertThat(users.getNumberOfUsers()).isEqualTo(5); + } } From bc04bfe1b920194c060238eeb53e2f989412ab00 Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 11:38:08 +0900 Subject: [PATCH 12/27] Add Line class --- src/main/java/ladder/domain/Line.java | 42 +++++++++++++++++++++++++++ src/test/java/ladder/LineTest.java | 21 ++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/ladder/domain/Line.java create mode 100644 src/test/java/ladder/LineTest.java diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java new file mode 100644 index 0000000..184ba67 --- /dev/null +++ b/src/main/java/ladder/domain/Line.java @@ -0,0 +1,42 @@ +package ladder.domain; + +import java.util.List; + +public class Line { + private final List bridgeStates; + + public static Line newInstance(List bridgeStates) { + return new Line(bridgeStates); + } + + public Line(List bridgeStates) { + this.bridgeStates = bridgeStates; + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + + for (int state : bridgeStates) { + appendColumn(result); + appendBridge(result, state); + } + appendColumn(result); + + return String.valueOf(result); + } + + private void appendColumn(StringBuilder result) { + result.append("|"); + } + + private void appendBridge(StringBuilder result, int state) { + if (state == 1) { + result.append("----"); + } + + if (state == 0) { + result.append(" "); + } + } +} diff --git a/src/test/java/ladder/LineTest.java b/src/test/java/ladder/LineTest.java new file mode 100644 index 0000000..b3fbb0a --- /dev/null +++ b/src/test/java/ladder/LineTest.java @@ -0,0 +1,21 @@ +package ladder; + +import ladder.domain.Line; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LineTest { + @Test + @DisplayName("toString") + void toStringMethod() { + List bridgeStates = List.of(1, 0); + + Line line = Line.newInstance(bridgeStates); + + assertThat(line.toString()).isEqualTo("|----| |"); + } +} From 6ebb7299ba956d952bd8ead3e75a142d8f6f89cb Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 16:01:03 +0900 Subject: [PATCH 13/27] Add getHeigthOfLadder() in Input class --- src/main/java/ladder/controller/LadderGame.java | 1 + src/main/java/ladder/view/Input.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 0c27a95..f78bb50 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -9,5 +9,6 @@ public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); + } } diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 39be917..cbc35bd 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -11,4 +11,11 @@ public static UsersNameReader getUsersName() { return UsersNameReader.newInstace(scanner.nextLine()); } + + public static int getHeightOfLadder() { + System.out.println("최대 사다리 높이는 몇 개 인가요?"); + Scanner scanner = new Scanner(System.in); + + return scanner.nextInt(); + } } From c8e297c9a30e762651983a461622512b989a1fb6 Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 16:16:40 +0900 Subject: [PATCH 14/27] Modify Line constructor parameter --- src/main/java/ladder/domain/Line.java | 14 +++++++------- src/test/java/ladder/LineTest.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index 184ba67..ee0e451 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -3,13 +3,13 @@ import java.util.List; public class Line { - private final List bridgeStates; + private final List bridgeStates; - public static Line newInstance(List bridgeStates) { + public static Line newInstance(List bridgeStates) { return new Line(bridgeStates); } - public Line(List bridgeStates) { + public Line(List bridgeStates) { this.bridgeStates = bridgeStates; } @@ -17,7 +17,7 @@ public Line(List bridgeStates) { public String toString() { StringBuilder result = new StringBuilder(); - for (int state : bridgeStates) { + for (Boolean state : bridgeStates) { appendColumn(result); appendBridge(result, state); } @@ -30,12 +30,12 @@ private void appendColumn(StringBuilder result) { result.append("|"); } - private void appendBridge(StringBuilder result, int state) { - if (state == 1) { + private void appendBridge(StringBuilder result, Boolean state) { + if (state) { result.append("----"); } - if (state == 0) { + if (!state) { result.append(" "); } } diff --git a/src/test/java/ladder/LineTest.java b/src/test/java/ladder/LineTest.java index b3fbb0a..e90562c 100644 --- a/src/test/java/ladder/LineTest.java +++ b/src/test/java/ladder/LineTest.java @@ -12,7 +12,7 @@ public class LineTest { @Test @DisplayName("toString") void toStringMethod() { - List bridgeStates = List.of(1, 0); + List bridgeStates = List.of(true, false); Line line = Line.newInstance(bridgeStates); From a9e2f360b31b8297b214c1cd6d3e58e50b24688f Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 16:34:46 +0900 Subject: [PATCH 15/27] Add BridgeGenerator class --- .../java/ladder/controller/LadderGame.java | 2 +- .../java/ladder/domain/BridgeGenerator.java | 29 +++++++++++++++++++ src/test/java/ladder/BridgeGeneratorTest.java | 23 +++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ladder/domain/BridgeGenerator.java create mode 100644 src/test/java/ladder/BridgeGeneratorTest.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index f78bb50..688d514 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -9,6 +9,6 @@ public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); - + int time = Input.getHeightOfLadder(); } } diff --git a/src/main/java/ladder/domain/BridgeGenerator.java b/src/main/java/ladder/domain/BridgeGenerator.java new file mode 100644 index 0000000..dc48096 --- /dev/null +++ b/src/main/java/ladder/domain/BridgeGenerator.java @@ -0,0 +1,29 @@ +package ladder.domain; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class BridgeGenerator { + private final int heigthOfLadder; + private final int numberOfUsers; + private final List bridgeStates = new ArrayList<>(); + + public BridgeGenerator(int numberOfUsers, int heightOfLadder) { + this.heigthOfLadder = heightOfLadder; + this.numberOfUsers = numberOfUsers; + } + + public static BridgeGenerator newInstance(int numberOfUsers, int heightOfLadder) { + return new BridgeGenerator(numberOfUsers, heightOfLadder); + } + + public void add(List states) { + Line line = Line.newInstance(states); + this.bridgeStates.add(line); + } + + public List getBridgeStates() { + return Collections.unmodifiableList(this.bridgeStates); + } +} diff --git a/src/test/java/ladder/BridgeGeneratorTest.java b/src/test/java/ladder/BridgeGeneratorTest.java new file mode 100644 index 0000000..34793c0 --- /dev/null +++ b/src/test/java/ladder/BridgeGeneratorTest.java @@ -0,0 +1,23 @@ +package ladder; + +import ladder.domain.BridgeGenerator; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BridgeGeneratorTest { + @Test + void add() { + int numberOfUsers = 4; + int heightOfLadder = 3; + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(numberOfUsers, heightOfLadder); + + bridgeGenerator.add(List.of(true, false, true, false)); + bridgeGenerator.add(List.of(true, false, false, true)); + bridgeGenerator.add(List.of(false, true, false, true)); + + assertThat(bridgeGenerator.getBridgeStates()).hasSize(3); + } +} From ce18bd71fa200d27680a13f62a8cf50e5e0a513e Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 16:46:26 +0900 Subject: [PATCH 16/27] Finish step2 --- src/main/java/ladder/controller/LadderGame.java | 14 ++++++++++++++ src/main/java/ladder/domain/Line.java | 6 +++--- src/main/java/ladder/view/Output.java | 12 ++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 688d514..1e1bce4 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,8 +1,12 @@ package ladder.controller; +import ladder.domain.BridgeGenerator; import ladder.domain.Users; import ladder.domain.UsersNameReader; import ladder.view.Input; +import ladder.view.Output; + +import java.util.List; public class LadderGame { public static void main(String[] args) { @@ -10,5 +14,15 @@ public static void main(String[] args) { Users users = usersNameReader.convertNamesToUsers(); int time = Input.getHeightOfLadder(); + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(users.getNumberOfUsers(), time); + + bridgeGenerator.add(List.of(true, false, true)); + bridgeGenerator.add(List.of(false, true, false)); + bridgeGenerator.add(List.of(true, false, false)); + bridgeGenerator.add(List.of(false, true, false)); + bridgeGenerator.add(List.of(true, false, true)); + + Output.showUserNames(users); + Output.showResult(bridgeGenerator.getBridgeStates()); } } diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index ee0e451..ff4a65b 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -23,7 +23,7 @@ public String toString() { } appendColumn(result); - return String.valueOf(result); + return " " + String.valueOf(result); } private void appendColumn(StringBuilder result) { @@ -32,11 +32,11 @@ private void appendColumn(StringBuilder result) { private void appendBridge(StringBuilder result, Boolean state) { if (state) { - result.append("----"); + result.append("------"); } if (!state) { - result.append(" "); + result.append(" "); } } } diff --git a/src/main/java/ladder/view/Output.java b/src/main/java/ladder/view/Output.java index 6f691ff..0dfd715 100644 --- a/src/main/java/ladder/view/Output.java +++ b/src/main/java/ladder/view/Output.java @@ -1,4 +1,16 @@ package ladder.view; +import ladder.domain.Line; +import ladder.domain.Users; + +import java.util.List; + public class Output { + public static void showUserNames(Users users) { + System.out.println(users.toString()); + } + + public static void showResult(List bridgeStates) { + bridgeStates.forEach(v -> System.out.println(v.toString())); + } } From 097f9b794d93797d7a9787878bed6f736d749241 Mon Sep 17 00:00:00 2001 From: woomin Date: Fri, 3 Jul 2020 18:21:05 +0900 Subject: [PATCH 17/27] Add create() to create random bridges --- .../java/ladder/controller/LadderGame.java | 12 ++----- .../java/ladder/domain/BridgeGenerator.java | 34 +++++++++++++++++-- src/test/java/ladder/BridgeGeneratorTest.java | 4 +-- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 1e1bce4..832d8a6 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -6,21 +6,15 @@ import ladder.view.Input; import ladder.view.Output; -import java.util.List; - public class LadderGame { public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); - int time = Input.getHeightOfLadder(); - BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(users.getNumberOfUsers(), time); + BridgeGenerator bridgeGenerator = + BridgeGenerator.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); - bridgeGenerator.add(List.of(true, false, true)); - bridgeGenerator.add(List.of(false, true, false)); - bridgeGenerator.add(List.of(true, false, false)); - bridgeGenerator.add(List.of(false, true, false)); - bridgeGenerator.add(List.of(true, false, true)); + bridgeGenerator.create(); Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); diff --git a/src/main/java/ladder/domain/BridgeGenerator.java b/src/main/java/ladder/domain/BridgeGenerator.java index dc48096..bf31480 100644 --- a/src/main/java/ladder/domain/BridgeGenerator.java +++ b/src/main/java/ladder/domain/BridgeGenerator.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Random; public class BridgeGenerator { private final int heigthOfLadder; @@ -18,9 +19,36 @@ public static BridgeGenerator newInstance(int numberOfUsers, int heightOfLadder) return new BridgeGenerator(numberOfUsers, heightOfLadder); } - public void add(List states) { - Line line = Line.newInstance(states); - this.bridgeStates.add(line); + public void create() { + for (int i = 0; i < heigthOfLadder; i += 1) { + Line line = Line.newInstance(makeRandomStates()); + bridgeStates.add(line); + } + } + + private List makeRandomStates() { + Random random = new Random(); + + List states = new ArrayList<>(); + for (int i = 0; i < numberOfUsers - 1; i += 1) { + addState(random, states, i); + } + + return states; + } + + private void addState(Random random, List states, int index) { + if (states.size() == 0) { + states.add(random.nextInt() % 2 == 0); + return; + } + + if (!states.get(index - 1)) { + states.add(random.nextInt() % 2 == 0); + return; + } + + states.add(false); } public List getBridgeStates() { diff --git a/src/test/java/ladder/BridgeGeneratorTest.java b/src/test/java/ladder/BridgeGeneratorTest.java index 34793c0..7a06205 100644 --- a/src/test/java/ladder/BridgeGeneratorTest.java +++ b/src/test/java/ladder/BridgeGeneratorTest.java @@ -14,9 +14,7 @@ void add() { int heightOfLadder = 3; BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(numberOfUsers, heightOfLadder); - bridgeGenerator.add(List.of(true, false, true, false)); - bridgeGenerator.add(List.of(true, false, false, true)); - bridgeGenerator.add(List.of(false, true, false, true)); + bridgeGenerator.create(); assertThat(bridgeGenerator.getBridgeStates()).hasSize(3); } From 7b3d92d72d83a3b6587fae56b94c747337952e5d Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 11:42:44 +0900 Subject: [PATCH 18/27] Add getExecutionResult() method in Input class --- src/main/java/ladder/controller/LadderGame.java | 2 ++ src/main/java/ladder/view/Input.java | 7 +++++++ src/test/java/ladder/BridgeGeneratorTest.java | 2 -- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 832d8a6..4f68a2f 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -11,6 +11,8 @@ public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); + String executionResult = Input.getExecutionResult(); + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index cbc35bd..6e8cabc 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -12,6 +12,13 @@ public static UsersNameReader getUsersName() { return UsersNameReader.newInstace(scanner.nextLine()); } + public static String getExecutionResult() { + System.out.println("실행 결과를 입력하세요. 이름은 쉼표(,)로 구분합니다"); + Scanner scanner = new Scanner(System.in); + + return scanner.nextLine(); + } + public static int getHeightOfLadder() { System.out.println("최대 사다리 높이는 몇 개 인가요?"); Scanner scanner = new Scanner(System.in); diff --git a/src/test/java/ladder/BridgeGeneratorTest.java b/src/test/java/ladder/BridgeGeneratorTest.java index 7a06205..964e250 100644 --- a/src/test/java/ladder/BridgeGeneratorTest.java +++ b/src/test/java/ladder/BridgeGeneratorTest.java @@ -3,8 +3,6 @@ import ladder.domain.BridgeGenerator; import org.junit.jupiter.api.Test; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; public class BridgeGeneratorTest { From 6113e7d0155b9b3f41496af0f6357f9c857bd44b Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 12:04:31 +0900 Subject: [PATCH 19/27] Add ExpectingResultReader class --- .../java/ladder/controller/LadderGame.java | 2 +- .../ladder/domain/ExpectingResultReader.java | 21 +++++++++++++++++++ src/main/java/ladder/view/Input.java | 2 +- .../ladder/ExpectingResultReaderTest.java | 19 +++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ladder/domain/ExpectingResultReader.java create mode 100644 src/test/java/ladder/ExpectingResultReaderTest.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 4f68a2f..1404848 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -11,7 +11,7 @@ public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); - String executionResult = Input.getExecutionResult(); + String expectingResult = Input.getExectingResult(); BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); diff --git a/src/main/java/ladder/domain/ExpectingResultReader.java b/src/main/java/ladder/domain/ExpectingResultReader.java new file mode 100644 index 0000000..85c57c1 --- /dev/null +++ b/src/main/java/ladder/domain/ExpectingResultReader.java @@ -0,0 +1,21 @@ +package ladder.domain; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class ExpectingResultReader { + private final String result; + + public ExpectingResultReader(String result) { + this.result = result.replaceAll("꽝", "0"); + } + + public static ExpectingResultReader newInstance(String result) { + return new ExpectingResultReader(result); + } + + public List convertToResultData() { + return Arrays.stream(this.result.split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); + } +} diff --git a/src/main/java/ladder/view/Input.java b/src/main/java/ladder/view/Input.java index 6e8cabc..e53bbf5 100644 --- a/src/main/java/ladder/view/Input.java +++ b/src/main/java/ladder/view/Input.java @@ -12,7 +12,7 @@ public static UsersNameReader getUsersName() { return UsersNameReader.newInstace(scanner.nextLine()); } - public static String getExecutionResult() { + public static String getExectingResult() { System.out.println("실행 결과를 입력하세요. 이름은 쉼표(,)로 구분합니다"); Scanner scanner = new Scanner(System.in); diff --git a/src/test/java/ladder/ExpectingResultReaderTest.java b/src/test/java/ladder/ExpectingResultReaderTest.java new file mode 100644 index 0000000..38b0ce8 --- /dev/null +++ b/src/test/java/ladder/ExpectingResultReaderTest.java @@ -0,0 +1,19 @@ +package ladder; + +import ladder.domain.ExpectingResultReader; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ExpectingResultReaderTest { + @Test + void convertToResultData() { + ExpectingResultReader reader = ExpectingResultReader.newInstance("꽝,3000,꽝,5000"); + + List resultData = List.of(0, 3000, 0, 5000); + + assertThat(reader.convertToResultData()).isEqualTo(resultData); + } +} From e1c33daa8f469694fc855d367655c46dbeb83bce Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 14:06:03 +0900 Subject: [PATCH 20/27] Add WinningChecker class --- .../java/ladder/controller/LadderGame.java | 4 +- src/main/java/ladder/domain/Line.java | 8 ++++ src/main/java/ladder/domain/User.java | 4 ++ src/main/java/ladder/domain/Users.java | 4 ++ .../java/ladder/domain/WinningChecker.java | 46 +++++++++++++++++++ src/test/java/ladder/WinningCheckerTest.java | 28 +++++++++++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ladder/domain/WinningChecker.java create mode 100644 src/test/java/ladder/WinningCheckerTest.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 1404848..16f0fc4 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,6 +1,7 @@ package ladder.controller; import ladder.domain.BridgeGenerator; +import ladder.domain.ExpectingResultReader; import ladder.domain.Users; import ladder.domain.UsersNameReader; import ladder.view.Input; @@ -11,7 +12,8 @@ public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); Users users = usersNameReader.convertNamesToUsers(); - String expectingResult = Input.getExectingResult(); + ExpectingResultReader expectingResultReader = + ExpectingResultReader.newInstance(Input.getExectingResult()); BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index ff4a65b..4964de3 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -13,6 +13,14 @@ public Line(List bridgeStates) { this.bridgeStates = bridgeStates; } + public Boolean get(int index) { + return bridgeStates.get(index); + } + + public int size() { + return bridgeStates.size(); + } + @Override public String toString() { StringBuilder result = new StringBuilder(); diff --git a/src/main/java/ladder/domain/User.java b/src/main/java/ladder/domain/User.java index 176a350..9e4e54c 100644 --- a/src/main/java/ladder/domain/User.java +++ b/src/main/java/ladder/domain/User.java @@ -12,6 +12,10 @@ public static User newInstance(String name) { return new User(name); } + public String getName() { + return this.name; + } + @Override public String toString() { int blankCount = MAX_NUMBER_OF_CHARACTERS - name.length(); diff --git a/src/main/java/ladder/domain/Users.java b/src/main/java/ladder/domain/Users.java index 9a8915c..8f22c2e 100644 --- a/src/main/java/ladder/domain/Users.java +++ b/src/main/java/ladder/domain/Users.java @@ -13,6 +13,10 @@ public static Users newInstance(List users) { return new Users(users); } + public User get(int index) { + return this.users.get(index); + } + @Override public String toString() { StringBuilder result = new StringBuilder(); diff --git a/src/main/java/ladder/domain/WinningChecker.java b/src/main/java/ladder/domain/WinningChecker.java new file mode 100644 index 0000000..fe18bc2 --- /dev/null +++ b/src/main/java/ladder/domain/WinningChecker.java @@ -0,0 +1,46 @@ +package ladder.domain; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WinningChecker { + public static WinningChecker newInstance() { + return new WinningChecker(); + } + + public Map checkWinners(Users users, List resultData, List bridgeStates) { + int[] position = new int[] { 0, 1, 2 }; + for (Line state : bridgeStates) { + for (int j = 0; j < state.size(); j += 1) { + if (state.get(j)) { + swapPosition(position, j); + } + } + } + + Map resultPosition = new HashMap<>(); + for (int i = 0; i < position.length; i += 1) { + resultPosition.put(users.get(i).getName(), findIndex(position, i)); + } + + return resultPosition; + } + + private int findIndex(int[] arr, int value) { + for (int i = 0; i < arr.length; i += 1) { + if (arr[i] == value) { + return i; + } + } + + return -1; + } + + private void swapPosition(int[] position, int index) { + int tempt = position[index]; + position[index] = position[index + 1]; + position[index + 1] = tempt; + } +} diff --git a/src/test/java/ladder/WinningCheckerTest.java b/src/test/java/ladder/WinningCheckerTest.java new file mode 100644 index 0000000..53b1738 --- /dev/null +++ b/src/test/java/ladder/WinningCheckerTest.java @@ -0,0 +1,28 @@ +package ladder; + +import ladder.domain.*; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class WinningCheckerTest { + @Test + void checkWinners() { + WinningChecker winningChecker = WinningChecker.newInstance(); + + Users users = Users.newInstance(List.of( + User.newInstance("eric"), + User.newInstance("jimmy"), + User.newInstance("kim") + )); + ExpectingResultReader reader = ExpectingResultReader.newInstance("꽝,1000,2000"); + List expectingResultData = reader.convertToResultData(); + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(3, 3); + bridgeGenerator.create(); + List bridgeStates = bridgeGenerator.getBridgeStates(); + + assertThat(winningChecker.checkWinners(users, expectingResultData, bridgeStates)).hasSize(3); + } +} From 7c2eb30585ed0cda978fc78373b4e1a0565d81e8 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:05:40 +0900 Subject: [PATCH 21/27] Add checkWinners() in WinningChecker class --- .../java/ladder/controller/LadderGame.java | 9 +++-- .../ladder/domain/ExpectingResultReader.java | 7 ++++ .../java/ladder/domain/WinningChecker.java | 38 ++++++++++++------- src/main/java/ladder/view/Output.java | 10 +++++ 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 16f0fc4..295dd9a 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -1,9 +1,6 @@ package ladder.controller; -import ladder.domain.BridgeGenerator; -import ladder.domain.ExpectingResultReader; -import ladder.domain.Users; -import ladder.domain.UsersNameReader; +import ladder.domain.*; import ladder.view.Input; import ladder.view.Output; @@ -20,7 +17,11 @@ public static void main(String[] args) { bridgeGenerator.create(); + WinningChecker winningChecker = WinningChecker.newInstance(); + Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); + Output.showExpecting(expectingResultReader.toString()); + Output.showWinners(winningChecker.checkWinners(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates())); } } diff --git a/src/main/java/ladder/domain/ExpectingResultReader.java b/src/main/java/ladder/domain/ExpectingResultReader.java index 85c57c1..8fc5b17 100644 --- a/src/main/java/ladder/domain/ExpectingResultReader.java +++ b/src/main/java/ladder/domain/ExpectingResultReader.java @@ -18,4 +18,11 @@ public static ExpectingResultReader newInstance(String result) { public List convertToResultData() { return Arrays.stream(this.result.split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); } + + @Override + public String toString() { + String[] results = this.result.split(","); + + return String.join(" ", results); + } } diff --git a/src/main/java/ladder/domain/WinningChecker.java b/src/main/java/ladder/domain/WinningChecker.java index fe18bc2..022b7fa 100644 --- a/src/main/java/ladder/domain/WinningChecker.java +++ b/src/main/java/ladder/domain/WinningChecker.java @@ -1,6 +1,5 @@ package ladder.domain; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -11,23 +10,40 @@ public static WinningChecker newInstance() { } public Map checkWinners(Users users, List resultData, List bridgeStates) { - int[] position = new int[] { 0, 1, 2 }; + int[] position = new int[users.getNumberOfUsers()]; + for (int i = 0; i < position.length; i += 1) { + position[i] = i; + } + for (Line state : bridgeStates) { - for (int j = 0; j < state.size(); j += 1) { - if (state.get(j)) { - swapPosition(position, j); - } - } + swapPositionInLine(position, state); } Map resultPosition = new HashMap<>(); for (int i = 0; i < position.length; i += 1) { - resultPosition.put(users.get(i).getName(), findIndex(position, i)); + String userName = users.get(i).getName(); + Integer winning = resultData.get(findIndex(position, i)); + + resultPosition.put(userName, winning); } return resultPosition; } + private void swapPositionInLine(int[] position, Line state) { + for (int j = 0; j < state.size(); j += 1) { + swapPosition(state, position, j); + } + } + + private void swapPosition(Line state, int[] position, int index) { + if (state.get(index)) { + int tempt = position[index]; + position[index] = position[index + 1]; + position[index + 1] = tempt; + } + } + private int findIndex(int[] arr, int value) { for (int i = 0; i < arr.length; i += 1) { if (arr[i] == value) { @@ -37,10 +53,4 @@ private int findIndex(int[] arr, int value) { return -1; } - - private void swapPosition(int[] position, int index) { - int tempt = position[index]; - position[index] = position[index + 1]; - position[index + 1] = tempt; - } } diff --git a/src/main/java/ladder/view/Output.java b/src/main/java/ladder/view/Output.java index 0dfd715..83e0f23 100644 --- a/src/main/java/ladder/view/Output.java +++ b/src/main/java/ladder/view/Output.java @@ -4,6 +4,7 @@ import ladder.domain.Users; import java.util.List; +import java.util.Map; public class Output { public static void showUserNames(Users users) { @@ -13,4 +14,13 @@ public static void showUserNames(Users users) { public static void showResult(List bridgeStates) { bridgeStates.forEach(v -> System.out.println(v.toString())); } + + public static void showWinners(Map winners) { + System.out.println(""); + winners.forEach((key, value) -> System.out.printf("%s: %d\n", key, value)); + } + + public static void showExpecting(String data) { + System.out.println(data); + } } From 67f68f21a1adf57d27e0e7bb7caf0958b08ce83a Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:23:51 +0900 Subject: [PATCH 22/27] Add PartsOfLadder class for DTO --- .../java/ladder/controller/LadderGame.java | 4 ++-- .../java/ladder/domain/BridgeGenerator.java | 16 ++++++------- .../java/ladder/domain/PartsOfLadder.java | 23 +++++++++++++++++++ .../java/ladder/domain/UsersNameReader.java | 10 +++++--- src/test/java/ladder/LineTest.java | 2 +- 5 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ladder/domain/PartsOfLadder.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 295dd9a..91769c7 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -12,8 +12,8 @@ public static void main(String[] args) { ExpectingResultReader expectingResultReader = ExpectingResultReader.newInstance(Input.getExectingResult()); - BridgeGenerator bridgeGenerator = - BridgeGenerator.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); + PartsOfLadder partsOfLadder = PartsOfLadder.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(partsOfLadder); bridgeGenerator.create(); diff --git a/src/main/java/ladder/domain/BridgeGenerator.java b/src/main/java/ladder/domain/BridgeGenerator.java index bf31480..0cee718 100644 --- a/src/main/java/ladder/domain/BridgeGenerator.java +++ b/src/main/java/ladder/domain/BridgeGenerator.java @@ -6,21 +6,19 @@ import java.util.Random; public class BridgeGenerator { - private final int heigthOfLadder; - private final int numberOfUsers; + private final PartsOfLadder ladderParts; private final List bridgeStates = new ArrayList<>(); - public BridgeGenerator(int numberOfUsers, int heightOfLadder) { - this.heigthOfLadder = heightOfLadder; - this.numberOfUsers = numberOfUsers; + public BridgeGenerator(PartsOfLadder ladderParts) { + this.ladderParts = ladderParts; } - public static BridgeGenerator newInstance(int numberOfUsers, int heightOfLadder) { - return new BridgeGenerator(numberOfUsers, heightOfLadder); + public static BridgeGenerator newInstance(PartsOfLadder ladderParts) { + return new BridgeGenerator(ladderParts); } public void create() { - for (int i = 0; i < heigthOfLadder; i += 1) { + for (int i = 0; i < ladderParts.getHeigthOfLadder(); i += 1) { Line line = Line.newInstance(makeRandomStates()); bridgeStates.add(line); } @@ -30,7 +28,7 @@ private List makeRandomStates() { Random random = new Random(); List states = new ArrayList<>(); - for (int i = 0; i < numberOfUsers - 1; i += 1) { + for (int i = 0; i < ladderParts.getNumberOfUsers() - 1; i += 1) { addState(random, states, i); } diff --git a/src/main/java/ladder/domain/PartsOfLadder.java b/src/main/java/ladder/domain/PartsOfLadder.java new file mode 100644 index 0000000..7c288d5 --- /dev/null +++ b/src/main/java/ladder/domain/PartsOfLadder.java @@ -0,0 +1,23 @@ +package ladder.domain; + +public class PartsOfLadder { + private final int numberOfUsers; + private final int heigthOfLadder; + + public PartsOfLadder(int numberOfUsers, int heigthOfLadder) { + this.numberOfUsers = numberOfUsers; + this.heigthOfLadder = heigthOfLadder; + } + + public static PartsOfLadder newInstance(int numberOfUsers, int heigthOfLadder) { + return new PartsOfLadder(numberOfUsers, heigthOfLadder); + } + + public int getNumberOfUsers() { + return this.numberOfUsers; + } + + public int getHeigthOfLadder() { + return this.heigthOfLadder; + } +} diff --git a/src/main/java/ladder/domain/UsersNameReader.java b/src/main/java/ladder/domain/UsersNameReader.java index edfc7bc..01311ea 100644 --- a/src/main/java/ladder/domain/UsersNameReader.java +++ b/src/main/java/ladder/domain/UsersNameReader.java @@ -24,12 +24,16 @@ private void validator(String names) { } for (String name : names.split(",")) { - if (name.length() > 5 || name.length() < 1) { - throw new IllegalArgumentException(); - } + checkNameLength(name); }; } + private void checkNameLength(String name) { + if (name.length() > 5 || name.length() < 1) { + throw new IllegalArgumentException(); + } + } + public Users convertNamesToUsers() { List userNames = Arrays.stream(this.names.split(",")) .map(User::newInstance) diff --git a/src/test/java/ladder/LineTest.java b/src/test/java/ladder/LineTest.java index e90562c..185a23b 100644 --- a/src/test/java/ladder/LineTest.java +++ b/src/test/java/ladder/LineTest.java @@ -16,6 +16,6 @@ void toStringMethod() { Line line = Line.newInstance(bridgeStates); - assertThat(line.toString()).isEqualTo("|----| |"); + assertThat(line.toString()).isEqualTo(" |------| |"); } } From 8bc0f12cd38c89557c62a601a0aa13f92bc406c2 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:32:58 +0900 Subject: [PATCH 23/27] Modify showWinners() method --- src/main/java/ladder/controller/LadderGame.java | 4 +++- src/main/java/ladder/domain/ExpectingResultReader.java | 4 ++-- src/main/java/ladder/view/Output.java | 7 ++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index 91769c7..c387e41 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -22,6 +22,8 @@ public static void main(String[] args) { Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); Output.showExpecting(expectingResultReader.toString()); - Output.showWinners(winningChecker.checkWinners(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates())); + Output.showWinners(winningChecker.checkWinners( + users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates() + )); } } diff --git a/src/main/java/ladder/domain/ExpectingResultReader.java b/src/main/java/ladder/domain/ExpectingResultReader.java index 8fc5b17..9c6dab3 100644 --- a/src/main/java/ladder/domain/ExpectingResultReader.java +++ b/src/main/java/ladder/domain/ExpectingResultReader.java @@ -8,7 +8,7 @@ public class ExpectingResultReader { private final String result; public ExpectingResultReader(String result) { - this.result = result.replaceAll("꽝", "0"); + this.result = result; } public static ExpectingResultReader newInstance(String result) { @@ -16,7 +16,7 @@ public static ExpectingResultReader newInstance(String result) { } public List convertToResultData() { - return Arrays.stream(this.result.split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); + return Arrays.stream(this.result.replaceAll("꽝", "0").split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList()); } @Override diff --git a/src/main/java/ladder/view/Output.java b/src/main/java/ladder/view/Output.java index 83e0f23..9c9b32e 100644 --- a/src/main/java/ladder/view/Output.java +++ b/src/main/java/ladder/view/Output.java @@ -17,7 +17,12 @@ public static void showResult(List bridgeStates) { public static void showWinners(Map winners) { System.out.println(""); - winners.forEach((key, value) -> System.out.printf("%s: %d\n", key, value)); + winners.forEach((key, value) -> { + if (value == 0) { + System.out.printf("%s: %s\n", key, "꽝"); + } + System.out.printf("%s: %d\n", key, value); + }); } public static void showExpecting(String data) { From c2c69ca17e701854d2cb47e000ec6900555d6469 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:37:13 +0900 Subject: [PATCH 24/27] Change a few lints in LadderGame-main --- src/main/java/ladder/controller/LadderGame.java | 12 ++++++------ src/main/java/ladder/domain/BridgeGenerator.java | 6 +++--- .../{PartsOfLadder.java => LadderMaterial.java} | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) rename src/main/java/ladder/domain/{PartsOfLadder.java => LadderMaterial.java} (59%) diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index c387e41..ecca7a2 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -4,6 +4,8 @@ import ladder.view.Input; import ladder.view.Output; +import java.util.Map; + public class LadderGame { public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); @@ -12,18 +14,16 @@ public static void main(String[] args) { ExpectingResultReader expectingResultReader = ExpectingResultReader.newInstance(Input.getExectingResult()); - PartsOfLadder partsOfLadder = PartsOfLadder.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); - BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(partsOfLadder); - + LadderMaterial ladderMaterial = LadderMaterial.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder()); + BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(ladderMaterial); bridgeGenerator.create(); WinningChecker winningChecker = WinningChecker.newInstance(); + Map winners = winningChecker.checkWinners(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates()); Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); Output.showExpecting(expectingResultReader.toString()); - Output.showWinners(winningChecker.checkWinners( - users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates() - )); + Output.showWinners(winners); } } diff --git a/src/main/java/ladder/domain/BridgeGenerator.java b/src/main/java/ladder/domain/BridgeGenerator.java index 0cee718..51833d4 100644 --- a/src/main/java/ladder/domain/BridgeGenerator.java +++ b/src/main/java/ladder/domain/BridgeGenerator.java @@ -6,14 +6,14 @@ import java.util.Random; public class BridgeGenerator { - private final PartsOfLadder ladderParts; + private final LadderMaterial ladderParts; private final List bridgeStates = new ArrayList<>(); - public BridgeGenerator(PartsOfLadder ladderParts) { + public BridgeGenerator(LadderMaterial ladderParts) { this.ladderParts = ladderParts; } - public static BridgeGenerator newInstance(PartsOfLadder ladderParts) { + public static BridgeGenerator newInstance(LadderMaterial ladderParts) { return new BridgeGenerator(ladderParts); } diff --git a/src/main/java/ladder/domain/PartsOfLadder.java b/src/main/java/ladder/domain/LadderMaterial.java similarity index 59% rename from src/main/java/ladder/domain/PartsOfLadder.java rename to src/main/java/ladder/domain/LadderMaterial.java index 7c288d5..ab6a8ec 100644 --- a/src/main/java/ladder/domain/PartsOfLadder.java +++ b/src/main/java/ladder/domain/LadderMaterial.java @@ -1,16 +1,16 @@ package ladder.domain; -public class PartsOfLadder { +public class LadderMaterial { private final int numberOfUsers; private final int heigthOfLadder; - public PartsOfLadder(int numberOfUsers, int heigthOfLadder) { + public LadderMaterial(int numberOfUsers, int heigthOfLadder) { this.numberOfUsers = numberOfUsers; this.heigthOfLadder = heigthOfLadder; } - public static PartsOfLadder newInstance(int numberOfUsers, int heigthOfLadder) { - return new PartsOfLadder(numberOfUsers, heigthOfLadder); + public static LadderMaterial newInstance(int numberOfUsers, int heigthOfLadder) { + return new LadderMaterial(numberOfUsers, heigthOfLadder); } public int getNumberOfUsers() { From ea6ea05d6d167be7a2f45a420e382342bfc453df Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:46:33 +0900 Subject: [PATCH 25/27] Add WinnerDTO class --- .../java/ladder/controller/LadderGame.java | 5 ++- src/main/java/ladder/domain/WinnerDTO.java | 31 +++++++++++++++++++ .../java/ladder/domain/WinningChecker.java | 6 +++- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ladder/domain/WinnerDTO.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index ecca7a2..e6e7a66 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -18,8 +18,11 @@ public static void main(String[] args) { BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(ladderMaterial); bridgeGenerator.create(); + WinnerDTO winnerDto = WinnerDTO.newInstance(); + winnerDto.add(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates()); + WinningChecker winningChecker = WinningChecker.newInstance(); - Map winners = winningChecker.checkWinners(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates()); + Map winners = winningChecker.checkWinners(winnerDto); Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); diff --git a/src/main/java/ladder/domain/WinnerDTO.java b/src/main/java/ladder/domain/WinnerDTO.java new file mode 100644 index 0000000..f093a10 --- /dev/null +++ b/src/main/java/ladder/domain/WinnerDTO.java @@ -0,0 +1,31 @@ +package ladder.domain; + +import java.util.List; + +public class WinnerDTO { + private Users users; + private List resultData; + private List bridgeStates; + + public static WinnerDTO newInstance() { + return new WinnerDTO(); + } + + public void add(Users users, List resultData, List bridgeStates) { + this.users = users; + this.resultData = resultData; + this.bridgeStates = bridgeStates; + } + + public Users getUsers() { + return this.users; + } + + public List getResultData() { + return this.resultData; + } + + public List getBridgeStates() { + return this.bridgeStates; + } +} diff --git a/src/main/java/ladder/domain/WinningChecker.java b/src/main/java/ladder/domain/WinningChecker.java index 022b7fa..370a0e1 100644 --- a/src/main/java/ladder/domain/WinningChecker.java +++ b/src/main/java/ladder/domain/WinningChecker.java @@ -9,7 +9,11 @@ public static WinningChecker newInstance() { return new WinningChecker(); } - public Map checkWinners(Users users, List resultData, List bridgeStates) { + public Map checkWinners(WinnerDTO dto) { + Users users = dto.getUsers(); + List resultData = dto.getResultData(); + List bridgeStates = dto.getBridgeStates(); + int[] position = new int[users.getNumberOfUsers()]; for (int i = 0; i < position.length; i += 1) { position[i] = i; From 6bd06e3ba4aa1654661c5929b6ef961116a353fd Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 16:53:52 +0900 Subject: [PATCH 26/27] Add Winners as first class collection --- .../java/ladder/controller/LadderGame.java | 4 +--- src/main/java/ladder/domain/Winners.java | 19 +++++++++++++++++++ src/main/java/ladder/view/Output.java | 6 +++--- 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 src/main/java/ladder/domain/Winners.java diff --git a/src/main/java/ladder/controller/LadderGame.java b/src/main/java/ladder/controller/LadderGame.java index e6e7a66..71c9f09 100644 --- a/src/main/java/ladder/controller/LadderGame.java +++ b/src/main/java/ladder/controller/LadderGame.java @@ -4,8 +4,6 @@ import ladder.view.Input; import ladder.view.Output; -import java.util.Map; - public class LadderGame { public static void main(String[] args) { UsersNameReader usersNameReader = Input.getUsersName(); @@ -22,7 +20,7 @@ public static void main(String[] args) { winnerDto.add(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates()); WinningChecker winningChecker = WinningChecker.newInstance(); - Map winners = winningChecker.checkWinners(winnerDto); + Winners winners = Winners.newInstance(winningChecker.checkWinners(winnerDto)); Output.showUserNames(users); Output.showResult(bridgeGenerator.getBridgeStates()); diff --git a/src/main/java/ladder/domain/Winners.java b/src/main/java/ladder/domain/Winners.java new file mode 100644 index 0000000..563af32 --- /dev/null +++ b/src/main/java/ladder/domain/Winners.java @@ -0,0 +1,19 @@ +package ladder.domain; + +import java.util.Map; + +public class Winners { + private final Map winners; + + public Winners(Map winners) { + this.winners = winners; + } + + public static Winners newInstance(Map winners) { + return new Winners(winners); + } + + public Map getWinners() { + return this.winners; + } +} diff --git a/src/main/java/ladder/view/Output.java b/src/main/java/ladder/view/Output.java index 9c9b32e..2696bb4 100644 --- a/src/main/java/ladder/view/Output.java +++ b/src/main/java/ladder/view/Output.java @@ -2,9 +2,9 @@ import ladder.domain.Line; import ladder.domain.Users; +import ladder.domain.Winners; import java.util.List; -import java.util.Map; public class Output { public static void showUserNames(Users users) { @@ -15,9 +15,9 @@ public static void showResult(List bridgeStates) { bridgeStates.forEach(v -> System.out.println(v.toString())); } - public static void showWinners(Map winners) { + public static void showWinners(Winners winners) { System.out.println(""); - winners.forEach((key, value) -> { + winners.getWinners().forEach((key, value) -> { if (value == 0) { System.out.printf("%s: %s\n", key, "꽝"); } From 0bd78b77b1bf94aa14ece2f92ef40ce3be864a30 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 6 Jul 2020 17:01:00 +0900 Subject: [PATCH 27/27] Separate checkWinners() by interests --- .../java/ladder/domain/WinningChecker.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/ladder/domain/WinningChecker.java b/src/main/java/ladder/domain/WinningChecker.java index 370a0e1..9f36e50 100644 --- a/src/main/java/ladder/domain/WinningChecker.java +++ b/src/main/java/ladder/domain/WinningChecker.java @@ -14,15 +14,13 @@ public Map checkWinners(WinnerDTO dto) { List resultData = dto.getResultData(); List bridgeStates = dto.getBridgeStates(); - int[] position = new int[users.getNumberOfUsers()]; - for (int i = 0; i < position.length; i += 1) { - position[i] = i; - } + int[] position = getIndexElementsArray(users); + executeLadderGameLogic(bridgeStates, position); - for (Line state : bridgeStates) { - swapPositionInLine(position, state); - } + return compilePosition(users, resultData, position); + } + private Map compilePosition(Users users, List resultData, int[] position) { Map resultPosition = new HashMap<>(); for (int i = 0; i < position.length; i += 1) { String userName = users.get(i).getName(); @@ -30,10 +28,23 @@ public Map checkWinners(WinnerDTO dto) { resultPosition.put(userName, winning); } - return resultPosition; } + private void executeLadderGameLogic(List bridgeStates, int[] position) { + for (Line state : bridgeStates) { + swapPositionInLine(position, state); + } + } + + private int[] getIndexElementsArray(Users users) { + int[] position = new int[users.getNumberOfUsers()]; + for (int i = 0; i < position.length; i += 1) { + position[i] = i; + } + return position; + } + private void swapPositionInLine(int[] position, Line state) { for (int j = 0; j < state.size(); j += 1) { swapPosition(state, position, j);