From d39ea7f20d27a2c54853d808c36be29b253c11af Mon Sep 17 00:00:00 2001 From: HyeongJu Yoo Date: Sun, 18 Nov 2018 07:40:06 +0900 Subject: [PATCH 1/4] =?UTF-8?q?step1=201=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ConsoleMain.java | 13 ++++ src/main/java/generator/LineGenerator.java | 31 +++++++++ src/main/java/model/Ladder.java | 33 +++++++++ src/main/java/model/Line.java | 81 ++++++++++++++++++++++ src/main/java/model/Participant.java | 21 ++++++ src/main/java/view/InputView.java | 23 ++++++ src/main/java/view/ResultView.java | 32 +++++++++ src/test/java/model/LadderTest.java | 27 ++++++++ src/test/java/model/LineTest.java | 52 ++++++++++++++ src/test/java/model/ParticipantTest.java | 18 +++++ 10 files changed, 331 insertions(+) create mode 100644 src/main/java/ConsoleMain.java create mode 100644 src/main/java/generator/LineGenerator.java create mode 100644 src/main/java/model/Ladder.java create mode 100644 src/main/java/model/Line.java create mode 100644 src/main/java/model/Participant.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/ResultView.java create mode 100644 src/test/java/model/LadderTest.java create mode 100644 src/test/java/model/LineTest.java create mode 100644 src/test/java/model/ParticipantTest.java diff --git a/src/main/java/ConsoleMain.java b/src/main/java/ConsoleMain.java new file mode 100644 index 0000000000..1d4f2891e6 --- /dev/null +++ b/src/main/java/ConsoleMain.java @@ -0,0 +1,13 @@ +import generator.LineGenerator; +import model.Ladder; +import view.InputView; +import view.ResultView; + +public class ConsoleMain { + public static void main(String[] args) { + String participants = InputView.getParticipants(); + String maxHight = InputView.getMaxHight(); + Ladder ladder = new Ladder(participants, maxHight, new LineGenerator()); + ResultView.printResult(ladder.getParticipants(), ladder.getLines()); + } +} diff --git a/src/main/java/generator/LineGenerator.java b/src/main/java/generator/LineGenerator.java new file mode 100644 index 0000000000..4c79fa72fe --- /dev/null +++ b/src/main/java/generator/LineGenerator.java @@ -0,0 +1,31 @@ +package generator; + +import model.Line; +import model.Participant; + +import java.util.ArrayList; +import java.util.List; + +public class LineGenerator { + public List getParticipants(String names) { + ArrayList participants = new ArrayList<>(); + + for (String name : split(names)) { + participants.add(new Participant(name)); + } + + return participants; + } + + public List getLines(Integer length) { + ArrayList lines = new ArrayList(); + for (int i = 0; i <= length; i++) { + lines.add(Line.of(length)); + } + return lines; + } + + private String[] split(String participants) { + return participants.split(","); + } +} diff --git a/src/main/java/model/Ladder.java b/src/main/java/model/Ladder.java new file mode 100644 index 0000000000..53ede74752 --- /dev/null +++ b/src/main/java/model/Ladder.java @@ -0,0 +1,33 @@ +package model; + +import generator.LineGenerator; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +public class Ladder { + private List lines = new ArrayList(); + private List participants = new ArrayList(); + + + public Ladder(String names, String maxHeight, LineGenerator lineGenerator) { + participants = lineGenerator.getParticipants(names); + lines = lineGenerator.getLines(participants.size()); + + for (int i = 0; i < lines.size(); i++) { + Line line = lines.get(i); + int size = line.getPoints().size(); + for (int j = 0; j < size; j++) { + } + } + } + + public List getLines() { + return lines; + } + + public List getParticipants() { + return participants; + } +} diff --git a/src/main/java/model/Line.java b/src/main/java/model/Line.java new file mode 100644 index 0000000000..20b7f66c03 --- /dev/null +++ b/src/main/java/model/Line.java @@ -0,0 +1,81 @@ +package model; + +import java.util.ArrayList; +import java.util.Optional; + +public class Line { + private ArrayList points = new ArrayList<>(); + private int countOfPerson; + private Line(int countOfPerson) { + this.countOfPerson = countOfPerson; + + for (int i = 0; i < countOfPerson; i++) { + addPoint(false); + } + } + public static Line of(int countOfPerson, int[] indexs) { + Line line = new Line(countOfPerson); + line.setLines(indexs); + + return line; + } + + public static Line of(int countOfPerson) { + return new Line(countOfPerson); + } + + public static Line of(String countOfPerson) { + return of(Integer.valueOf(countOfPerson)); + } + + public boolean hasPoint(int point) { + if(point >= points.size()) { + return false; + } + + return points.get(point); + } + + + public void addPoint(boolean b) { + validPoints(points.size()); + + points.add(b); + } + + public void setLines(int[] indexs) { + for (int idx : indexs) { + setLine(idx); + } + } + + public void setLine(int index) { + validPoints(index); + if(index == points.size()-1) { + throw new IllegalArgumentException("선 생성 불가"); + } + + if(index == 0) { + if(hasPoint(index+1)) { + throw new IllegalArgumentException("선 생성 불가"); + } + } else { + if(hasPoint(index-1) || hasPoint(index+1)) { + throw new IllegalArgumentException("선 생성 불가"); + } + } + + + points.set(index, true); + } + + private void validPoints(int index) { + if (index >= countOfPerson) { + throw new IllegalStateException("최대 포인트를 초과할 수 없습니다."); + } + } + + public ArrayList getPoints() { + return points; + } +} diff --git a/src/main/java/model/Participant.java b/src/main/java/model/Participant.java new file mode 100644 index 0000000000..26388a5653 --- /dev/null +++ b/src/main/java/model/Participant.java @@ -0,0 +1,21 @@ +package model; + +public class Participant { + private static final int LIMIT = 5; + private String name; + + public Participant(String name) { + if (name.length() > LIMIT) { + throw new IllegalArgumentException(); + } + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000000..4f42e95b17 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,23 @@ +package view; + +import java.io.InputStream; +import java.util.Scanner; + +public class InputView { + private static final Scanner SCANNER = new Scanner(System.in); + /** + * 참가자 가져오기 + */ + public static String getParticipants() { + System.out.println("참여할 사람 이름을 입력하세요."); + return SCANNER.next(); + } + + /** + * 최대 사다리 높이 가져오기 + */ + public static String getMaxHight() { + System.out.println("최대 사다리 높이는 몇 개인가요?"); + return SCANNER.next(); + } +} diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java new file mode 100644 index 0000000000..db9d6ad6ce --- /dev/null +++ b/src/main/java/view/ResultView.java @@ -0,0 +1,32 @@ +package view; + +import model.Line; +import model.Participant; + +import java.util.ArrayList; +import java.util.List; + +public class ResultView { + public static void printResult(List participants, List lines) { + System.out.println("실행결과"); + for (Participant participant : participants) { + System.out.printf("%s ",participant.getName()); + } + System.out.println(); + int size = lines.get(0).getPoints().size(); + for (int i = 0; i < lines.size(); i++) { + Line line = lines.get(i); + ArrayList points = line.getPoints(); + System.out.print(" "); + for (int j = 0; j < points.size()-1; j++) { + if(points.get(j).booleanValue()) { + System.out.print("|-----"); + } else { + System.out.print("| "); + } + } + System.out.println(); + } + + } +} diff --git a/src/test/java/model/LadderTest.java b/src/test/java/model/LadderTest.java new file mode 100644 index 0000000000..80c811d46a --- /dev/null +++ b/src/test/java/model/LadderTest.java @@ -0,0 +1,27 @@ +package model; + +import generator.LineGenerator; +import org.junit.Test; +import view.ResultView; + +import java.util.ArrayList; +import java.util.List; + +public class LadderTest { + @Test + public void asd() { + //Ladder ladder = new Ladder("poni,honux,crong,jk", "5", new LineGenerator()); + + List participants = new LineGenerator().getParticipants("poni,honux,crong,jk"); + ArrayList lines = new ArrayList(); + + lines.add(Line.of(5, new int[]{0,2})); + lines.add(Line.of(5, new int[]{1})); + lines.add(Line.of(5, new int[]{0})); + lines.add(Line.of(5, new int[]{1})); + lines.add(Line.of(5, new int[]{0,2})); + + ResultView.printResult(participants, lines); + } + +} diff --git a/src/test/java/model/LineTest.java b/src/test/java/model/LineTest.java new file mode 100644 index 0000000000..94a323629b --- /dev/null +++ b/src/test/java/model/LineTest.java @@ -0,0 +1,52 @@ +package model; + +import org.junit.Before; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LineTest { + + private Line line; + private int countOfPerson; + + @Before + public void setUp() throws Exception { + countOfPerson = 4; + line = Line.of(countOfPerson); + + } + + // TODO + /* + 라인 만들기 + 라인 n개 만들기 + 높이 입력하기 + 사다리 그리기 + 라인의 좌표 값에 선이 있는지 유무를 판단하는 로직 + 이동하기 + */ + + @Test + public void hasPoint_선있을때(){ + line.addPoint(true); + line.addPoint(true); + assertThat(line.hasPoint(1)).isTrue(); + } + + @Test + public void hasPoint_선없을때(){ + line.addPoint(true); + line.addPoint(false); + assertThat(line.hasPoint(1)).isFalse(); + } + + @Test ( expected = IllegalStateException.class) + public void addPoint_최대높이초과() { + for (int i = 0; i < countOfPerson +1; i++) { + line.addPoint(true); + } + } + + +} diff --git a/src/test/java/model/ParticipantTest.java b/src/test/java/model/ParticipantTest.java new file mode 100644 index 0000000000..4bd04c91e4 --- /dev/null +++ b/src/test/java/model/ParticipantTest.java @@ -0,0 +1,18 @@ +package model; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ParticipantTest { + @Test + public void getName_5자() { + Participant participant = new Participant("bbibb"); + assertThat(participant.getName()).isEqualTo("bbibb"); + } + + @Test(expected = IllegalArgumentException.class) + public void getName_5자초과() { + Participant participant = new Participant("bbibbb"); + } +} \ No newline at end of file From 40337dc04ee454d82803f913b5d4001589145415 Mon Sep 17 00:00:00 2001 From: HyeongJu Yoo Date: Sun, 18 Nov 2018 21:37:19 +0900 Subject: [PATCH 2/4] =?UTF-8?q?spte1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ConsoleMain.java | 5 +- .../java/generator/AutoLadderGenerator.java | 40 +++++ src/main/java/generator/LadderGenerator.java | 15 ++ src/main/java/generator/LineGenerator.java | 31 ---- src/main/java/model/Ladder.java | 16 +- src/main/java/model/Line.java | 145 ++++++++++++++---- src/main/java/model/Positive.java | 25 +++ src/main/java/view/InputView.java | 1 + src/main/java/view/ResultView.java | 68 ++++++-- .../generator/AutoLadderGeneratorTest.java | 33 ++++ src/test/java/model/LadderTest.java | 18 +-- src/test/java/model/LineTest.java | 21 +-- 12 files changed, 302 insertions(+), 116 deletions(-) create mode 100644 src/main/java/generator/AutoLadderGenerator.java create mode 100644 src/main/java/generator/LadderGenerator.java delete mode 100644 src/main/java/generator/LineGenerator.java create mode 100644 src/main/java/model/Positive.java create mode 100644 src/test/java/generator/AutoLadderGeneratorTest.java diff --git a/src/main/java/ConsoleMain.java b/src/main/java/ConsoleMain.java index 1d4f2891e6..52517c9c42 100644 --- a/src/main/java/ConsoleMain.java +++ b/src/main/java/ConsoleMain.java @@ -1,4 +1,5 @@ -import generator.LineGenerator; +import generator.AutoLadderGenerator; +import generator.LadderGenerator; import model.Ladder; import view.InputView; import view.ResultView; @@ -7,7 +8,7 @@ public class ConsoleMain { public static void main(String[] args) { String participants = InputView.getParticipants(); String maxHight = InputView.getMaxHight(); - Ladder ladder = new Ladder(participants, maxHight, new LineGenerator()); + Ladder ladder = new Ladder(participants, maxHight, new AutoLadderGenerator()); ResultView.printResult(ladder.getParticipants(), ladder.getLines()); } } diff --git a/src/main/java/generator/AutoLadderGenerator.java b/src/main/java/generator/AutoLadderGenerator.java new file mode 100644 index 0000000000..36fed10b8c --- /dev/null +++ b/src/main/java/generator/AutoLadderGenerator.java @@ -0,0 +1,40 @@ +package generator; + +import model.Line; +import model.Participant; +import model.Positive; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class AutoLadderGenerator implements LadderGenerator { + + private static final String COMMA = ","; + + @Override + public List getParticipants(String names) { + return Arrays.stream(split(names)) + .map(Participant::new) + .collect(Collectors.toList()); + } + + @Override + public List getLines(String height, int countOfPerson) { + ArrayList lines = new ArrayList(); + for (int i = 0; i < Positive.of(height).getNum(); i++) { + lines.add(Line.of(Positive.of(countOfPerson).getNum())); + } + + lines.forEach(Line::addAutoLines); + + return lines; + } + + @Override + public String[] split(String participants) { + + return participants.split(COMMA); + } +} diff --git a/src/main/java/generator/LadderGenerator.java b/src/main/java/generator/LadderGenerator.java new file mode 100644 index 0000000000..6f3279628a --- /dev/null +++ b/src/main/java/generator/LadderGenerator.java @@ -0,0 +1,15 @@ +package generator; + +import model.Line; +import model.Participant; + +import java.util.ArrayList; +import java.util.List; + +public interface LadderGenerator { + public List getParticipants(String names); + + public List getLines(String height, int countOfPerson); + + public String[] split(String participants); +} diff --git a/src/main/java/generator/LineGenerator.java b/src/main/java/generator/LineGenerator.java deleted file mode 100644 index 4c79fa72fe..0000000000 --- a/src/main/java/generator/LineGenerator.java +++ /dev/null @@ -1,31 +0,0 @@ -package generator; - -import model.Line; -import model.Participant; - -import java.util.ArrayList; -import java.util.List; - -public class LineGenerator { - public List getParticipants(String names) { - ArrayList participants = new ArrayList<>(); - - for (String name : split(names)) { - participants.add(new Participant(name)); - } - - return participants; - } - - public List getLines(Integer length) { - ArrayList lines = new ArrayList(); - for (int i = 0; i <= length; i++) { - lines.add(Line.of(length)); - } - return lines; - } - - private String[] split(String participants) { - return participants.split(","); - } -} diff --git a/src/main/java/model/Ladder.java b/src/main/java/model/Ladder.java index 53ede74752..4697e628d3 100644 --- a/src/main/java/model/Ladder.java +++ b/src/main/java/model/Ladder.java @@ -1,26 +1,18 @@ package model; -import generator.LineGenerator; +import generator.LadderGenerator; import java.util.ArrayList; import java.util.List; -import java.util.stream.IntStream; public class Ladder { private List lines = new ArrayList(); private List participants = new ArrayList(); - public Ladder(String names, String maxHeight, LineGenerator lineGenerator) { - participants = lineGenerator.getParticipants(names); - lines = lineGenerator.getLines(participants.size()); - - for (int i = 0; i < lines.size(); i++) { - Line line = lines.get(i); - int size = line.getPoints().size(); - for (int j = 0; j < size; j++) { - } - } + public Ladder(String names, String height, LadderGenerator ladderGenerator) { + participants = ladderGenerator.getParticipants(names); + lines = ladderGenerator.getLines(height, participants.size()); } public List getLines() { diff --git a/src/main/java/model/Line.java b/src/main/java/model/Line.java index 20b7f66c03..a487c71145 100644 --- a/src/main/java/model/Line.java +++ b/src/main/java/model/Line.java @@ -1,11 +1,14 @@ package model; import java.util.ArrayList; -import java.util.Optional; +import java.util.List; +import java.util.Random; +import java.util.stream.IntStream; public class Line { private ArrayList points = new ArrayList<>(); private int countOfPerson; + private Line(int countOfPerson) { this.countOfPerson = countOfPerson; @@ -13,9 +16,10 @@ private Line(int countOfPerson) { addPoint(false); } } - public static Line of(int countOfPerson, int[] indexs) { + + public static Line of(int countOfPerson, List indexs) { Line line = new Line(countOfPerson); - line.setLines(indexs); + line.addAutoLines(indexs); return line; } @@ -24,58 +28,135 @@ public static Line of(int countOfPerson) { return new Line(countOfPerson); } - public static Line of(String countOfPerson) { - return of(Integer.valueOf(countOfPerson)); - } - - public boolean hasPoint(int point) { - if(point >= points.size()) { + public boolean hasLine(int index) { + if (index >= points.size()) { return false; } - return points.get(point); + return points.get(index); } - + /** + * 좌표 추가 + * + * @param b + */ public void addPoint(boolean b) { - validPoints(points.size()); + if (points.size() >= countOfPerson) { + throw new IllegalStateException("좌표의 최대값은 인원 수를 초과할 수 없습니다."); + } points.add(b); } - public void setLines(int[] indexs) { - for (int idx : indexs) { - setLine(idx); + /** + * 선들 추가 + * + * @param indexs + */ + public void addAutoLines(List indexs) { + for (Positive idx : indexs) { + addLine(idx); } } - public void setLine(int index) { - validPoints(index); - if(index == points.size()-1) { - throw new IllegalArgumentException("선 생성 불가"); - } + /** + * 선 추가 + * + * @param index + */ + public void addLine(Integer index) { + addLine(Positive.of(index)); + } - if(index == 0) { - if(hasPoint(index+1)) { - throw new IllegalArgumentException("선 생성 불가"); - } - } else { - if(hasPoint(index-1) || hasPoint(index+1)) { - throw new IllegalArgumentException("선 생성 불가"); - } + /** + * 선 만듦 + * + * @param index + */ + public void addLine(Positive index) { + if (!canAddLine(index)) { + throw new IllegalArgumentException("선 생성 불가"); } + points.set(index.getNum(), true); + } + + /** + * 왼쪽 좌표에 선이 있는지 여부 + * + * @param index + * @return + */ + public boolean hasLeftLine(Positive index) { + return hasLine(index.getNum() - 1); + } + + /** + * 오른쪽 좌표에 선이 있는지 여부 + * + * @param index + * @return + */ + public boolean hasRightPoint(Positive index) { + return hasLine(index.getNum() + 1); + } - points.set(index, true); + /** + * 해당 좌표에 선을 추가할 수 있는지 여부 + * + * @param index + * @return + */ + public boolean canAddLine(int index) { + return canAddLine(Positive.of(index)); } - private void validPoints(int index) { - if (index >= countOfPerson) { - throw new IllegalStateException("최대 포인트를 초과할 수 없습니다."); + /** + * 해당 좌표에 선을 추가할 수 있는지 여부 (양수) + * + * @param index + * @return + */ + public boolean canAddLine(Positive index) { + int num = index.getNum(); + if (num >= points.size() - 1) { + return false; + } + + if (hasRightPoint(index)) { + return false; + } + + if (num > 0 && hasLeftLine(index)) { + return false; } + + return true; } public ArrayList getPoints() { return points; } + + /** + * 자동으로 선 추가 + */ + public void addAutoLines() { + Random random = new Random(); + IntStream.rangeClosed(0, points.size()) + .filter(i -> isAddLine(random.nextBoolean(), i)) + .forEach(this::addLine); + } + + /** + * 선 추가할 건지 여부 + * + * @param isAdd + * @param i + * @return + */ + private boolean isAddLine(Boolean isAdd, int i) { + return canAddLine(i) && isAdd; + } } diff --git a/src/main/java/model/Positive.java b/src/main/java/model/Positive.java new file mode 100644 index 0000000000..7f64c27c4a --- /dev/null +++ b/src/main/java/model/Positive.java @@ -0,0 +1,25 @@ +package model; + +public class Positive { + private int num; + + private Positive(int num) { + this.num = num; + } + + public static Positive of(String num) { + return of(Integer.valueOf(num)); + } + + public static Positive of(int num) { + if (num < 0) { + throw new IllegalArgumentException("양수를 입력하십시오."); + } + + return new Positive(num); + } + + public int getNum() { + return num; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 4f42e95b17..e6cf0c3771 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -5,6 +5,7 @@ public class InputView { private static final Scanner SCANNER = new Scanner(System.in); + /** * 참가자 가져오기 */ diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index db9d6ad6ce..a96e7648f6 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -7,26 +7,68 @@ import java.util.List; public class ResultView { + /** + * 실행 결과 출력 + * + * @param participants + * @param lines + */ public static void printResult(List participants, List lines) { System.out.println("실행결과"); - for (Participant participant : participants) { - System.out.printf("%s ",participant.getName()); - } + printParticipants(participants); System.out.println(); - int size = lines.get(0).getPoints().size(); + printLadder(lines); + + } + + /** + * 사다리 출력 + * + * @param lines + */ + private static void printLadder(List lines) { for (int i = 0; i < lines.size(); i++) { Line line = lines.get(i); ArrayList points = line.getPoints(); - System.out.print(" "); - for (int j = 0; j < points.size()-1; j++) { - if(points.get(j).booleanValue()) { - System.out.print("|-----"); - } else { - System.out.print("| "); - } - } - System.out.println(); + printLines(points); } + } + /** + * 참가자 출력 + * + * @param participants + */ + private static void printParticipants(List participants) { + for (Participant participant : participants) { + System.out.printf("%s ", participant.getName()); + } + } + + /** + * 라인들 출력 + * + * @param points + */ + private static void printLines(ArrayList points) { + System.out.print(" "); + for (int j = 0; j < points.size(); j++) { + printLine(points, j); + } + System.out.println(); + } + + /** + * 라인 출력 + * + * @param points + * @param j + */ + private static void printLine(ArrayList points, int j) { + if (points.get(j).booleanValue()) { + System.out.print("|-----"); + } else { + System.out.print("| "); + } } } diff --git a/src/test/java/generator/AutoLadderGeneratorTest.java b/src/test/java/generator/AutoLadderGeneratorTest.java new file mode 100644 index 0000000000..2ce616dd7e --- /dev/null +++ b/src/test/java/generator/AutoLadderGeneratorTest.java @@ -0,0 +1,33 @@ +package generator; + +import model.Line; +import model.Participant; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class AutoLadderGeneratorTest { + + private AutoLadderGenerator autoLadderGenerator; + + @Before + public void setUp() throws Exception { + autoLadderGenerator = new AutoLadderGenerator(); + } + + @Test + public void getParticipants() { + List participants = autoLadderGenerator.getParticipants("pobi,crong,papa,jk"); + assertThat(participants.size()).isEqualTo(4); + } + + @Test + public void getLines() { + List lines = autoLadderGenerator.getLines("5", 2); + assertThat(lines.size()).isEqualTo(5); + } +} \ No newline at end of file diff --git a/src/test/java/model/LadderTest.java b/src/test/java/model/LadderTest.java index 80c811d46a..9a9c5139f4 100644 --- a/src/test/java/model/LadderTest.java +++ b/src/test/java/model/LadderTest.java @@ -1,26 +1,26 @@ package model; -import generator.LineGenerator; +import generator.AutoLadderGenerator; +import generator.LadderGenerator; import org.junit.Test; import view.ResultView; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class LadderTest { @Test public void asd() { - //Ladder ladder = new Ladder("poni,honux,crong,jk", "5", new LineGenerator()); - List participants = new LineGenerator().getParticipants("poni,honux,crong,jk"); - ArrayList lines = new ArrayList(); - lines.add(Line.of(5, new int[]{0,2})); - lines.add(Line.of(5, new int[]{1})); - lines.add(Line.of(5, new int[]{0})); - lines.add(Line.of(5, new int[]{1})); - lines.add(Line.of(5, new int[]{0,2})); + List participants = new AutoLadderGenerator().getParticipants("poni,honux,crong,jk"); + ArrayList lines = new ArrayList(); + lines.add(Line.of(4, Arrays.asList(Positive.of(0), Positive.of(2)))); + lines.add(Line.of(4, Arrays.asList(Positive.of(1)))); + lines.add(Line.of(4, Arrays.asList(Positive.of(0)))); + lines.add(Line.of(4, Arrays.asList(Positive.of(1)))); ResultView.printResult(participants, lines); } diff --git a/src/test/java/model/LineTest.java b/src/test/java/model/LineTest.java index 94a323629b..fc308e9fdd 100644 --- a/src/test/java/model/LineTest.java +++ b/src/test/java/model/LineTest.java @@ -17,28 +17,15 @@ public void setUp() throws Exception { } - // TODO - /* - 라인 만들기 - 라인 n개 만들기 - 높이 입력하기 - 사다리 그리기 - 라인의 좌표 값에 선이 있는지 유무를 판단하는 로직 - 이동하기 - */ - @Test public void hasPoint_선있을때(){ - line.addPoint(true); - line.addPoint(true); - assertThat(line.hasPoint(1)).isTrue(); + line.addLine(Positive.of(1)); + assertThat(line.hasLine(1)).isTrue(); } @Test - public void hasPoint_선없을때(){ - line.addPoint(true); - line.addPoint(false); - assertThat(line.hasPoint(1)).isFalse(); + public void hasPoint_마지막인덱스(){ + assertThat(line.hasLine(4)).isFalse(); } @Test ( expected = IllegalStateException.class) From a068bcc41e09aca274f5a19c5961f76a2525f72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=ED=98=95=EC=A3=BC?= Date: Mon, 19 Nov 2018 19:21:42 +0900 Subject: [PATCH 3/4] =?UTF-8?q?step1=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/generator/AutoLadderGenerator.java | 16 ---------- src/main/java/generator/LadderGenerator.java | 4 --- src/main/java/model/Ladder.java | 32 +++++++++---------- src/main/java/model/Line.java | 5 +-- src/main/java/model/Participant.java | 16 ++++++++++ src/main/java/model/Positive.java | 8 ++--- 6 files changed, 39 insertions(+), 42 deletions(-) diff --git a/src/main/java/generator/AutoLadderGenerator.java b/src/main/java/generator/AutoLadderGenerator.java index 36fed10b8c..52dc8a9905 100644 --- a/src/main/java/generator/AutoLadderGenerator.java +++ b/src/main/java/generator/AutoLadderGenerator.java @@ -10,16 +10,6 @@ import java.util.stream.Collectors; public class AutoLadderGenerator implements LadderGenerator { - - private static final String COMMA = ","; - - @Override - public List getParticipants(String names) { - return Arrays.stream(split(names)) - .map(Participant::new) - .collect(Collectors.toList()); - } - @Override public List getLines(String height, int countOfPerson) { ArrayList lines = new ArrayList(); @@ -31,10 +21,4 @@ public List getLines(String height, int countOfPerson) { return lines; } - - @Override - public String[] split(String participants) { - - return participants.split(COMMA); - } } diff --git a/src/main/java/generator/LadderGenerator.java b/src/main/java/generator/LadderGenerator.java index 6f3279628a..841eb14a66 100644 --- a/src/main/java/generator/LadderGenerator.java +++ b/src/main/java/generator/LadderGenerator.java @@ -7,9 +7,5 @@ import java.util.List; public interface LadderGenerator { - public List getParticipants(String names); - public List getLines(String height, int countOfPerson); - - public String[] split(String participants); } diff --git a/src/main/java/model/Ladder.java b/src/main/java/model/Ladder.java index 4697e628d3..2730d10dec 100644 --- a/src/main/java/model/Ladder.java +++ b/src/main/java/model/Ladder.java @@ -6,20 +6,20 @@ import java.util.List; public class Ladder { - private List lines = new ArrayList(); - private List participants = new ArrayList(); - - - public Ladder(String names, String height, LadderGenerator ladderGenerator) { - participants = ladderGenerator.getParticipants(names); - lines = ladderGenerator.getLines(height, participants.size()); - } - - public List getLines() { - return lines; - } - - public List getParticipants() { - return participants; - } + private List lines = new ArrayList(); + private List participants = new ArrayList(); + + + public Ladder(String names, String height, LadderGenerator ladderGenerator) { + participants = Participant.getParticipants(names); + lines = ladderGenerator.getLines(height, participants.size()); + } + + public List getLines() { + return lines; + } + + public List getParticipants() { + return participants; + } } diff --git a/src/main/java/model/Line.java b/src/main/java/model/Line.java index a487c71145..939ec563ef 100644 --- a/src/main/java/model/Line.java +++ b/src/main/java/model/Line.java @@ -1,6 +1,7 @@ package model; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Random; import java.util.stream.IntStream; @@ -135,8 +136,8 @@ public boolean canAddLine(Positive index) { return true; } - public ArrayList getPoints() { - return points; + public List getPoints() { + return Collections.unmodifiableList(points); } /** diff --git a/src/main/java/model/Participant.java b/src/main/java/model/Participant.java index 26388a5653..b1ef2825d9 100644 --- a/src/main/java/model/Participant.java +++ b/src/main/java/model/Participant.java @@ -1,6 +1,11 @@ package model; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class Participant { + private static final String COMMA = ","; private static final int LIMIT = 5; private String name; @@ -18,4 +23,15 @@ public String getName() { public void setName(String name) { this.name = name; } + + public static List getParticipants(String names) { + return Arrays.stream(split(names)) + .map(Participant::new) + .collect(Collectors.toList()); + } + + public static String[] split(String participants) { + + return participants.split(COMMA); + } } diff --git a/src/main/java/model/Positive.java b/src/main/java/model/Positive.java index 7f64c27c4a..c8966f32c3 100644 --- a/src/main/java/model/Positive.java +++ b/src/main/java/model/Positive.java @@ -4,6 +4,10 @@ public class Positive { private int num; private Positive(int num) { + if (num < 0) { + throw new IllegalArgumentException("양수를 입력하십시오."); + } + this.num = num; } @@ -12,10 +16,6 @@ public static Positive of(String num) { } public static Positive of(int num) { - if (num < 0) { - throw new IllegalArgumentException("양수를 입력하십시오."); - } - return new Positive(num); } From ac2d33567561311e5fcb5ab8f4da64cb756581d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=ED=98=95=EC=A3=BC?= Date: Mon, 19 Nov 2018 19:24:03 +0900 Subject: [PATCH 4/4] =?UTF-8?q?step1=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81@?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/ResultView.java | 6 +++--- src/test/java/generator/AutoLadderGeneratorTest.java | 2 +- src/test/java/model/LadderTest.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index a96e7648f6..2e7664eb80 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -29,7 +29,7 @@ public static void printResult(List participants, List lines) private static void printLadder(List lines) { for (int i = 0; i < lines.size(); i++) { Line line = lines.get(i); - ArrayList points = line.getPoints(); + List points = line.getPoints(); printLines(points); } } @@ -50,7 +50,7 @@ private static void printParticipants(List participants) { * * @param points */ - private static void printLines(ArrayList points) { + private static void printLines(List points) { System.out.print(" "); for (int j = 0; j < points.size(); j++) { printLine(points, j); @@ -64,7 +64,7 @@ private static void printLines(ArrayList points) { * @param points * @param j */ - private static void printLine(ArrayList points, int j) { + private static void printLine(List points, int j) { if (points.get(j).booleanValue()) { System.out.print("|-----"); } else { diff --git a/src/test/java/generator/AutoLadderGeneratorTest.java b/src/test/java/generator/AutoLadderGeneratorTest.java index 2ce616dd7e..a26c06632a 100644 --- a/src/test/java/generator/AutoLadderGeneratorTest.java +++ b/src/test/java/generator/AutoLadderGeneratorTest.java @@ -21,7 +21,7 @@ public void setUp() throws Exception { @Test public void getParticipants() { - List participants = autoLadderGenerator.getParticipants("pobi,crong,papa,jk"); + List participants = Participant.getParticipants("pobi,crong,papa,jk"); assertThat(participants.size()).isEqualTo(4); } diff --git a/src/test/java/model/LadderTest.java b/src/test/java/model/LadderTest.java index 9a9c5139f4..e80afa4bcf 100644 --- a/src/test/java/model/LadderTest.java +++ b/src/test/java/model/LadderTest.java @@ -14,7 +14,7 @@ public class LadderTest { public void asd() { - List participants = new AutoLadderGenerator().getParticipants("poni,honux,crong,jk"); + List participants = Participant.getParticipants("poni,honux,crong,jk"); ArrayList lines = new ArrayList(); lines.add(Line.of(4, Arrays.asList(Positive.of(0), Positive.of(2))));