From 680d7749476676d007271c5bde4bc9192e2834ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 13:56:27 +0900 Subject: [PATCH 01/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20@FunctionalInterface?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/BarGenerator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ladder/domain/BarGenerator.java b/src/main/java/ladder/domain/BarGenerator.java index edf646c426..76e97a5c55 100644 --- a/src/main/java/ladder/domain/BarGenerator.java +++ b/src/main/java/ladder/domain/BarGenerator.java @@ -1,5 +1,6 @@ package ladder.domain; +@FunctionalInterface public interface BarGenerator { boolean generateBar(); From e361f569e81f7b1ce3c078e095eac53fcea92751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 14:23:26 +0900 Subject: [PATCH 02/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20BarGeneratorImpl=20?= =?UTF-8?q?=EB=AA=85=EC=B9=AD=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/LineMaker.java | 2 +- .../domain/{BarGeneratorImpl.java => RandomBarGenerator.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/ladder/domain/{BarGeneratorImpl.java => RandomBarGenerator.java} (76%) diff --git a/src/main/java/ladder/domain/LineMaker.java b/src/main/java/ladder/domain/LineMaker.java index a55022a900..a406a67a4b 100644 --- a/src/main/java/ladder/domain/LineMaker.java +++ b/src/main/java/ladder/domain/LineMaker.java @@ -6,7 +6,7 @@ class LineMaker { private List randomBars = new ArrayList<>(); - private BarGeneratorImpl barGenerator = new BarGeneratorImpl(); + private RandomBarGenerator barGenerator = new RandomBarGenerator(); List generateBars(int numberOfPlayers) { randomBars.add(barGenerator.generateBar()); diff --git a/src/main/java/ladder/domain/BarGeneratorImpl.java b/src/main/java/ladder/domain/RandomBarGenerator.java similarity index 76% rename from src/main/java/ladder/domain/BarGeneratorImpl.java rename to src/main/java/ladder/domain/RandomBarGenerator.java index e08d7dc001..d6743ed5cb 100644 --- a/src/main/java/ladder/domain/BarGeneratorImpl.java +++ b/src/main/java/ladder/domain/RandomBarGenerator.java @@ -2,7 +2,7 @@ import java.util.Random; -public class BarGeneratorImpl implements BarGenerator{ +public class RandomBarGenerator implements BarGenerator{ private Random random = new Random(); From daa0bf80f2648dfd1800028817ecc527d1a8eb6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 14:33:29 +0900 Subject: [PATCH 03/29] =?UTF-8?q?[step3]=20feat=20:=20(=ED=94=BC=EB=93=9C?= =?UTF-8?q?=EB=B0=B1=20=EB=B0=98=EC=98=81)=20List=EC=9D=98=20Bool?= =?UTF-8?q?ean=EC=9D=84=20=ED=8F=AC=EC=9E=A5=ED=95=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20Bar=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Bar.java | 18 ++++++++++++++++++ src/test/java/ladder/domain/BarTest.java | 15 +++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/main/java/ladder/domain/Bar.java create mode 100644 src/test/java/ladder/domain/BarTest.java diff --git a/src/main/java/ladder/domain/Bar.java b/src/main/java/ladder/domain/Bar.java new file mode 100644 index 0000000000..108781fc79 --- /dev/null +++ b/src/main/java/ladder/domain/Bar.java @@ -0,0 +1,18 @@ +package ladder.domain; + +public class Bar { + + private final boolean bar; + + private Bar(boolean bar) { + this.bar = bar; + } + + public static Bar from(boolean doesBarExist) { + return new Bar(doesBarExist); + } + + public boolean isExist() { + return bar; + } +} diff --git a/src/test/java/ladder/domain/BarTest.java b/src/test/java/ladder/domain/BarTest.java new file mode 100644 index 0000000000..15e57c2008 --- /dev/null +++ b/src/test/java/ladder/domain/BarTest.java @@ -0,0 +1,15 @@ +package ladder.domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BarTest { + @Test + void 사다리_기둥_사이를_잇는_Bar를_생성한다() { + boolean doesBarExist = true; + Bar bar = Bar.from(doesBarExist); + + assertThat(bar.isExist()).isTrue(); + } +} From 9a7128ff4b601ca9936a1759bfe72a7b2d7d1899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 14:58:15 +0900 Subject: [PATCH 04/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20List?= =?UTF-8?q?=EC=9D=98=20Boolean=EC=9D=84=20Bar=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A1=9C=20=ED=8F=AC=EC=9E=A5=ED=95=B4=EC=84=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Line.java | 6 +++--- src/main/java/ladder/domain/LineMaker.java | 18 +++++++++--------- src/main/java/ladder/view/OutputView.java | 9 +++------ 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index 6eb68ae13d..dabbfd528b 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -6,9 +6,9 @@ public class Line { - private List bars; + private List bars; - private Line(List bars) { + private Line(List bars) { this.bars = new ArrayList<>(bars); } @@ -17,7 +17,7 @@ public static Line from(int numberOfPlayers) { return new Line(lineMaker.generateBars(numberOfPlayers)); } - public List getBars() { + public List getBars() { return Collections.unmodifiableList(bars); } } diff --git a/src/main/java/ladder/domain/LineMaker.java b/src/main/java/ladder/domain/LineMaker.java index a406a67a4b..3532c3fe48 100644 --- a/src/main/java/ladder/domain/LineMaker.java +++ b/src/main/java/ladder/domain/LineMaker.java @@ -5,28 +5,28 @@ class LineMaker { - private List randomBars = new ArrayList<>(); + private List randomBars = new ArrayList<>(); private RandomBarGenerator barGenerator = new RandomBarGenerator(); - List generateBars(int numberOfPlayers) { - randomBars.add(barGenerator.generateBar()); + List generateBars(int numberOfPlayers) { + randomBars.add(Bar.from(barGenerator.generateBar())); for (int i = 1; i < numberOfPlayers - 1; i++) { - boolean previousBarExist = randomBars.get(i - 1); - addNextBar(previousBarExist); + Bar previousBar = randomBars.get(i - 1); + addNextBar(previousBar); } addBlankBar(); return randomBars; } - private void addNextBar(boolean previousBarExist) { - if (previousBarExist) { + private void addNextBar(Bar previousBar) { + if (previousBar.isExist()) { addBlankBar(); return; } - randomBars.add(barGenerator.generateBar()); + randomBars.add(Bar.from(barGenerator.generateBar())); } private void addBlankBar() { - randomBars.add(false); + randomBars.add(Bar.from(Boolean.FALSE)); } } diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index c1a860c706..e96ca2fd4b 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -1,9 +1,6 @@ package ladder.view; -import ladder.domain.Ladder; -import ladder.domain.Line; -import ladder.domain.Player; -import ladder.domain.Players; +import ladder.domain.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -59,10 +56,10 @@ private static void printLine(Line line) { printEmptyLine(); } - private static String printBars(Boolean bar) { + private static String printBars(Bar bar) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(COLUMN); - if (bar) { + if (bar.isExist()) { return stringBuilder.append(BAR).toString(); } return stringBuilder.append(EMPTY_SPACE).toString(); From af9ca6729678c4b5749723a730ea9b2d6131274a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 15:06:02 +0900 Subject: [PATCH 05/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20OutputView=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=EC=97=90=20InputView=EC=97=90=EC=84=9C=20imp?= =?UTF-8?q?ort=EB=B0=9B=EC=9D=80=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=ED=95=B4=EC=84=9C=20=EB=91=90=20view?= =?UTF-8?q?=EB=A5=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/view/OutputView.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index e96ca2fd4b..25c0dc98de 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -5,8 +5,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import static ladder.view.InputView.printEmptyLine; - public class OutputView { private static final String MESSAGE_RESULT_TITLE = "실행결과"; private static final String EMPTY_SPACE = " "; @@ -27,6 +25,7 @@ private static void printResultTitle() { printEmptyLine(); } + private static void printPlayers(Players players) { players.getPlayers().stream() .map(OutputView::adjustNameLength) @@ -64,4 +63,8 @@ private static String printBars(Bar bar) { } return stringBuilder.append(EMPTY_SPACE).toString(); } + + private static void printEmptyLine() { + System.out.println(); + } } From 2ef101ac54c7b8a978c916be1452519b0d8b8916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 15:49:17 +0900 Subject: [PATCH 06/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20String.format()=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/view/OutputView.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 25c0dc98de..3df1db4bc3 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -25,10 +25,9 @@ private static void printResultTitle() { printEmptyLine(); } - private static void printPlayers(Players players) { players.getPlayers().stream() - .map(OutputView::adjustNameLength) + .map(player -> String.format(adjustNameLength(player), player.getName())) .forEach(System.out::print); printEmptyLine(); } From 6047e63de672d0388553d071c089271f5ecfceff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 16:12:38 +0900 Subject: [PATCH 07/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=A7=80=EB=84=A4?= =?UTF-8?q?=EB=A6=AD=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4(NameF?= =?UTF-8?q?ormatter)=EC=99=80=20=EA=B5=AC=ED=98=84=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4(PlayerNameFormatter)=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/view/NameFormatter.java | 6 +++++ src/main/java/ladder/view/OutputView.java | 20 ++++------------- .../java/ladder/view/PlayerNameFormatter.java | 22 +++++++++++++++++++ 3 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 src/main/java/ladder/view/NameFormatter.java create mode 100644 src/main/java/ladder/view/PlayerNameFormatter.java diff --git a/src/main/java/ladder/view/NameFormatter.java b/src/main/java/ladder/view/NameFormatter.java new file mode 100644 index 0000000000..8b3d69b4fe --- /dev/null +++ b/src/main/java/ladder/view/NameFormatter.java @@ -0,0 +1,6 @@ +package ladder.view; + +public interface NameFormatter { + + String nameFormat(T object); +} diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 3df1db4bc3..8bca125a93 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -2,16 +2,14 @@ import ladder.domain.*; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - public class OutputView { private static final String MESSAGE_RESULT_TITLE = "실행결과"; private static final String EMPTY_SPACE = " "; private static final String BAR = "-----"; private static final String COLUMN = "|"; - private static final String BLANK_TO_FILL_THE_NAME_SPACE = " "; - private static final int SPACE_FOR_NAME = 5; + + private static NameFormatter playerNameFormatter = new PlayerNameFormatter(); + public static void printResult(Players players, Ladder ladder) { printResultTitle(); @@ -27,21 +25,11 @@ private static void printResultTitle() { private static void printPlayers(Players players) { players.getPlayers().stream() - .map(player -> String.format(adjustNameLength(player), player.getName())) + .map(player -> String.format(playerNameFormatter.nameFormat(player), player.getName())) .forEach(System.out::print); printEmptyLine(); } - private static String adjustNameLength(Player player) { - String name = player.getName(); - int spaceForBlank = SPACE_FOR_NAME - name.length(); - - return IntStream.rangeClosed(0, spaceForBlank) - .mapToObj((integer) -> BLANK_TO_FILL_THE_NAME_SPACE) - .collect(Collectors.joining()) - .concat(name); - } - private static void printLadder(Ladder ladder) { ladder.getLines().forEach(OutputView::printLine); } diff --git a/src/main/java/ladder/view/PlayerNameFormatter.java b/src/main/java/ladder/view/PlayerNameFormatter.java new file mode 100644 index 0000000000..f11600b105 --- /dev/null +++ b/src/main/java/ladder/view/PlayerNameFormatter.java @@ -0,0 +1,22 @@ +package ladder.view; + +import ladder.domain.Player; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class PlayerNameFormatter implements NameFormatter{ + private static final int SPACE_FOR_NAME = 5; + private static final String BLANK_TO_FILL_THE_NAME_SPACE = " "; + + @Override + public String nameFormat(Player player) { + String name = player.getName(); + int spaceForBlank = SPACE_FOR_NAME - name.length(); + + return IntStream.rangeClosed(0, spaceForBlank) + .mapToObj((integer) -> BLANK_TO_FILL_THE_NAME_SPACE) + .collect(Collectors.joining()) + .concat(name); + } +} From f53137a03127ecd937971ff9f069ccab1dd813ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 16:40:36 +0900 Subject: [PATCH 08/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20LineMaker=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20generateBars()=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EC=9D=98=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=EB=93=A4=EC=9D=84=20=EB=AA=85=EC=8B=9C=EC=A0=81=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=93=A4=EC=9D=84=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=20=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/LineMaker.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/ladder/domain/LineMaker.java b/src/main/java/ladder/domain/LineMaker.java index 3532c3fe48..1e1f5483a1 100644 --- a/src/main/java/ladder/domain/LineMaker.java +++ b/src/main/java/ladder/domain/LineMaker.java @@ -9,24 +9,33 @@ class LineMaker { private RandomBarGenerator barGenerator = new RandomBarGenerator(); List generateBars(int numberOfPlayers) { + generateFirstBar(); + generateMiddleBars(numberOfPlayers); + generateLastBar(); + return randomBars; + } + + private void generateFirstBar() { randomBars.add(Bar.from(barGenerator.generateBar())); - for (int i = 1; i < numberOfPlayers - 1; i++) { + } + + private void generateMiddleBars(int numberOfPlayers) { + int spaceForMiddleBars = numberOfPlayers - 1; + for (int i = 1; i < spaceForMiddleBars; i++) { Bar previousBar = randomBars.get(i - 1); addNextBar(previousBar); } - addBlankBar(); - return randomBars; } private void addNextBar(Bar previousBar) { if (previousBar.isExist()) { - addBlankBar(); + generateLastBar(); return; } randomBars.add(Bar.from(barGenerator.generateBar())); } - private void addBlankBar() { + private void generateLastBar() { randomBars.add(Bar.from(Boolean.FALSE)); } } From cc0def730311df882df84dd157e60410d39f518b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 17:07:31 +0900 Subject: [PATCH 09/29] =?UTF-8?q?[step3]=20refactor=20:=20=EC=83=81?= =?UTF-8?q?=EC=88=98=20=EC=82=AC=EC=9A=A9=ED=95=B4=EC=84=9C=20=EC=9D=98?= =?UTF-8?q?=EB=AF=B8=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/LineMaker.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/domain/LineMaker.java b/src/main/java/ladder/domain/LineMaker.java index 1e1f5483a1..49fda6f032 100644 --- a/src/main/java/ladder/domain/LineMaker.java +++ b/src/main/java/ladder/domain/LineMaker.java @@ -4,6 +4,7 @@ import java.util.List; class LineMaker { + private static final int NUMBER_OF_FIRST_AND_LAST_BAR = 2; private List randomBars = new ArrayList<>(); private RandomBarGenerator barGenerator = new RandomBarGenerator(); @@ -20,9 +21,9 @@ private void generateFirstBar() { } private void generateMiddleBars(int numberOfPlayers) { - int spaceForMiddleBars = numberOfPlayers - 1; - for (int i = 1; i < spaceForMiddleBars; i++) { - Bar previousBar = randomBars.get(i - 1); + int spaceForMiddleBars = numberOfPlayers - NUMBER_OF_FIRST_AND_LAST_BAR; + for (int i = 0; i < spaceForMiddleBars; i++) { + Bar previousBar = randomBars.get(i); addNextBar(previousBar); } } From d459ab6746ba12d685aca7d03f09c480b9782189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 17:16:20 +0900 Subject: [PATCH 10/29] =?UTF-8?q?[step3]=20refactor=20:=20(=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81)=20generateBars()=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EA=B0=80=20=EC=9E=AC=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EB=90=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/LineMaker.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ladder/domain/LineMaker.java b/src/main/java/ladder/domain/LineMaker.java index 49fda6f032..f03ed11c79 100644 --- a/src/main/java/ladder/domain/LineMaker.java +++ b/src/main/java/ladder/domain/LineMaker.java @@ -6,10 +6,11 @@ class LineMaker { private static final int NUMBER_OF_FIRST_AND_LAST_BAR = 2; - private List randomBars = new ArrayList<>(); + private List randomBars; private RandomBarGenerator barGenerator = new RandomBarGenerator(); List generateBars(int numberOfPlayers) { + this.randomBars = new ArrayList<>(); generateFirstBar(); generateMiddleBars(numberOfPlayers); generateLastBar(); From f4cec19f857f3577f1b87cd97759b97bae77b561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 17:54:16 +0900 Subject: [PATCH 11/29] =?UTF-8?q?[step3]=20docs=20:=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 05654d74e8..c2b6b7d792 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## 구현 기능 목록 -- [x] 게임참가자(플레이어)의 이름을 입력받는다. +- [x] 1. 게임참가자(플레이어)의 이름을 입력받는다. - [x] 입력된 이름들이 플레이어가 된다. - [x] 플레이어의 이름은 (,)로 구분된다. - [x] 예외 처리: (,) 사이의 공백 제거 @@ -19,17 +19,26 @@ - [x] 예외 처리: 5글자가 넘거나 공백일 경우 - [x] 플레이어는 최소 2명 있어야 한다. (사다리의 다리는 최소 2개 이상이므로) - [x] 예외 처리: 플레이어가 2명 미만일 경우 -- [x] 사다리 높이를 입력받는다. +- [ ] 2. 실행 결과(당첨 상품)를 입력받는다. + - [ ] 예외 처리: 5글자가 넘거나 공백일 경우 + - [ ] 예외 처리: 플레이어의 수와 상품의 수가 같지 않을 경우 +- [x] 3. 사다리 높이를 입력받는다. - [x] 예외 처리: 사다리 높이가 1 미만일 경우 -- [x] 플레이어들을 출력한다. +- [x] 4. 플레이어들을 출력한다. - [x] 플레이어 이름 - [x] 플레이어 이름이 5글자 미만일 경우 부족한 만큼 왼쪽으로 공백을 채운다. -- [x] 사다리를 출력한다. +- [x] 5. 사다리를 출력한다. - [x] 사다리의 열을 생성한다. - [x] 각 열은 기둥과 바(bar)로 이루어져있다. - [x] 기둥 사이를 잇는 바를 랜덤으로 생성한다. - [x] 바는 연속될 수 없다. - [x] 바는 '-' 5개로 이루어져있다. - [x] 입력받은 높이만큼 열을 추가한다. - +- [ ] 6. 당첨 상품 들을 출력한다. +- [ ] 7. 사다리 게임을 실행한다. + - [ ] 사용자의 현재 위치를 기준으로 사다리를 타고, 최종 위치를 계산한다. + - [ ] 사용자의 현재 위치보다 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 + - [ ] 사용자의 현재 위치보다 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 +- [ ] 8. 결과를 보고싶은 플레이어(혹은 전체)를 묻고 입력받는다. +- [ ] 9. 해당 플레이어(혹은 전체)의 실행 결과를 반환한다. From 4b01e7c0c8f6264bd681fd131f739333e0c3ea2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:01:42 +0900 Subject: [PATCH 12/29] =?UTF-8?q?[step3]=20feat=20:=20Prize(=EC=83=81?= =?UTF-8?q?=ED=92=88;=20=EC=82=AC=EB=8B=A4=EB=A6=AC=EC=9D=98=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC)=20=EA=B0=9D=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Prize.java | 25 ++++++++++++++++++++++ src/test/java/ladder/domain/PrizeTest.java | 15 +++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/ladder/domain/Prize.java create mode 100644 src/test/java/ladder/domain/PrizeTest.java diff --git a/src/main/java/ladder/domain/Prize.java b/src/main/java/ladder/domain/Prize.java new file mode 100644 index 0000000000..4f9b1b0d1d --- /dev/null +++ b/src/main/java/ladder/domain/Prize.java @@ -0,0 +1,25 @@ +package ladder.domain; + +public class Prize { + + private final String prize; + + private Prize(String prize) { + this.prize = prize; + } + + public static Prize from(String inputPrize) { + return new Prize(inputPrize); + } + + public String getPrize() { + return prize; + } + + @Override + public String toString() { + return "Prize{" + + "prize='" + prize + '\'' + + '}'; + } +} diff --git a/src/test/java/ladder/domain/PrizeTest.java b/src/test/java/ladder/domain/PrizeTest.java new file mode 100644 index 0000000000..95ce5d43ca --- /dev/null +++ b/src/test/java/ladder/domain/PrizeTest.java @@ -0,0 +1,15 @@ +package ladder.domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PrizeTest { + @Test + void 각_사다리의_상품을_입력받아_생성한다() { + String testPrize = "꽝"; + Prize prize = Prize.from(testPrize); + + assertThat(prize.getPrize()).isEqualTo(testPrize); + } +} From 3b0ebe10b14058a87863d3063901fc3464c68f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:18:50 +0900 Subject: [PATCH 13/29] =?UTF-8?q?[step3]=20feat=20:=20Prize(=EC=83=81?= =?UTF-8?q?=ED=92=88)=20=EC=9D=B4=EB=A6=84=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Prize.java | 13 ++++++++++-- src/test/java/ladder/domain/PrizeTest.java | 23 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/domain/Prize.java b/src/main/java/ladder/domain/Prize.java index 4f9b1b0d1d..6936500d21 100644 --- a/src/main/java/ladder/domain/Prize.java +++ b/src/main/java/ladder/domain/Prize.java @@ -1,11 +1,20 @@ package ladder.domain; public class Prize { + static final String ALERT_EXCEED_LENGTH_OF_PRIZE_NAME = "상품은 다섯 글자 이내로 작성해주세요."; + static final String ALERT_MISSING_PRIZE = "상품명을 입력해주세요."; + private static final int MAXIMUM_LENGTH_OF_PRIZE_NAME = 5; private final String prize; - private Prize(String prize) { - this.prize = prize; + private Prize(String inputPrize) { + if (inputPrize.isEmpty()) { + throw new IllegalArgumentException(ALERT_MISSING_PRIZE); + } + if (inputPrize.length() > MAXIMUM_LENGTH_OF_PRIZE_NAME) { + throw new IllegalArgumentException(ALERT_EXCEED_LENGTH_OF_PRIZE_NAME); + } + this.prize = inputPrize; } public static Prize from(String inputPrize) { diff --git a/src/test/java/ladder/domain/PrizeTest.java b/src/test/java/ladder/domain/PrizeTest.java index 95ce5d43ca..f6eebd3492 100644 --- a/src/test/java/ladder/domain/PrizeTest.java +++ b/src/test/java/ladder/domain/PrizeTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; public class PrizeTest { @Test @@ -12,4 +13,26 @@ public class PrizeTest { assertThat(prize.getPrize()).isEqualTo(testPrize); } + + @Test + void 상품이름이_공백이면_예외가_발생한다() { + String emptyPrize = ""; + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> { + Prize.from(emptyPrize); + }).withMessage(Prize.ALERT_MISSING_PRIZE); + } + + @Test + void 상품이름이_다섯글자_이상이면_예외가_발생한다() { + String lengthExceedPrizeName = "길이 제한을 초과하는 상품이름"; + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> { + Prize.from(lengthExceedPrizeName); + }).withMessage(Prize.ALERT_EXCEED_LENGTH_OF_PRIZE_NAME); + } + + } From 2c6b1ac9ec7bae59281e2818925582067e5b6bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:28:45 +0900 Subject: [PATCH 14/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=83=81=ED=92=88?= =?UTF-8?q?=EB=93=A4(Prizes)=20=EA=B0=9D=EC=B2=B4=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Prizes.java | 33 +++++++++++++++++++++ src/test/java/ladder/domain/PrizesTest.java | 28 +++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/ladder/domain/Prizes.java create mode 100644 src/test/java/ladder/domain/PrizesTest.java diff --git a/src/main/java/ladder/domain/Prizes.java b/src/main/java/ladder/domain/Prizes.java new file mode 100644 index 0000000000..2e038e8d65 --- /dev/null +++ b/src/main/java/ladder/domain/Prizes.java @@ -0,0 +1,33 @@ +package ladder.domain; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class Prizes { + static final String ALERT_INVALID_NUMBER_OF_PRIZES = "상품의 수는 참여자 수와 같아야 합니다."; + private static final String PRIZE_SEPARATOR = ","; + + private final List prizes; + + private Prizes(List prizes, int numberOfPlayers) { + if (prizes.size() != numberOfPlayers) { + throw new IllegalArgumentException(ALERT_INVALID_NUMBER_OF_PRIZES); + } + this.prizes = new ArrayList<>(prizes); + } + + public static Prizes from(String inputPrizes, int numberOfPlayers) { + return new Prizes(Arrays + .stream(inputPrizes.split(PRIZE_SEPARATOR)) + .map(String::trim) + .map(Prize::from) + .collect(Collectors.toList()), numberOfPlayers); + } + + public List getPrizes() { + return Collections.unmodifiableList(prizes); + } +} diff --git a/src/test/java/ladder/domain/PrizesTest.java b/src/test/java/ladder/domain/PrizesTest.java new file mode 100644 index 0000000000..6635ab5f59 --- /dev/null +++ b/src/test/java/ladder/domain/PrizesTest.java @@ -0,0 +1,28 @@ +package ladder.domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +public class PrizesTest { + @Test + void 입력된_각_사다리의_결과들로_Results를_생성한다() { + int numberOfPlayers = 4; + String inputPrizes = "꽝,5000,꽝,5000"; + Prizes prizes = Prizes.from(inputPrizes, numberOfPlayers); + + assertThat(prizes.getPrizes().size()).isEqualTo(numberOfPlayers); + } + + @Test + void 플레이어_수와_결과의_수가_같지_않으면_예외가_발생한다() { + int numberOfPlayers = 4; + String inputResults = "꽝,꽝,꽝,꽝,당첨"; + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> { + Prizes.from(inputResults, numberOfPlayers); + }).withMessage(Prizes.ALERT_INVALID_NUMBER_OF_PRIZES); + } +} From ae7057d35a09889aed1596edd118bd0a7cfb6893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:31:58 +0900 Subject: [PATCH 15/29] =?UTF-8?q?[step3]=20refactor=20:=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Prize.java | 16 ++++++++++------ src/main/java/ladder/domain/Prizes.java | 12 ++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/ladder/domain/Prize.java b/src/main/java/ladder/domain/Prize.java index 6936500d21..75b9c88ea1 100644 --- a/src/main/java/ladder/domain/Prize.java +++ b/src/main/java/ladder/domain/Prize.java @@ -8,20 +8,24 @@ public class Prize { private final String prize; private Prize(String inputPrize) { + validationPrize(inputPrize); + this.prize = inputPrize; + } + + public static Prize from(String inputPrize) { + return new Prize(inputPrize); + } + + private void validationPrize(String inputPrize) { if (inputPrize.isEmpty()) { throw new IllegalArgumentException(ALERT_MISSING_PRIZE); } if (inputPrize.length() > MAXIMUM_LENGTH_OF_PRIZE_NAME) { throw new IllegalArgumentException(ALERT_EXCEED_LENGTH_OF_PRIZE_NAME); } - this.prize = inputPrize; - } - - public static Prize from(String inputPrize) { - return new Prize(inputPrize); } - public String getPrize() { + String getPrize() { return prize; } diff --git a/src/main/java/ladder/domain/Prizes.java b/src/main/java/ladder/domain/Prizes.java index 2e038e8d65..dead85fc87 100644 --- a/src/main/java/ladder/domain/Prizes.java +++ b/src/main/java/ladder/domain/Prizes.java @@ -13,9 +13,7 @@ public class Prizes { private final List prizes; private Prizes(List prizes, int numberOfPlayers) { - if (prizes.size() != numberOfPlayers) { - throw new IllegalArgumentException(ALERT_INVALID_NUMBER_OF_PRIZES); - } + validationPrizes(prizes, numberOfPlayers); this.prizes = new ArrayList<>(prizes); } @@ -27,7 +25,13 @@ public static Prizes from(String inputPrizes, int numberOfPlayers) { .collect(Collectors.toList()), numberOfPlayers); } - public List getPrizes() { + private void validationPrizes(List prizes, int numberOfPlayers) { + if (prizes.size() != numberOfPlayers) { + throw new IllegalArgumentException(ALERT_INVALID_NUMBER_OF_PRIZES); + } + } + + List getPrizes() { return Collections.unmodifiableList(prizes); } } From 8365d36555b42310919f9df2db282896a9bcce2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:43:32 +0900 Subject: [PATCH 16/29] =?UTF-8?q?[step3]=20refactor=20:=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=8B=9C=EC=97=90=20=EC=83=88=EB=A1=9C=EC=9A=B4=20?= =?UTF-8?q?=EC=BB=AC=EB=A0=89=EC=85=98=EC=97=90=20=EB=8B=B4=EA=B8=B0=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Height.java | 12 ++++++++---- src/main/java/ladder/domain/Ladder.java | 3 ++- src/main/java/ladder/domain/Players.java | 13 +++++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/ladder/domain/Height.java b/src/main/java/ladder/domain/Height.java index e50c1d8420..ce819d20ab 100644 --- a/src/main/java/ladder/domain/Height.java +++ b/src/main/java/ladder/domain/Height.java @@ -7,9 +7,7 @@ public class Height { private final int height; private Height(int inputHeight) { - if (inputHeight < MINIMUM_LADDER_HEIGHT) { - throw new IllegalArgumentException(ALERT_MINIMUM_LADDER_HEIGHT); - } + validationHeight(inputHeight); this.height = inputHeight; } @@ -17,7 +15,13 @@ public static Height from(int inputHeight) { return new Height(inputHeight); } - public int getHeight() { + private void validationHeight(int inputHeight) { + if (inputHeight < MINIMUM_LADDER_HEIGHT) { + throw new IllegalArgumentException(ALERT_MINIMUM_LADDER_HEIGHT); + } + } + + int getHeight() { return height; } } diff --git a/src/main/java/ladder/domain/Ladder.java b/src/main/java/ladder/domain/Ladder.java index 12f4a23121..5437af1865 100644 --- a/src/main/java/ladder/domain/Ladder.java +++ b/src/main/java/ladder/domain/Ladder.java @@ -1,5 +1,6 @@ package ladder.domain; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -10,7 +11,7 @@ public class Ladder { private List lines; private Ladder(List lines) { - this.lines = lines; + this.lines = new ArrayList<>(lines); } public static Ladder from(Players players, Height height) { diff --git a/src/main/java/ladder/domain/Players.java b/src/main/java/ladder/domain/Players.java index 2e2ea84b2a..c0d8ae6d52 100644 --- a/src/main/java/ladder/domain/Players.java +++ b/src/main/java/ladder/domain/Players.java @@ -1,5 +1,6 @@ package ladder.domain; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -13,10 +14,8 @@ public class Players { private final List players; private Players(List players) { - if (players.size() < MINIMUM_NUMBER_OF_PLAYERS) { - throw new IllegalArgumentException(ALERT_SHORTAGE_OF_NUMBER_OF_PLAYERS); - } - this.players = players; + validationPlayers(players); + this.players = new ArrayList<>(players); } public static Players of(String inputNames) { @@ -26,6 +25,12 @@ public static Players of(String inputNames) { .collect(Collectors.toList())); } + private void validationPlayers(List players) { + if (players.size() < MINIMUM_NUMBER_OF_PLAYERS) { + throw new IllegalArgumentException(ALERT_SHORTAGE_OF_NUMBER_OF_PLAYERS); + } + } + public int numberOfPlayers() { return players.size(); } From a0f0ec7957ce3b2d977fb3b8c9835d6a0d192061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=A0=95=EC=88=98?= Date: Fri, 5 Jul 2019 18:57:25 +0900 Subject: [PATCH 17/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=82=AC=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EA=B2=8C=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=9E=91=EC=84=B1=EC=A4=91=20(=EB=AF=B8=EC=99=84?= =?UTF-8?q?=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 15 ++++++++++++--- src/main/java/ladder/domain/Ladder.java | 7 +++++++ src/main/java/ladder/domain/Line.java | 10 ++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index bea374a704..b5816fffcb 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -1,11 +1,12 @@ package ladder; -import ladder.domain.Height; -import ladder.domain.Ladder; -import ladder.domain.Players; +import ladder.domain.*; import ladder.view.InputView; import ladder.view.OutputView; +import java.util.HashMap; +import java.util.Map; + public class Application { public static void main(String[] args) { @@ -14,6 +15,14 @@ public static void main(String[] args) { Ladder ladder = Ladder.from(players, height); + Map resultMap = new HashMap<>(); + for (int i = 0; i < players.numberOfPlayers(); i++) { + Player player = players.getPlayers().get(i); + int finalPosition = ladder.goThroughLines(i);// i(position)에서 시작해서 사다리 타고 나서의 position + prize = prizes.get(finalPosition); // Prizes의 position위치의 Prize + resultMap.put(player, prize); + } + OutputView.printResult(players, ladder); } } diff --git a/src/main/java/ladder/domain/Ladder.java b/src/main/java/ladder/domain/Ladder.java index 5437af1865..190589cef4 100644 --- a/src/main/java/ladder/domain/Ladder.java +++ b/src/main/java/ladder/domain/Ladder.java @@ -24,4 +24,11 @@ public static Ladder from(Players players, Height height) { public List getLines() { return Collections.unmodifiableList(lines); } + + public int goThroughLines(int position) { + for (Line line : lines) { + position = line.travel(position); + } + return position; + } } diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index dabbfd528b..fabc4b4824 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -20,4 +20,14 @@ public static Line from(int numberOfPlayers) { public List getBars() { return Collections.unmodifiableList(bars); } + + public int travel(int position) { + if (bars.get(position).isExist()) { //사용자의 현재 위치보다 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 + return position + 1; + } + if (bars.get(position - 1).isExist()) { //사용자의 현재 위치보다 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 + return position - 1; + } + return position; + } } From a06e462f0b6edd89a43d697f7c45e21ee3d7e662 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 00:07:41 +0900 Subject: [PATCH 18/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EA=B0=80=EC=A7=80?= =?UTF-8?q?=EB=8A=94=20Position=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 4 ++-- src/main/java/ladder/domain/Position.java | 18 ++++++++++++++++++ src/test/java/ladder/domain/PositionTest.java | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ladder/domain/Position.java create mode 100644 src/test/java/ladder/domain/PositionTest.java diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index b5816fffcb..fc9a7695f5 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -19,8 +19,8 @@ public static void main(String[] args) { for (int i = 0; i < players.numberOfPlayers(); i++) { Player player = players.getPlayers().get(i); int finalPosition = ladder.goThroughLines(i);// i(position)에서 시작해서 사다리 타고 나서의 position - prize = prizes.get(finalPosition); // Prizes의 position위치의 Prize - resultMap.put(player, prize); +// prize = prizes.get(finalPosition); // Prizes의 position위치의 Prize +// resultMap.put(player, prize); } OutputView.printResult(players, ladder); diff --git a/src/main/java/ladder/domain/Position.java b/src/main/java/ladder/domain/Position.java new file mode 100644 index 0000000000..b1608a1a99 --- /dev/null +++ b/src/main/java/ladder/domain/Position.java @@ -0,0 +1,18 @@ +package ladder.domain; + +public class Position { + + private int position; + + private Position(int currentPosition) { + this.position = currentPosition; + } + + public static Position from(int currentPosition) { + return new Position(currentPosition); + } + + public boolean isSameWith(int targetPosition) { + return position == targetPosition; + } +} diff --git a/src/test/java/ladder/domain/PositionTest.java b/src/test/java/ladder/domain/PositionTest.java new file mode 100644 index 0000000000..59b3781ab9 --- /dev/null +++ b/src/test/java/ladder/domain/PositionTest.java @@ -0,0 +1,15 @@ +package ladder.domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PositionTest { + @Test + void 플레이어의_현재_위치를_생성한다() { + int currentPosition = 1; + Position position = Position.from(currentPosition); + + assertThat(position.isSameWith(1)).isTrue(); + } +} From 2fece835b36cd54d8fa6f4b58668c0f38c13f905 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 01:50:07 +0900 Subject: [PATCH 19/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=82=AC=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EC=9D=B4=EB=8F=99=20=EB=A1=9C=EC=A7=81=EC=97=90=20?= =?UTF-8?q?Position=20=EA=B0=9D=EC=B2=B4=20=EC=82=AC=EC=9A=A9=20=EB=B0=8F?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 2 +- src/main/java/ladder/domain/Ladder.java | 4 +- src/main/java/ladder/domain/Line.java | 13 ++--- src/main/java/ladder/domain/Position.java | 20 +++++++- src/test/java/ladder/domain/LineTest.java | 48 +++++++++++++++++++ src/test/java/ladder/domain/PositionTest.java | 22 +++++++-- 6 files changed, 96 insertions(+), 13 deletions(-) diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index fc9a7695f5..50017f5c3b 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -18,7 +18,7 @@ public static void main(String[] args) { Map resultMap = new HashMap<>(); for (int i = 0; i < players.numberOfPlayers(); i++) { Player player = players.getPlayers().get(i); - int finalPosition = ladder.goThroughLines(i);// i(position)에서 시작해서 사다리 타고 나서의 position + Position finalPosition = ladder.goThroughLines(Position.from(i));// i(position)에서 시작해서 사다리 타고 나서의 position // prize = prizes.get(finalPosition); // Prizes의 position위치의 Prize // resultMap.put(player, prize); } diff --git a/src/main/java/ladder/domain/Ladder.java b/src/main/java/ladder/domain/Ladder.java index 190589cef4..ca270d51e4 100644 --- a/src/main/java/ladder/domain/Ladder.java +++ b/src/main/java/ladder/domain/Ladder.java @@ -25,9 +25,9 @@ public List getLines() { return Collections.unmodifiableList(lines); } - public int goThroughLines(int position) { + public Position goThroughLines(Position position) { for (Line line : lines) { - position = line.travel(position); + position = line.travel(position); } return position; } diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index fabc4b4824..889baf0983 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -8,7 +8,7 @@ public class Line { private List bars; - private Line(List bars) { + Line(List bars) { this.bars = new ArrayList<>(bars); } @@ -21,13 +21,14 @@ public List getBars() { return Collections.unmodifiableList(bars); } - public int travel(int position) { - if (bars.get(position).isExist()) { //사용자의 현재 위치보다 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 - return position + 1; + Position travel(Position position) { + if (bars.get(position.getPosition()).isExist()) { //사용자의 현재 위치와 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 + return position.moveToRight(); } - if (bars.get(position - 1).isExist()) { //사용자의 현재 위치보다 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 - return position - 1; + if (position.getPosition() > 0 && bars.get(position.getLeftPosition()).isExist()) { //사용자의 현재 위치보다 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 + return position.moveToLeft(); } return position; } + } diff --git a/src/main/java/ladder/domain/Position.java b/src/main/java/ladder/domain/Position.java index b1608a1a99..0d71a9d83f 100644 --- a/src/main/java/ladder/domain/Position.java +++ b/src/main/java/ladder/domain/Position.java @@ -2,6 +2,8 @@ public class Position { + private static final int MOVE_ONE_STEP_TO_RIGHT = 1; + private static final int MOVE_ONE_STEP_TO_LEFT = -1; private int position; private Position(int currentPosition) { @@ -9,10 +11,26 @@ private Position(int currentPosition) { } public static Position from(int currentPosition) { - return new Position(currentPosition); + return new Position(currentPosition); } public boolean isSameWith(int targetPosition) { return position == targetPosition; } + + Position moveToRight() { + return from(this.position + MOVE_ONE_STEP_TO_RIGHT); + } + + Position moveToLeft() { + return from(this.position + MOVE_ONE_STEP_TO_LEFT); + } + + int getPosition() { + return position; + } + + int getLeftPosition() { + return this.position + MOVE_ONE_STEP_TO_LEFT; + } } diff --git a/src/test/java/ladder/domain/LineTest.java b/src/test/java/ladder/domain/LineTest.java index f81d1c83c1..752675811d 100644 --- a/src/test/java/ladder/domain/LineTest.java +++ b/src/test/java/ladder/domain/LineTest.java @@ -2,6 +2,9 @@ import org.junit.jupiter.api.Test; +import java.util.Arrays; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; public class LineTest { @@ -13,4 +16,49 @@ public class LineTest { assertThat(line.getBars().size()).isEqualTo(numberOfPlayers); } + + @Test + void 플레이어의_위치와_Bar의_위치가_같으면_플레이어의_위치를_1만큼_증가시킨다() { + Line line = new Line(Arrays.asList(Bar.from(false), Bar.from(true), Bar.from(false))); + + int currentPosition = 1; + Position playerPosition = Position.from(currentPosition); + + assertThat(line.travel(playerPosition).getPosition()) + .isEqualTo(currentPosition + 1); + } + + @Test + void 플레이어의_위치보다_Bar의_위치가_1만큼_작으면_플레이어의_위치를_1만큼_감소시킨다() { + Line line = new Line(Arrays.asList(Bar.from(false), Bar.from(true), Bar.from(false))); + + int currentPosition = 2; + Position playerPosition = Position.from(currentPosition); + + assertThat(line.travel(playerPosition).getPosition()) + .isEqualTo(currentPosition - 1); + } + + @Test + void 플레이어의_위치보다_Bar의_위치가_1만큼_크면_플레이어의_위치는_바뀌지_않는다() { + Line line = new Line(Arrays.asList(Bar.from(false), Bar.from(true), Bar.from(false))); + + int currentPosition = 0; + Position playerPosition = Position.from(currentPosition); + + assertThat(line.travel(playerPosition).getPosition()) + .isEqualTo(currentPosition); + } + + @Test + void 플레이어의_위치와_Bar의_위치가_2이상_차이나면_플레이어의_위치는_바뀌지_않는다() { + Line line = new Line(Arrays.asList(Bar.from(true), Bar.from(false), Bar.from(false))); + + int currentPosition = 2; + Position playerPosition = Position.from(currentPosition); + + assertThat(line.travel(playerPosition).getPosition()) + .isEqualTo(currentPosition); + } + } diff --git a/src/test/java/ladder/domain/PositionTest.java b/src/test/java/ladder/domain/PositionTest.java index 59b3781ab9..4db9158333 100644 --- a/src/test/java/ladder/domain/PositionTest.java +++ b/src/test/java/ladder/domain/PositionTest.java @@ -5,11 +5,27 @@ import static org.assertj.core.api.Assertions.assertThat; public class PositionTest { + + private final int currentPosition = 1; + private Position position = Position.from(currentPosition); + @Test void 플레이어의_현재_위치를_생성한다() { - int currentPosition = 1; - Position position = Position.from(currentPosition); - assertThat(position.isSameWith(1)).isTrue(); } + + @Test + void 위치를_오른쪽으로_1만큼_이동한다() { + assertThat(position.moveToRight().getPosition()).isEqualTo(currentPosition + 1); + } + + @Test + void 위치를_왼쪽으로_1만큼_이동한다() { + assertThat(position.moveToLeft().getPosition()).isEqualTo(currentPosition - 1); + } + + @Test + void 현재_위치보다_1만큼_작은_위치를_반환한다() { + assertThat(position.getLeftPosition()).isEqualTo(currentPosition - 1); + } } From 2176f907915493bb7e43d68d463519f7e1e2eb3c Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 02:14:24 +0900 Subject: [PATCH 20/29] =?UTF-8?q?[step3]=20refactor=20:=20Position?= =?UTF-8?q?=EC=9D=B4=200=EB=B3=B4=EB=8B=A4=20=EC=9E=91=EA=B1=B0=EB=82=98?= =?UTF-8?q?=20=EA=B0=99=EC=9D=80=20=EA=B2=BD=EC=9A=B0=20=EC=99=BC=EC=AA=BD?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EB=AA=BB=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Position.java | 13 +++++++++++++ src/test/java/ladder/domain/PositionTest.java | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/ladder/domain/Position.java b/src/main/java/ladder/domain/Position.java index 0d71a9d83f..f9bda7ff3a 100644 --- a/src/main/java/ladder/domain/Position.java +++ b/src/main/java/ladder/domain/Position.java @@ -4,6 +4,7 @@ public class Position { private static final int MOVE_ONE_STEP_TO_RIGHT = 1; private static final int MOVE_ONE_STEP_TO_LEFT = -1; + static final String ALERT_UNMOVABLE_TO_LEFT = "더 이상 왼쪽으로 이동할 수 없습니다."; private int position; private Position(int currentPosition) { @@ -23,6 +24,7 @@ Position moveToRight() { } Position moveToLeft() { + validationMovableToLeft(); return from(this.position + MOVE_ONE_STEP_TO_LEFT); } @@ -31,6 +33,17 @@ int getPosition() { } int getLeftPosition() { + validationMovableToLeft(); return this.position + MOVE_ONE_STEP_TO_LEFT; } + + private void validationMovableToLeft() { + if (unmovableToLeft()) { + throw new IllegalArgumentException(ALERT_UNMOVABLE_TO_LEFT); + } + } + + private boolean unmovableToLeft() { + return position <= 0; + } } diff --git a/src/test/java/ladder/domain/PositionTest.java b/src/test/java/ladder/domain/PositionTest.java index 4db9158333..868e7b4ef1 100644 --- a/src/test/java/ladder/domain/PositionTest.java +++ b/src/test/java/ladder/domain/PositionTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; public class PositionTest { @@ -28,4 +29,14 @@ public class PositionTest { void 현재_위치보다_1만큼_작은_위치를_반환한다() { assertThat(position.getLeftPosition()).isEqualTo(currentPosition - 1); } + + @Test + void 현재_위치가_0보다_크지_않으면_왼쪽으로_이동할_경우_예외가_발생한다() { + int position = 0; + Position testPosition = Position.from(position); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(testPosition::moveToLeft) + .withMessage(Position.ALERT_UNMOVABLE_TO_LEFT); + } } From e0e3115be635d5d903bf5cb1b8233934bc384172 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 13:41:11 +0900 Subject: [PATCH 21/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=8B=A4=ED=96=89?= =?UTF-8?q?=20=EA=B2=B0=EA=B3=BC=EB=93=A4(=EC=83=81=ED=92=88=EB=93=A4)?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EC=95=84=20Prizes=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 1 + src/main/java/ladder/domain/Line.java | 2 +- src/main/java/ladder/view/InputView.java | 7 +++++++ src/test/java/ladder/domain/LineTest.java | 1 - 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index 50017f5c3b..2a177dfc7e 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -11,6 +11,7 @@ public class Application { public static void main(String[] args) { Players players = Players.of(InputView.askPlayers()); + Prizes prizes = Prizes.from(InputView.askPrizes(), players.numberOfPlayers()); Height height = Height.from(InputView.askHeight()); Ladder ladder = Ladder.from(players, height); diff --git a/src/main/java/ladder/domain/Line.java b/src/main/java/ladder/domain/Line.java index 889baf0983..edb0f5dd9d 100644 --- a/src/main/java/ladder/domain/Line.java +++ b/src/main/java/ladder/domain/Line.java @@ -29,6 +29,6 @@ Position travel(Position position) { return position.moveToLeft(); } return position; - } + } //TODO: 이 로직을 Bar 객체로 위임하고 싶은데, Bar 2개를 사용해서 위치를 갱신하는 방식이라 이 곳에서 처리하는 상태 } diff --git a/src/main/java/ladder/view/InputView.java b/src/main/java/ladder/view/InputView.java index 9a9c1849dc..889ef445da 100644 --- a/src/main/java/ladder/view/InputView.java +++ b/src/main/java/ladder/view/InputView.java @@ -5,6 +5,7 @@ public class InputView { private static final String MESSAGE_FOR_INPUT_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; private static final String MESSAGE_FOR_MAXIMUM_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; + private static final String MESSAGE_FOR_PRIZES = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; private static Scanner scanner = new Scanner(System.in); @@ -13,6 +14,12 @@ public static String askPlayers() { return scanner.nextLine(); } + public static String askPrizes() { + printEmptyLine(); + System.out.println(MESSAGE_FOR_PRIZES); + return scanner.nextLine(); + } + public static int askHeight() { printEmptyLine(); System.out.println(MESSAGE_FOR_MAXIMUM_LADDER_HEIGHT); diff --git a/src/test/java/ladder/domain/LineTest.java b/src/test/java/ladder/domain/LineTest.java index 752675811d..029f5092cf 100644 --- a/src/test/java/ladder/domain/LineTest.java +++ b/src/test/java/ladder/domain/LineTest.java @@ -3,7 +3,6 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.List; import static org.assertj.core.api.Assertions.assertThat; From cf6667f4a29b6c22f9048cc25db6ef8b5f05d510 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 13:55:45 +0900 Subject: [PATCH 22/29] =?UTF-8?q?[step3]=20feat=20:=20PrizeNameFormatter?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=ED=95=B4=EC=84=9C=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EC=9D=80=20=EC=83=81=ED=92=88=EB=93=A4=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 3 ++- src/main/java/ladder/domain/Prize.java | 2 +- src/main/java/ladder/domain/Prizes.java | 2 +- src/main/java/ladder/view/NameFormatter.java | 2 ++ src/main/java/ladder/view/OutputView.java | 13 ++++++++++-- .../java/ladder/view/PlayerNameFormatter.java | 4 ++-- .../java/ladder/view/PrizeNameFormatter.java | 20 +++++++++++++++++++ 7 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 src/main/java/ladder/view/PrizeNameFormatter.java diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index 2a177dfc7e..0487f04cae 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -15,6 +15,7 @@ public static void main(String[] args) { Height height = Height.from(InputView.askHeight()); Ladder ladder = Ladder.from(players, height); + OutputView.drawLadder(players, ladder, prizes); Map resultMap = new HashMap<>(); for (int i = 0; i < players.numberOfPlayers(); i++) { @@ -24,6 +25,6 @@ public static void main(String[] args) { // resultMap.put(player, prize); } - OutputView.printResult(players, ladder); +// OutputView.printResult(players, ladder); } } diff --git a/src/main/java/ladder/domain/Prize.java b/src/main/java/ladder/domain/Prize.java index 75b9c88ea1..dce124be71 100644 --- a/src/main/java/ladder/domain/Prize.java +++ b/src/main/java/ladder/domain/Prize.java @@ -25,7 +25,7 @@ private void validationPrize(String inputPrize) { } } - String getPrize() { + public String getPrize() { return prize; } diff --git a/src/main/java/ladder/domain/Prizes.java b/src/main/java/ladder/domain/Prizes.java index dead85fc87..80fa052f2e 100644 --- a/src/main/java/ladder/domain/Prizes.java +++ b/src/main/java/ladder/domain/Prizes.java @@ -31,7 +31,7 @@ private void validationPrizes(List prizes, int numberOfPlayers) { } } - List getPrizes() { + public List getPrizes() { return Collections.unmodifiableList(prizes); } } diff --git a/src/main/java/ladder/view/NameFormatter.java b/src/main/java/ladder/view/NameFormatter.java index 8b3d69b4fe..e67a6e9da7 100644 --- a/src/main/java/ladder/view/NameFormatter.java +++ b/src/main/java/ladder/view/NameFormatter.java @@ -1,6 +1,8 @@ package ladder.view; public interface NameFormatter { + int SPACE_FOR_NAME = 5; + String BLANK_TO_FILL_THE_NAME_SPACE = " "; //TODO: 질문입니다. 인터페이스에 이런 상수들을 둬도 되는건지 궁금합니다. String nameFormat(T object); } diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 8bca125a93..64d949406f 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -9,12 +9,13 @@ public class OutputView { private static final String COLUMN = "|"; private static NameFormatter playerNameFormatter = new PlayerNameFormatter(); + private static NameFormatter prizeNameFormatter = new PrizeNameFormatter(); - - public static void printResult(Players players, Ladder ladder) { + public static void drawLadder(Players players, Ladder ladder, Prizes prizes) { printResultTitle(); printPlayers(players); printLadder(ladder); + printPrizes(prizes); } private static void printResultTitle() { @@ -30,6 +31,13 @@ private static void printPlayers(Players players) { printEmptyLine(); } + private static void printPrizes(Prizes prizes) { + prizes.getPrizes().stream() + .map(prize -> String.format(prizeNameFormatter.nameFormat(prize), prize.getPrize())) + .forEach(System.out::print); + printEmptyLine(); + } + private static void printLadder(Ladder ladder) { ladder.getLines().forEach(OutputView::printLine); } @@ -54,4 +62,5 @@ private static String printBars(Bar bar) { private static void printEmptyLine() { System.out.println(); } + } diff --git a/src/main/java/ladder/view/PlayerNameFormatter.java b/src/main/java/ladder/view/PlayerNameFormatter.java index f11600b105..761aff9ea1 100644 --- a/src/main/java/ladder/view/PlayerNameFormatter.java +++ b/src/main/java/ladder/view/PlayerNameFormatter.java @@ -6,8 +6,8 @@ import java.util.stream.IntStream; public class PlayerNameFormatter implements NameFormatter{ - private static final int SPACE_FOR_NAME = 5; - private static final String BLANK_TO_FILL_THE_NAME_SPACE = " "; +// private static final int SPACE_FOR_NAME = 5; +// private static final String BLANK_TO_FILL_THE_NAME_SPACE = " "; @Override public String nameFormat(Player player) { diff --git a/src/main/java/ladder/view/PrizeNameFormatter.java b/src/main/java/ladder/view/PrizeNameFormatter.java new file mode 100644 index 0000000000..eab0d3b1c3 --- /dev/null +++ b/src/main/java/ladder/view/PrizeNameFormatter.java @@ -0,0 +1,20 @@ +package ladder.view; + +import ladder.domain.Prize; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class PrizeNameFormatter implements NameFormatter { + + @Override + public String nameFormat(Prize prize) { + String name = prize.getPrize(); + int spaceForBlank = SPACE_FOR_NAME - name.length(); + + return IntStream.rangeClosed(0, spaceForBlank) + .mapToObj((integer) -> BLANK_TO_FILL_THE_NAME_SPACE) + .collect(Collectors.joining()) + .concat(name); + } +} From 0cafc8f32b67e788f5efad223421e3399d521f63 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 14:02:00 +0900 Subject: [PATCH 23/29] =?UTF-8?q?[step3]=20refactor=20:=20formatter?= =?UTF-8?q?=EB=93=A4=EC=9D=84=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=B4=EC=84=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/{view => formatter}/NameFormatter.java | 2 +- .../java/ladder/{view => formatter}/PlayerNameFormatter.java | 2 +- .../java/ladder/{view => formatter}/PrizeNameFormatter.java | 2 +- src/main/java/ladder/view/OutputView.java | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) rename src/main/java/ladder/{view => formatter}/NameFormatter.java (90%) rename src/main/java/ladder/{view => formatter}/PlayerNameFormatter.java (96%) rename src/main/java/ladder/{view => formatter}/PrizeNameFormatter.java (95%) diff --git a/src/main/java/ladder/view/NameFormatter.java b/src/main/java/ladder/formatter/NameFormatter.java similarity index 90% rename from src/main/java/ladder/view/NameFormatter.java rename to src/main/java/ladder/formatter/NameFormatter.java index e67a6e9da7..a735975736 100644 --- a/src/main/java/ladder/view/NameFormatter.java +++ b/src/main/java/ladder/formatter/NameFormatter.java @@ -1,4 +1,4 @@ -package ladder.view; +package ladder.formatter; public interface NameFormatter { int SPACE_FOR_NAME = 5; diff --git a/src/main/java/ladder/view/PlayerNameFormatter.java b/src/main/java/ladder/formatter/PlayerNameFormatter.java similarity index 96% rename from src/main/java/ladder/view/PlayerNameFormatter.java rename to src/main/java/ladder/formatter/PlayerNameFormatter.java index 761aff9ea1..ea8ed03115 100644 --- a/src/main/java/ladder/view/PlayerNameFormatter.java +++ b/src/main/java/ladder/formatter/PlayerNameFormatter.java @@ -1,4 +1,4 @@ -package ladder.view; +package ladder.formatter; import ladder.domain.Player; diff --git a/src/main/java/ladder/view/PrizeNameFormatter.java b/src/main/java/ladder/formatter/PrizeNameFormatter.java similarity index 95% rename from src/main/java/ladder/view/PrizeNameFormatter.java rename to src/main/java/ladder/formatter/PrizeNameFormatter.java index eab0d3b1c3..6d47681095 100644 --- a/src/main/java/ladder/view/PrizeNameFormatter.java +++ b/src/main/java/ladder/formatter/PrizeNameFormatter.java @@ -1,4 +1,4 @@ -package ladder.view; +package ladder.formatter; import ladder.domain.Prize; diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 64d949406f..13591ff9b4 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -1,6 +1,9 @@ package ladder.view; import ladder.domain.*; +import ladder.formatter.NameFormatter; +import ladder.formatter.PlayerNameFormatter; +import ladder.formatter.PrizeNameFormatter; public class OutputView { private static final String MESSAGE_RESULT_TITLE = "실행결과"; From 3babbd159a086a71d8baf98d597dcdaa5bdcdd46 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 14:27:27 +0900 Subject: [PATCH 24/29] =?UTF-8?q?[step3]=20feat=20:=20DataPrintFormatter?= =?UTF-8?q?=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=99=80=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=BD=94=EB=93=9C=20=EC=A4=91=EB=B3=B5=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ladder/formatter/DataPrintFormatter.java | 6 ++++++ .../ladder/formatter/PlayerNameFormatter.java | 2 -- .../formatter/PlayersPrintFormatter.java | 18 ++++++++++++++++++ .../ladder/formatter/PrizesPrintFormatter.java | 18 ++++++++++++++++++ src/main/java/ladder/view/OutputView.java | 18 +++++------------- 5 files changed, 47 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ladder/formatter/DataPrintFormatter.java create mode 100644 src/main/java/ladder/formatter/PlayersPrintFormatter.java create mode 100644 src/main/java/ladder/formatter/PrizesPrintFormatter.java diff --git a/src/main/java/ladder/formatter/DataPrintFormatter.java b/src/main/java/ladder/formatter/DataPrintFormatter.java new file mode 100644 index 0000000000..958ef8950a --- /dev/null +++ b/src/main/java/ladder/formatter/DataPrintFormatter.java @@ -0,0 +1,6 @@ +package ladder.formatter; + +public interface DataPrintFormatter { + + String dataPrintFormat(T data); +} diff --git a/src/main/java/ladder/formatter/PlayerNameFormatter.java b/src/main/java/ladder/formatter/PlayerNameFormatter.java index ea8ed03115..f7ab16ae1c 100644 --- a/src/main/java/ladder/formatter/PlayerNameFormatter.java +++ b/src/main/java/ladder/formatter/PlayerNameFormatter.java @@ -6,8 +6,6 @@ import java.util.stream.IntStream; public class PlayerNameFormatter implements NameFormatter{ -// private static final int SPACE_FOR_NAME = 5; -// private static final String BLANK_TO_FILL_THE_NAME_SPACE = " "; @Override public String nameFormat(Player player) { diff --git a/src/main/java/ladder/formatter/PlayersPrintFormatter.java b/src/main/java/ladder/formatter/PlayersPrintFormatter.java new file mode 100644 index 0000000000..3fc9a2c2e9 --- /dev/null +++ b/src/main/java/ladder/formatter/PlayersPrintFormatter.java @@ -0,0 +1,18 @@ +package ladder.formatter; + +import ladder.domain.Player; +import ladder.domain.Players; + +import java.util.stream.Collectors; + +public class PlayersPrintFormatter implements DataPrintFormatter { + + private final NameFormatter playerNameFormatter = new PlayerNameFormatter(); + + @Override + public String dataPrintFormat(Players players) { + return players.getPlayers().stream() + .map(player -> String.format(playerNameFormatter.nameFormat(player), player.getName())) + .collect(Collectors.joining()); + } +} diff --git a/src/main/java/ladder/formatter/PrizesPrintFormatter.java b/src/main/java/ladder/formatter/PrizesPrintFormatter.java new file mode 100644 index 0000000000..49fe3fdef7 --- /dev/null +++ b/src/main/java/ladder/formatter/PrizesPrintFormatter.java @@ -0,0 +1,18 @@ +package ladder.formatter; + +import ladder.domain.Prize; +import ladder.domain.Prizes; + +import java.util.stream.Collectors; + +public class PrizesPrintFormatter implements DataPrintFormatter { + + private final NameFormatter prizeNameFormatter = new PrizeNameFormatter(); + + @Override + public String dataPrintFormat(Prizes prizes) { + return prizes.getPrizes().stream() + .map(prize -> String.format(prizeNameFormatter.nameFormat(prize), prize.getPrize())) + .collect(Collectors.joining()); + } +} diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 13591ff9b4..7941dc468c 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -1,9 +1,7 @@ package ladder.view; import ladder.domain.*; -import ladder.formatter.NameFormatter; -import ladder.formatter.PlayerNameFormatter; -import ladder.formatter.PrizeNameFormatter; +import ladder.formatter.*; public class OutputView { private static final String MESSAGE_RESULT_TITLE = "실행결과"; @@ -11,8 +9,8 @@ public class OutputView { private static final String BAR = "-----"; private static final String COLUMN = "|"; - private static NameFormatter playerNameFormatter = new PlayerNameFormatter(); - private static NameFormatter prizeNameFormatter = new PrizeNameFormatter(); + private static DataPrintFormatter playersPrintFormatter = new PlayersPrintFormatter(); + private static DataPrintFormatter prizesPrintFormatter = new PrizesPrintFormatter(); public static void drawLadder(Players players, Ladder ladder, Prizes prizes) { printResultTitle(); @@ -28,17 +26,11 @@ private static void printResultTitle() { } private static void printPlayers(Players players) { - players.getPlayers().stream() - .map(player -> String.format(playerNameFormatter.nameFormat(player), player.getName())) - .forEach(System.out::print); - printEmptyLine(); + System.out.println(playersPrintFormatter.dataPrintFormat(players)); } private static void printPrizes(Prizes prizes) { - prizes.getPrizes().stream() - .map(prize -> String.format(prizeNameFormatter.nameFormat(prize), prize.getPrize())) - .forEach(System.out::print); - printEmptyLine(); + System.out.println(prizesPrintFormatter.dataPrintFormat(prizes)); } private static void printLadder(Ladder ladder) { From 86a344124eecff0070f7fe6f664937a248c32034 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 14:50:05 +0900 Subject: [PATCH 25/29] =?UTF-8?q?[step3]=20feat=20:=20=EC=82=AC=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=20=EA=B2=8C=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EA=B3=BC=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20GameResult?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 9 +----- src/main/java/ladder/domain/GameResult.java | 36 +++++++++++++++++++++ src/main/java/ladder/domain/Ladder.java | 10 +++--- src/main/java/ladder/view/OutputView.java | 2 +- 4 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ladder/domain/GameResult.java diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index 0487f04cae..3a4c39a394 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -17,14 +17,7 @@ public static void main(String[] args) { Ladder ladder = Ladder.from(players, height); OutputView.drawLadder(players, ladder, prizes); - Map resultMap = new HashMap<>(); - for (int i = 0; i < players.numberOfPlayers(); i++) { - Player player = players.getPlayers().get(i); - Position finalPosition = ladder.goThroughLines(Position.from(i));// i(position)에서 시작해서 사다리 타고 나서의 position -// prize = prizes.get(finalPosition); // Prizes의 position위치의 Prize -// resultMap.put(player, prize); - } + GameResult gameResult = GameResult.of(players, ladder, prizes); -// OutputView.printResult(players, ladder); } } diff --git a/src/main/java/ladder/domain/GameResult.java b/src/main/java/ladder/domain/GameResult.java new file mode 100644 index 0000000000..a201826f29 --- /dev/null +++ b/src/main/java/ladder/domain/GameResult.java @@ -0,0 +1,36 @@ +package ladder.domain; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class GameResult { + + private final Map resultMap; + + private GameResult(Map resultMap) { + this.resultMap = new HashMap<>(resultMap); + } + + public static GameResult of(Players players, Ladder ladder, Prizes prizes) { + return new GameResult(playGame(players, ladder, prizes)); + } + + private static Map playGame(Players players, Ladder ladder, Prizes prizes) { + Map resultMap = new HashMap<>(); + int numberOfPlayers = players.numberOfPlayers(); + + for (int i = 0; i < numberOfPlayers; i++) { + Player player = players.getPlayers().get(i); + Position finalPosition = ladder.goThroughLinesFrom(Position.from(i)); + Prize prize = prizes.getPrizes().get(finalPosition.getPosition()); + + resultMap.put(player, prize); + } + return resultMap; + } + + public Map getResultMap() { + return Collections.unmodifiableMap(resultMap); + } +} diff --git a/src/main/java/ladder/domain/Ladder.java b/src/main/java/ladder/domain/Ladder.java index ca270d51e4..4b50ed1564 100644 --- a/src/main/java/ladder/domain/Ladder.java +++ b/src/main/java/ladder/domain/Ladder.java @@ -21,14 +21,14 @@ public static Ladder from(Players players, Height height) { .collect(Collectors.toList())); } - public List getLines() { - return Collections.unmodifiableList(lines); - } - - public Position goThroughLines(Position position) { + Position goThroughLinesFrom(Position position) { for (Line line : lines) { position = line.travel(position); } return position; } + + public List getLines() { + return Collections.unmodifiableList(lines); + } } diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 7941dc468c..2a22e1bf60 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -4,7 +4,7 @@ import ladder.formatter.*; public class OutputView { - private static final String MESSAGE_RESULT_TITLE = "실행결과"; + private static final String MESSAGE_RESULT_TITLE = "사다리 결과"; private static final String EMPTY_SPACE = " "; private static final String BAR = "-----"; private static final String COLUMN = "|"; From 7586d1409e2573bc5b172ff1d4519660f6be9455 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 15:29:26 +0900 Subject: [PATCH 26/29] =?UTF-8?q?[step3]=20feat=20:=20=EA=B0=9C=EB=B3=84?= =?UTF-8?q?=20=EA=B2=B0=EA=B3=BC=20=EC=9E=85=EC=B6=9C=EB=A0=A5=20=EB=B0=8F?= =?UTF-8?q?=20=EA=B0=9C=EB=B3=84=20=EA=B2=B0=EA=B3=BC=20=EC=B0=BE=EB=8A=94?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 6 ++++++ src/main/java/ladder/domain/GameResult.java | 10 ++++++++++ src/main/java/ladder/view/InputView.java | 11 ++++++++++- src/main/java/ladder/view/OutputView.java | 5 +++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index 3a4c39a394..e089050d0a 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -18,6 +18,12 @@ public static void main(String[] args) { OutputView.drawLadder(players, ladder, prizes); GameResult gameResult = GameResult.of(players, ladder, prizes); + String wantedPlayer = InputView.askWhichResultWant(); +// if ("all".equals(wantedPlayer)) { +// OutputView.printAllResult(gameResult); +// } + String resultForWantedPlayer = gameResult.findResult(wantedPlayer); + OutputView.printSingleResult(resultForWantedPlayer); } } diff --git a/src/main/java/ladder/domain/GameResult.java b/src/main/java/ladder/domain/GameResult.java index a201826f29..57c187f963 100644 --- a/src/main/java/ladder/domain/GameResult.java +++ b/src/main/java/ladder/domain/GameResult.java @@ -5,6 +5,7 @@ import java.util.Map; public class GameResult { + private static final String ALERT_FOR_INVALID_PLAYER_NAME = "입력하신 플레이어는 존재하지 않습니다."; private final Map resultMap; @@ -30,6 +31,15 @@ private static Map playGame(Players players, Ladder ladder, Prize return resultMap; } + public String findResult(String wantedPlayer) { + Player playerWanted = resultMap.keySet().stream() + .filter(player -> player.getName().equals(wantedPlayer)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(ALERT_FOR_INVALID_PLAYER_NAME)); + + return resultMap.get(playerWanted).getPrize(); + } + public Map getResultMap() { return Collections.unmodifiableMap(resultMap); } diff --git a/src/main/java/ladder/view/InputView.java b/src/main/java/ladder/view/InputView.java index 889ef445da..75b536f103 100644 --- a/src/main/java/ladder/view/InputView.java +++ b/src/main/java/ladder/view/InputView.java @@ -6,6 +6,7 @@ public class InputView { private static final String MESSAGE_FOR_INPUT_PLAYER_NAMES = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; private static final String MESSAGE_FOR_MAXIMUM_LADDER_HEIGHT = "최대 사다리 높이는 몇 개인가요?"; private static final String MESSAGE_FOR_PRIZES = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; + private static final String MESSAGE_FOR_WANTED_RESULT = "결과를 보고 싶은 사람은?"; private static Scanner scanner = new Scanner(System.in); @@ -23,7 +24,15 @@ public static String askPrizes() { public static int askHeight() { printEmptyLine(); System.out.println(MESSAGE_FOR_MAXIMUM_LADDER_HEIGHT); - return scanner.nextInt(); + int height = scanner.nextInt(); + scanner.nextLine(); + return height; + } + + public static String askWhichResultWant() { + printEmptyLine(); + System.out.println(MESSAGE_FOR_WANTED_RESULT); + return scanner.nextLine(); } static void printEmptyLine() { diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 2a22e1bf60..9ce2bc43bd 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -8,6 +8,7 @@ public class OutputView { private static final String EMPTY_SPACE = " "; private static final String BAR = "-----"; private static final String COLUMN = "|"; + private static final String MESSAGE_FOR_SINGLE_RESULT = "실행 결과"; private static DataPrintFormatter playersPrintFormatter = new PlayersPrintFormatter(); private static DataPrintFormatter prizesPrintFormatter = new PrizesPrintFormatter(); @@ -58,4 +59,8 @@ private static void printEmptyLine() { System.out.println(); } + public static void printSingleResult(String resultForWantedPlayer) { + System.out.println(MESSAGE_FOR_SINGLE_RESULT); + System.out.println(resultForWantedPlayer); + } } From f345856eea0e94bed1adca66516e826d575df745 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 15:50:06 +0900 Subject: [PATCH 27/29] =?UTF-8?q?[step3]=20feat=20:=20=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=96=B4=20=EC=9D=B4=EB=A6=84=20=EB=B9=84=EA=B5=90=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80,=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Application.java | 10 +++++----- src/main/java/ladder/domain/GameResult.java | 2 +- src/main/java/ladder/domain/Player.java | 4 ++++ src/main/java/ladder/view/OutputView.java | 22 +++++++++++++++------ 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/main/java/ladder/Application.java b/src/main/java/ladder/Application.java index e089050d0a..a816702e61 100644 --- a/src/main/java/ladder/Application.java +++ b/src/main/java/ladder/Application.java @@ -19,11 +19,11 @@ public static void main(String[] args) { GameResult gameResult = GameResult.of(players, ladder, prizes); String wantedPlayer = InputView.askWhichResultWant(); -// if ("all".equals(wantedPlayer)) { -// OutputView.printAllResult(gameResult); -// } - String resultForWantedPlayer = gameResult.findResult(wantedPlayer); - OutputView.printSingleResult(resultForWantedPlayer); + if ("all".equals(wantedPlayer)) { + OutputView.printAllResult(gameResult); + return; + } + OutputView.printSingleResult(gameResult.findResult(wantedPlayer)); } } diff --git a/src/main/java/ladder/domain/GameResult.java b/src/main/java/ladder/domain/GameResult.java index 57c187f963..6d491a9910 100644 --- a/src/main/java/ladder/domain/GameResult.java +++ b/src/main/java/ladder/domain/GameResult.java @@ -33,7 +33,7 @@ private static Map playGame(Players players, Ladder ladder, Prize public String findResult(String wantedPlayer) { Player playerWanted = resultMap.keySet().stream() - .filter(player -> player.getName().equals(wantedPlayer)) + .filter(player -> player.isSame(wantedPlayer)) .findFirst() .orElseThrow(() -> new IllegalArgumentException(ALERT_FOR_INVALID_PLAYER_NAME)); diff --git a/src/main/java/ladder/domain/Player.java b/src/main/java/ladder/domain/Player.java index a0a993b979..300723cc63 100644 --- a/src/main/java/ladder/domain/Player.java +++ b/src/main/java/ladder/domain/Player.java @@ -25,6 +25,10 @@ private void validationPlayerName(String name) { } } + boolean isSame(String wantedPlayer) { + return wantedPlayer.equals(name); + } + public String getName() { return name; } diff --git a/src/main/java/ladder/view/OutputView.java b/src/main/java/ladder/view/OutputView.java index 9ce2bc43bd..73b4ae4c01 100644 --- a/src/main/java/ladder/view/OutputView.java +++ b/src/main/java/ladder/view/OutputView.java @@ -8,7 +8,7 @@ public class OutputView { private static final String EMPTY_SPACE = " "; private static final String BAR = "-----"; private static final String COLUMN = "|"; - private static final String MESSAGE_FOR_SINGLE_RESULT = "실행 결과"; + private static final String MESSAGE_FOR_RESULT = "실행 결과"; private static DataPrintFormatter playersPrintFormatter = new PlayersPrintFormatter(); private static DataPrintFormatter prizesPrintFormatter = new PrizesPrintFormatter(); @@ -55,12 +55,22 @@ private static String printBars(Bar bar) { return stringBuilder.append(EMPTY_SPACE).toString(); } - private static void printEmptyLine() { - System.out.println(); - } - public static void printSingleResult(String resultForWantedPlayer) { - System.out.println(MESSAGE_FOR_SINGLE_RESULT); + printEmptyLine(); + System.out.println(MESSAGE_FOR_RESULT); System.out.println(resultForWantedPlayer); } + + public static void printAllResult(GameResult gameResult) { + printEmptyLine(); + System.out.println(MESSAGE_FOR_RESULT); + gameResult.getResultMap() + .entrySet() + .forEach(result -> System.out.println( + result.getKey().getName() + " : " + result.getValue().getPrize())); + } + + private static void printEmptyLine() { + System.out.println(); + } } From 828993f5a3af7402abef366a09461eb499ad6bf2 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 15:51:06 +0900 Subject: [PATCH 28/29] =?UTF-8?q?[step3]=20docs=20:=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c2b6b7d792..53c063b58a 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ - [x] 예외 처리: 5글자가 넘거나 공백일 경우 - [x] 플레이어는 최소 2명 있어야 한다. (사다리의 다리는 최소 2개 이상이므로) - [x] 예외 처리: 플레이어가 2명 미만일 경우 -- [ ] 2. 실행 결과(당첨 상품)를 입력받는다. - - [ ] 예외 처리: 5글자가 넘거나 공백일 경우 - - [ ] 예외 처리: 플레이어의 수와 상품의 수가 같지 않을 경우 +- [x] 2. 실행 결과(당첨 상품)를 입력받는다. + - [x] 예외 처리: 5글자가 넘거나 공백일 경우 + - [x] 예외 처리: 플레이어의 수와 상품의 수가 같지 않을 경우 - [x] 3. 사다리 높이를 입력받는다. - [x] 예외 처리: 사다리 높이가 1 미만일 경우 - [x] 4. 플레이어들을 출력한다. @@ -34,11 +34,11 @@ - [x] 바는 연속될 수 없다. - [x] 바는 '-' 5개로 이루어져있다. - [x] 입력받은 높이만큼 열을 추가한다. -- [ ] 6. 당첨 상품 들을 출력한다. -- [ ] 7. 사다리 게임을 실행한다. - - [ ] 사용자의 현재 위치를 기준으로 사다리를 타고, 최종 위치를 계산한다. - - [ ] 사용자의 현재 위치보다 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 - - [ ] 사용자의 현재 위치보다 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 -- [ ] 8. 결과를 보고싶은 플레이어(혹은 전체)를 묻고 입력받는다. -- [ ] 9. 해당 플레이어(혹은 전체)의 실행 결과를 반환한다. +- [x] 6. 당첨 상품 들을 출력한다. +- [x] 7. 사다리 게임을 실행한다. + - [x] 사용자의 현재 위치를 기준으로 사다리를 타고, 최종 위치를 계산한다. + - [x] 사용자의 현재 위치와 bar의 위치가 1만큼 작으면 사용자의 현재위치는 1만큼 감소 + - [x] 사용자의 현재 위치보다 bar의 위치가 같으면 사용자의 현재위치가 1만큼 증가 +- [x] 8. 결과를 보고싶은 플레이어(혹은 전체)를 묻고 입력받는다. +- [x] 9. 해당 플레이어(혹은 전체)의 실행 결과를 반환한다. From a3ebeedc1251dda0d747b6f0003b55693e963511 Mon Sep 17 00:00:00 2001 From: 1nteger Date: Sat, 6 Jul 2019 15:54:43 +0900 Subject: [PATCH 29/29] =?UTF-8?q?[step3]=20style=20:=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=BB=A8=EB=B2=A4=EC=85=98=20=EC=A0=90=EA=B2=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/domain/Ladder.java | 2 +- src/main/java/ladder/domain/RandomBarGenerator.java | 2 +- src/main/java/ladder/formatter/PlayerNameFormatter.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/domain/Ladder.java b/src/main/java/ladder/domain/Ladder.java index 4b50ed1564..b3072477a1 100644 --- a/src/main/java/ladder/domain/Ladder.java +++ b/src/main/java/ladder/domain/Ladder.java @@ -23,7 +23,7 @@ public static Ladder from(Players players, Height height) { Position goThroughLinesFrom(Position position) { for (Line line : lines) { - position = line.travel(position); + position = line.travel(position); } return position; } diff --git a/src/main/java/ladder/domain/RandomBarGenerator.java b/src/main/java/ladder/domain/RandomBarGenerator.java index d6743ed5cb..fcf5793da1 100644 --- a/src/main/java/ladder/domain/RandomBarGenerator.java +++ b/src/main/java/ladder/domain/RandomBarGenerator.java @@ -2,7 +2,7 @@ import java.util.Random; -public class RandomBarGenerator implements BarGenerator{ +public class RandomBarGenerator implements BarGenerator { private Random random = new Random(); diff --git a/src/main/java/ladder/formatter/PlayerNameFormatter.java b/src/main/java/ladder/formatter/PlayerNameFormatter.java index f7ab16ae1c..80f6c1feab 100644 --- a/src/main/java/ladder/formatter/PlayerNameFormatter.java +++ b/src/main/java/ladder/formatter/PlayerNameFormatter.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -public class PlayerNameFormatter implements NameFormatter{ +public class PlayerNameFormatter implements NameFormatter { @Override public String nameFormat(Player player) {