From cc9be7ace4eca60febcc65e9cb00b8c5439ca822 Mon Sep 17 00:00:00 2001 From: owljoa Date: Sat, 26 Oct 2024 22:46:32 +0900 Subject: [PATCH 01/12] =?UTF-8?q?refactor:=20stream=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nextstep/fp/Lambda.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/nextstep/fp/Lambda.java b/src/main/java/nextstep/fp/Lambda.java index bdc19b54fc..fdc1c3d542 100644 --- a/src/main/java/nextstep/fp/Lambda.java +++ b/src/main/java/nextstep/fp/Lambda.java @@ -39,12 +39,9 @@ public static int sumAllOverThree(List numbers) { } private static int sumAll(List numbers, SumCondition sumCondition) { - int total = 0; - for (int number : numbers) { - if (sumCondition.isSummable(number)) { - total += number; - } - } - return total; + return numbers.stream() + .filter(sumCondition::isSummable) + .mapToInt(Integer::valueOf) + .sum(); } } From dad07b72814948df75f8adb7d37f0cf9931b4757 Mon Sep 17 00:00:00 2001 From: owljoa Date: Sat, 26 Oct 2024 22:47:55 +0900 Subject: [PATCH 02/12] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=B3=80=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nextstep/optional/ComputerStore.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/nextstep/optional/ComputerStore.java b/src/main/java/nextstep/optional/ComputerStore.java index d1bb260a69..badd553232 100644 --- a/src/main/java/nextstep/optional/ComputerStore.java +++ b/src/main/java/nextstep/optional/ComputerStore.java @@ -23,8 +23,8 @@ public static String getVersion(Computer computer) { } public static String getVersionOptional(Computer computer) { - Optional computerOptional = Optional.ofNullable(computer); - return computerOptional.map(Computer::getSoundcard) + return Optional.ofNullable(computer) + .map(Computer::getSoundcard) .map(Soundcard::getUsb) .map(USB::getVersion) .orElse(UNKNOWN_VERSION); From 6d1be45c94738ce69b0a3ed3f684f26d32056e9a Mon Sep 17 00:00:00 2001 From: owljoa Date: Sat, 26 Oct 2024 22:48:36 +0900 Subject: [PATCH 03/12] =?UTF-8?q?refactor:=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=B6=95=EC=95=BD=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nextstep/optional/Users.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/nextstep/optional/Users.java b/src/main/java/nextstep/optional/Users.java index eed1cc0a01..63815d1c28 100644 --- a/src/main/java/nextstep/optional/Users.java +++ b/src/main/java/nextstep/optional/Users.java @@ -14,7 +14,7 @@ public class Users { User getUser(String name) { return users.stream() - .filter(u -> u.matchName(name)) + .filter(user -> user.matchName(name)) .findFirst() .orElse(DEFAULT_USER); } From 9f42c485386c49f98998c9bd9c408a4d3728edfe Mon Sep 17 00:00:00 2001 From: owljoa Date: Mon, 28 Oct 2024 19:22:49 +0900 Subject: [PATCH 04/12] =?UTF-8?q?docs:=202=EB=8B=A8=EA=B3=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b853592f59..f2e5951e0e 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,16 @@ * 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. ## 온라인 코드 리뷰 과정 -* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/nextstep-step/nextstep-docs/tree/master/codereview) \ No newline at end of file +* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/nextstep-step/nextstep-docs/tree/master/codereview) + +## 기능 목록 (TODO) + +### 2단계 - 사다리(생성) + +- [ ] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 +- [ ] 최대 사다리 높이 입력받기 +- [ ] 참여자 추가 - 이름은 최대 5글자까지 허용 +- [ ] 사다리 생성 - 세로선을 사람 수만큼 생성 +- [ ] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 +- [ ] 사다리 최대 높이만큼 무작위 가로선 생성 반복 +- [ ] 사다리 출력 - 사람 이름도 함께 출력 From e2ba93934c5a31e088efe021959a69c564ab36e4 Mon Sep 17 00:00:00 2001 From: owljoa Date: Mon, 28 Oct 2024 19:29:06 +0900 Subject: [PATCH 05/12] =?UTF-8?q?feat:=20=EC=B0=B8=EC=97=AC=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20=EC=9D=B4=EB=A6=84=EC=9D=80=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=205=EA=B8=80=EC=9E=90=EA=B9=8C=EC=A7=80=20?= =?UTF-8?q?=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/nextstep/ladder/User.java | 15 +++++++++++++++ src/test/java/nextstep/ladder/UserTest.java | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/java/nextstep/ladder/User.java create mode 100644 src/test/java/nextstep/ladder/UserTest.java diff --git a/README.md b/README.md index f2e5951e0e..e524818b0a 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - [ ] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 - [ ] 최대 사다리 높이 입력받기 -- [ ] 참여자 추가 - 이름은 최대 5글자까지 허용 +- [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [ ] 사다리 생성 - 세로선을 사람 수만큼 생성 - [ ] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 - [ ] 사다리 최대 높이만큼 무작위 가로선 생성 반복 diff --git a/src/main/java/nextstep/ladder/User.java b/src/main/java/nextstep/ladder/User.java new file mode 100644 index 0000000000..820fe59c93 --- /dev/null +++ b/src/main/java/nextstep/ladder/User.java @@ -0,0 +1,15 @@ +package nextstep.ladder; + +public class User { + private static final int MAX_NAME_LENGTH = 5; + + private final String name; + + public User(String name) { + if (name == null || name.length() > MAX_NAME_LENGTH) { + throw new IllegalArgumentException("참여자의 이름은 최대 5글자입니다"); + } + + this.name = name; + } +} diff --git a/src/test/java/nextstep/ladder/UserTest.java b/src/test/java/nextstep/ladder/UserTest.java new file mode 100644 index 0000000000..213ed78473 --- /dev/null +++ b/src/test/java/nextstep/ladder/UserTest.java @@ -0,0 +1,16 @@ +package nextstep.ladder; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +public class UserTest { + @Test + void 참여자의_이름은_최대_5글자() { + String name = "michael"; + + Assertions.assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new User(name)) + .withMessage("참여자의 이름은 최대 5글자입니다"); + + } +} From f52d3be6bd00c2e96a6e7db5e311599e6d071504 Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 20:27:17 +0900 Subject: [PATCH 06/12] =?UTF-8?q?feat:=20=EA=B0=80=EB=A1=9C=EC=84=A0?= =?UTF-8?q?=EC=9D=84=20=EB=AC=B4=EC=9E=91=EC=9C=84=EB=A1=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20-=20=EC=82=AC=EB=8B=A4=EB=A6=AC=EC=9D=98=20?= =?UTF-8?q?=EA=B0=80=EB=A1=9C=EC=84=A0=EC=9D=B4=20=EC=97=B0=EC=86=8D?= =?UTF-8?q?=EB=90=98=EB=A9=B4=20=EC=95=88=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/nextstep/ladder/HorizontalLine.java | 48 +++++++++++++++++++ .../nextstep/ladder/HorizontalLineTest.java | 22 +++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/main/java/nextstep/ladder/HorizontalLine.java create mode 100644 src/test/java/nextstep/ladder/HorizontalLineTest.java diff --git a/README.md b/README.md index e524818b0a..5b43779949 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,6 @@ - [ ] 최대 사다리 높이 입력받기 - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [ ] 사다리 생성 - 세로선을 사람 수만큼 생성 -- [ ] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 +- [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 - [ ] 사다리 최대 높이만큼 무작위 가로선 생성 반복 - [ ] 사다리 출력 - 사람 이름도 함께 출력 diff --git a/src/main/java/nextstep/ladder/HorizontalLine.java b/src/main/java/nextstep/ladder/HorizontalLine.java new file mode 100644 index 0000000000..27ebdaddeb --- /dev/null +++ b/src/main/java/nextstep/ladder/HorizontalLine.java @@ -0,0 +1,48 @@ +package nextstep.ladder; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class HorizontalLine { + private final List hasLineOrNotList; + + private HorizontalLine(List hasLineOrNotList) { + this.hasLineOrNotList = hasLineOrNotList; + } + + public HorizontalLine(int userCount) { + this(generateLines(userCount)); + } + + private static List generateLines(int userCount) { + Random random = new Random(); + List lines = new ArrayList<>(); + Boolean isPreviousLineExist = null; + int maxBooleanCountForLine = userCount - 1; + + while (lines.size() < maxBooleanCountForLine) { + boolean isLineExist = generateIsLineExist(random, isPreviousLineExist); + lines.add(isLineExist); + isPreviousLineExist = isLineExist; + } + + return lines; + } + + private static boolean generateIsLineExist(Random random, Boolean isPreviousLineExist) { + boolean isLineExist = random.nextBoolean(); + while (isPreviousLineExist != null && isLineExist == isPreviousLineExist) { + isLineExist = random.nextBoolean(); + } + return isLineExist; + } + + public int size() { + return hasLineOrNotList.size(); + } + + public Boolean hasLineOnIndex(int index) { + return hasLineOrNotList.get(index); + } +} diff --git a/src/test/java/nextstep/ladder/HorizontalLineTest.java b/src/test/java/nextstep/ladder/HorizontalLineTest.java new file mode 100644 index 0000000000..d35c660408 --- /dev/null +++ b/src/test/java/nextstep/ladder/HorizontalLineTest.java @@ -0,0 +1,22 @@ +package nextstep.ladder; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +public class HorizontalLineTest { + @Test + void 생성된_가로선은_연속되지_않아야_한다() { + // given + int userCount = 4; + + // when + HorizontalLine horizontalLine = new HorizontalLine(userCount); + + // then + for (int i = 0; i < horizontalLine.size() - 1; i++) { + boolean currentGeneratedLine = horizontalLine.hasLineOnIndex(i); + boolean nextGeneratedLine = horizontalLine.hasLineOnIndex(i + 1); + Assertions.assertThat(currentGeneratedLine).isNotEqualTo(nextGeneratedLine); + } + } +} From 51dac86ea4509038c3069a6bfff01024ac742172 Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 21:20:47 +0900 Subject: [PATCH 07/12] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20(=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 5b43779949..502c9ca3cd 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ - [ ] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 - [ ] 최대 사다리 높이 입력받기 - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 -- [ ] 사다리 생성 - 세로선을 사람 수만큼 생성 - [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 -- [ ] 사다리 최대 높이만큼 무작위 가로선 생성 반복 +- [ ] 사다리 생성 - 사다리 최대 높이만큼 무작위 가로선 생성 반복 - [ ] 사다리 출력 - 사람 이름도 함께 출력 From 99e0f94e0ff5a51a637db81f815a949fda808bd1 Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 21:20:58 +0900 Subject: [PATCH 08/12] =?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-=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=20=EB=86=92=EC=9D=B4=EB=A7=8C=ED=81=BC=20?= =?UTF-8?q?=EB=AC=B4=EC=9E=91=EC=9C=84=20=EA=B0=80=EB=A1=9C=EC=84=A0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B0=98=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/nextstep/ladder/Ladder.java | 30 +++++++++++++++++++ src/test/java/nextstep/ladder/LadderTest.java | 19 ++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/java/nextstep/ladder/Ladder.java create mode 100644 src/test/java/nextstep/ladder/LadderTest.java diff --git a/README.md b/README.md index 502c9ca3cd..bba3fe9729 100644 --- a/README.md +++ b/README.md @@ -16,5 +16,5 @@ - [ ] 최대 사다리 높이 입력받기 - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 -- [ ] 사다리 생성 - 사다리 최대 높이만큼 무작위 가로선 생성 반복 +- [x] 사다리 생성 - 사다리 최대 높이만큼 무작위 가로선 생성 반복 - [ ] 사다리 출력 - 사람 이름도 함께 출력 diff --git a/src/main/java/nextstep/ladder/Ladder.java b/src/main/java/nextstep/ladder/Ladder.java new file mode 100644 index 0000000000..dbf47ce02b --- /dev/null +++ b/src/main/java/nextstep/ladder/Ladder.java @@ -0,0 +1,30 @@ +package nextstep.ladder; + +import java.util.LinkedList; +import java.util.List; + +public class Ladder { + private final List horizontalLines; + + public Ladder(List horizontalLines) { + this.horizontalLines = horizontalLines; + } + + public Ladder(int userCount, int ladderMaxHeight) { + this(generate(userCount, ladderMaxHeight)); + } + + private static List generate(int userCount, int ladderMaxHeight) { + List horizontalLines = new LinkedList<>(); + + for (int i = 0; i < ladderMaxHeight; i++) { + horizontalLines.add(new HorizontalLine(userCount)); + } + + return horizontalLines; + } + + public int size() { + return horizontalLines.size(); + } +} diff --git a/src/test/java/nextstep/ladder/LadderTest.java b/src/test/java/nextstep/ladder/LadderTest.java new file mode 100644 index 0000000000..3700ae16af --- /dev/null +++ b/src/test/java/nextstep/ladder/LadderTest.java @@ -0,0 +1,19 @@ +package nextstep.ladder; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LadderTest { + + @Test + void 사다리_생성() { + int userCount = 4; + int ladderMaxHeight = 5; + + // when + Ladder ladder = new Ladder(userCount, ladderMaxHeight); + + // then + Assertions.assertThat(ladder.size()).isEqualTo(ladderMaxHeight); + } +} From 942bb04c82a7e348ac9f825662b5cf86cfa74182 Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 21:22:13 +0900 Subject: [PATCH 09/12] =?UTF-8?q?refactor:=20domain=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80=20-=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EA=B0=9D=EC=B2=B4=EB=93=A4=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nextstep/ladder/{ => domain}/HorizontalLine.java | 2 +- src/main/java/nextstep/ladder/{ => domain}/Ladder.java | 2 +- src/main/java/nextstep/ladder/{ => domain}/User.java | 2 +- .../java/nextstep/ladder/{ => domain}/HorizontalLineTest.java | 2 +- src/test/java/nextstep/ladder/{ => domain}/LadderTest.java | 2 +- src/test/java/nextstep/ladder/{ => domain}/UserTest.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/nextstep/ladder/{ => domain}/HorizontalLine.java (97%) rename src/main/java/nextstep/ladder/{ => domain}/Ladder.java (95%) rename src/main/java/nextstep/ladder/{ => domain}/User.java (91%) rename src/test/java/nextstep/ladder/{ => domain}/HorizontalLineTest.java (95%) rename src/test/java/nextstep/ladder/{ => domain}/LadderTest.java (92%) rename src/test/java/nextstep/ladder/{ => domain}/UserTest.java (92%) diff --git a/src/main/java/nextstep/ladder/HorizontalLine.java b/src/main/java/nextstep/ladder/domain/HorizontalLine.java similarity index 97% rename from src/main/java/nextstep/ladder/HorizontalLine.java rename to src/main/java/nextstep/ladder/domain/HorizontalLine.java index 27ebdaddeb..5f2dd4ac30 100644 --- a/src/main/java/nextstep/ladder/HorizontalLine.java +++ b/src/main/java/nextstep/ladder/domain/HorizontalLine.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/nextstep/ladder/Ladder.java b/src/main/java/nextstep/ladder/domain/Ladder.java similarity index 95% rename from src/main/java/nextstep/ladder/Ladder.java rename to src/main/java/nextstep/ladder/domain/Ladder.java index dbf47ce02b..1f43bc91dc 100644 --- a/src/main/java/nextstep/ladder/Ladder.java +++ b/src/main/java/nextstep/ladder/domain/Ladder.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; import java.util.LinkedList; import java.util.List; diff --git a/src/main/java/nextstep/ladder/User.java b/src/main/java/nextstep/ladder/domain/User.java similarity index 91% rename from src/main/java/nextstep/ladder/User.java rename to src/main/java/nextstep/ladder/domain/User.java index 820fe59c93..8483902664 100644 --- a/src/main/java/nextstep/ladder/User.java +++ b/src/main/java/nextstep/ladder/domain/User.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; public class User { private static final int MAX_NAME_LENGTH = 5; diff --git a/src/test/java/nextstep/ladder/HorizontalLineTest.java b/src/test/java/nextstep/ladder/domain/HorizontalLineTest.java similarity index 95% rename from src/test/java/nextstep/ladder/HorizontalLineTest.java rename to src/test/java/nextstep/ladder/domain/HorizontalLineTest.java index d35c660408..41b514585c 100644 --- a/src/test/java/nextstep/ladder/HorizontalLineTest.java +++ b/src/test/java/nextstep/ladder/domain/HorizontalLineTest.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/nextstep/ladder/LadderTest.java b/src/test/java/nextstep/ladder/domain/LadderTest.java similarity index 92% rename from src/test/java/nextstep/ladder/LadderTest.java rename to src/test/java/nextstep/ladder/domain/LadderTest.java index 3700ae16af..30c206b8af 100644 --- a/src/test/java/nextstep/ladder/LadderTest.java +++ b/src/test/java/nextstep/ladder/domain/LadderTest.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/nextstep/ladder/UserTest.java b/src/test/java/nextstep/ladder/domain/UserTest.java similarity index 92% rename from src/test/java/nextstep/ladder/UserTest.java rename to src/test/java/nextstep/ladder/domain/UserTest.java index 213ed78473..7f128c12de 100644 --- a/src/test/java/nextstep/ladder/UserTest.java +++ b/src/test/java/nextstep/ladder/domain/UserTest.java @@ -1,4 +1,4 @@ -package nextstep.ladder; +package nextstep.ladder.domain; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; From ddd864b7b44237739146194f6d5e483ff4236cfc Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 21:32:20 +0900 Subject: [PATCH 10/12] =?UTF-8?q?feat:=20=EC=B0=B8=EC=97=AC=ED=95=A0=20?= =?UTF-8?q?=EC=82=AC=EB=9E=8C=20=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EA=B8=B0=20-=20=EC=BD=A4=EB=A7=88(,)=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/nextstep/ladder/Main.java | 9 ++++++ .../ladder/controller/LadderController.java | 12 ++++++++ .../java/nextstep/ladder/view/InputView.java | 29 +++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/java/nextstep/ladder/Main.java create mode 100644 src/main/java/nextstep/ladder/controller/LadderController.java create mode 100644 src/main/java/nextstep/ladder/view/InputView.java diff --git a/README.md b/README.md index bba3fe9729..e190a8618b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ### 2단계 - 사다리(생성) -- [ ] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 +- [x] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 - [ ] 최대 사다리 높이 입력받기 - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 diff --git a/src/main/java/nextstep/ladder/Main.java b/src/main/java/nextstep/ladder/Main.java new file mode 100644 index 0000000000..65b30e0d07 --- /dev/null +++ b/src/main/java/nextstep/ladder/Main.java @@ -0,0 +1,9 @@ +package nextstep.ladder; + +import nextstep.ladder.controller.LadderController; + +public class Main { + public static void main(String[] args) { + LadderController.startLadderGame(); + } +} diff --git a/src/main/java/nextstep/ladder/controller/LadderController.java b/src/main/java/nextstep/ladder/controller/LadderController.java new file mode 100644 index 0000000000..e2d7657f34 --- /dev/null +++ b/src/main/java/nextstep/ladder/controller/LadderController.java @@ -0,0 +1,12 @@ +package nextstep.ladder.controller; + +import nextstep.ladder.domain.User; +import nextstep.ladder.view.InputView; + +import java.util.List; + +public class LadderController { + public static void startLadderGame() { + List users = InputView.inputUsers(); + } +} diff --git a/src/main/java/nextstep/ladder/view/InputView.java b/src/main/java/nextstep/ladder/view/InputView.java new file mode 100644 index 0000000000..b092bfcbb8 --- /dev/null +++ b/src/main/java/nextstep/ladder/view/InputView.java @@ -0,0 +1,29 @@ +package nextstep.ladder.view; + +import nextstep.ladder.domain.User; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class InputView { + private static final String DELIMITER = ","; + + public static List inputUsers() { + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + String userNames = getInputString(); + return parseUsers(userNames); + } + + private static List parseUsers(String userNames) { + return Arrays.stream(userNames.split(DELIMITER)) + .map(User::new) + .collect(Collectors.toList()); + } + + private static String getInputString() { + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } +} From d79d64daff0b31e89c835d4aeadad5971d12034a Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 21:35:20 +0900 Subject: [PATCH 11/12] =?UTF-8?q?feat:=20=EC=B5=9C=EB=8C=80=20=EC=82=AC?= =?UTF-8?q?=EB=8B=A4=EB=A6=AC=20=EB=86=92=EC=9D=B4=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../ladder/controller/LadderController.java | 1 + src/main/java/nextstep/ladder/view/InputView.java | 14 ++++++++++++++ src/main/java/nextstep/ladder/view/ResultView.java | 4 ++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/main/java/nextstep/ladder/view/ResultView.java diff --git a/README.md b/README.md index e190a8618b..fa13950725 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ### 2단계 - 사다리(생성) - [x] 참여할 사람 이름 입력받기 - 콤마(,)로 구분 -- [ ] 최대 사다리 높이 입력받기 +- [x] 최대 사다리 높이 입력받기 - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 - [x] 사다리 생성 - 사다리 최대 높이만큼 무작위 가로선 생성 반복 diff --git a/src/main/java/nextstep/ladder/controller/LadderController.java b/src/main/java/nextstep/ladder/controller/LadderController.java index e2d7657f34..c692c29af8 100644 --- a/src/main/java/nextstep/ladder/controller/LadderController.java +++ b/src/main/java/nextstep/ladder/controller/LadderController.java @@ -8,5 +8,6 @@ public class LadderController { public static void startLadderGame() { List users = InputView.inputUsers(); + int ladderMaxHeight = InputView.inputLadderMaxHeight(); } } diff --git a/src/main/java/nextstep/ladder/view/InputView.java b/src/main/java/nextstep/ladder/view/InputView.java index b092bfcbb8..ba483db12f 100644 --- a/src/main/java/nextstep/ladder/view/InputView.java +++ b/src/main/java/nextstep/ladder/view/InputView.java @@ -16,12 +16,26 @@ public static List inputUsers() { return parseUsers(userNames); } + public static int inputLadderMaxHeight() { + System.out.println("최대 사다리 높이는 몇 개인가요?"); + return getInputInteger(); + } + private static List parseUsers(String userNames) { return Arrays.stream(userNames.split(DELIMITER)) .map(User::new) .collect(Collectors.toList()); } + private static int getInputInteger() { + try { + Scanner scanner = new Scanner(System.in); + return scanner.nextInt(); + } catch (Exception e) { + return 0; + } + } + private static String getInputString() { Scanner scanner = new Scanner(System.in); return scanner.nextLine(); diff --git a/src/main/java/nextstep/ladder/view/ResultView.java b/src/main/java/nextstep/ladder/view/ResultView.java new file mode 100644 index 0000000000..84b0063db8 --- /dev/null +++ b/src/main/java/nextstep/ladder/view/ResultView.java @@ -0,0 +1,4 @@ +package nextstep.ladder.view; + +public class ResultView { +} From ed8223c83a419986c53015a4f21e5ae33d30fdb9 Mon Sep 17 00:00:00 2001 From: owljoa Date: Tue, 29 Oct 2024 22:05:12 +0900 Subject: [PATCH 12/12] =?UTF-8?q?feat:=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20-=20=EC=82=AC=EB=9E=8C=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EB=8F=84=20=ED=95=A8=EA=BB=98=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../ladder/controller/LadderController.java | 6 +++ .../java/nextstep/ladder/domain/Ladder.java | 4 ++ .../java/nextstep/ladder/domain/User.java | 4 ++ .../java/nextstep/ladder/view/ResultView.java | 37 +++++++++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fa13950725..fd202e3341 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ - [x] 참여자 추가 - 이름은 최대 5글자까지 허용 - [x] 가로선을 무작위로 생성 - 사다리의 가로선이 연속되면 안됨 - [x] 사다리 생성 - 사다리 최대 높이만큼 무작위 가로선 생성 반복 -- [ ] 사다리 출력 - 사람 이름도 함께 출력 +- [x] 사다리 출력 - 사람 이름도 함께 출력 diff --git a/src/main/java/nextstep/ladder/controller/LadderController.java b/src/main/java/nextstep/ladder/controller/LadderController.java index c692c29af8..1df464be55 100644 --- a/src/main/java/nextstep/ladder/controller/LadderController.java +++ b/src/main/java/nextstep/ladder/controller/LadderController.java @@ -1,7 +1,9 @@ package nextstep.ladder.controller; +import nextstep.ladder.domain.Ladder; import nextstep.ladder.domain.User; import nextstep.ladder.view.InputView; +import nextstep.ladder.view.ResultView; import java.util.List; @@ -9,5 +11,9 @@ public class LadderController { public static void startLadderGame() { List users = InputView.inputUsers(); int ladderMaxHeight = InputView.inputLadderMaxHeight(); + + Ladder ladder = new Ladder(users.size(), ladderMaxHeight); + + ResultView.printResult(ladder, users); } } diff --git a/src/main/java/nextstep/ladder/domain/Ladder.java b/src/main/java/nextstep/ladder/domain/Ladder.java index 1f43bc91dc..9ef1588b70 100644 --- a/src/main/java/nextstep/ladder/domain/Ladder.java +++ b/src/main/java/nextstep/ladder/domain/Ladder.java @@ -27,4 +27,8 @@ private static List generate(int userCount, int ladderMaxHeight) public int size() { return horizontalLines.size(); } + + public HorizontalLine getByIndex(int index) { + return horizontalLines.get(index); + } } diff --git a/src/main/java/nextstep/ladder/domain/User.java b/src/main/java/nextstep/ladder/domain/User.java index 8483902664..b94eb46b34 100644 --- a/src/main/java/nextstep/ladder/domain/User.java +++ b/src/main/java/nextstep/ladder/domain/User.java @@ -12,4 +12,8 @@ public User(String name) { this.name = name; } + + public String getName() { + return name; + } } diff --git a/src/main/java/nextstep/ladder/view/ResultView.java b/src/main/java/nextstep/ladder/view/ResultView.java index 84b0063db8..c9bc69ede5 100644 --- a/src/main/java/nextstep/ladder/view/ResultView.java +++ b/src/main/java/nextstep/ladder/view/ResultView.java @@ -1,4 +1,41 @@ package nextstep.ladder.view; +import nextstep.ladder.domain.HorizontalLine; +import nextstep.ladder.domain.Ladder; +import nextstep.ladder.domain.User; + +import java.util.List; + public class ResultView { + public static void printResult(Ladder ladder, List users) { + System.out.println("실행결과"); + users.forEach(user -> System.out.printf("%-6s", user.getName())); + System.out.println(); + printLadder(ladder); + } + + private static void printLadder(Ladder ladder) { + for (int index = 0; index < ladder.size(); index++) { + System.out.print("|"); + HorizontalLine horizontalLine = ladder.getByIndex(index); + printHorizontalLine(horizontalLine); + System.out.println(); + } + } + + private static void printHorizontalLine(HorizontalLine horizontalLine) { + for (int i = 0; i < horizontalLine.size(); i++) { + Boolean hasLineOnIndex = horizontalLine.hasLineOnIndex(i); + printHorizontalLineOrBlank(hasLineOnIndex); + System.out.print("|"); + } + } + + private static void printHorizontalLineOrBlank(boolean hasLine) { + if (hasLine) { + System.out.print("-----"); + return; + } + System.out.print(" "); + } }