Skip to content

Commit 566799a

Browse files
committed
feat: 결과 출력 작업
1 parent fedaf02 commit 566799a

File tree

7 files changed

+101
-3
lines changed

7 files changed

+101
-3
lines changed

src/main/java/nextstep/ladder/controller/LadderController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public static void main(String[] args) {
2020
OutputView.printInputResults(inputLadderResults);
2121

2222
LadderGame ladderGame = new LadderGame(names, lines, inputLadderResults);
23+
LadderResults ladderResults = ladderGame.play();
2324

24-
// OutputView.printNamesAndLadders(ladderGame);
25-
// OutputView.printInputResults(inputLadderResults);
25+
OutputView.printResultByName(InputView.inputNameForResult(), ladderResults);
2626
}
2727
}

src/main/java/nextstep/ladder/domain/LadderGame.java

+18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package nextstep.ladder.domain;
22

33
import java.util.List;
4+
import java.util.Map;
5+
import java.util.stream.Collectors;
6+
import java.util.stream.IntStream;
47

58
public class LadderGame {
69
private Names names;
@@ -14,6 +17,11 @@ public LadderGame(Names names, Lines lines, List<LadderResult> results) {
1417
this.results = results;
1518
}
1619

20+
public LadderResults play() {
21+
Map<Name, LadderResult> gameResults = generateGameResults();
22+
return new LadderResults(gameResults);
23+
}
24+
1725
public Names getNames() {
1826
return names;
1927
}
@@ -22,6 +30,16 @@ public Lines getLines() {
2230
return lines;
2331
}
2432

33+
private Map<Name, LadderResult> generateGameResults() {
34+
return IntStream.range(0, names.size())
35+
.boxed()
36+
.collect(Collectors.toMap(names.getNames()::get, this::calculateResult));
37+
}
38+
39+
private LadderResult calculateResult(int index) {
40+
return results.get(lines.move(index));
41+
}
42+
2543
private void validateResults(List<LadderResult> results) {
2644
if (results.size() != names.size()) {
2745
throw new IllegalArgumentException("참가자 수와 결과 수가 일치하지 않습니다.");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package nextstep.ladder.domain;
2+
3+
import java.util.Map;
4+
import java.util.Optional;
5+
6+
public class LadderResults {
7+
private final Map<Name, LadderResult> ladderResults;
8+
9+
public LadderResults(Map<Name, LadderResult> ladderResults) {
10+
this.ladderResults = ladderResults;
11+
}
12+
13+
public LadderResult getResultForParticipant(Name name) {
14+
return Optional.ofNullable(ladderResults.get(name))
15+
.orElseThrow(() -> new IllegalArgumentException(name.getName() + " 참가자가 존재하지 않습니다."));
16+
}
17+
18+
public Map<Name, LadderResult> getAllResults() {
19+
return ladderResults;
20+
}
21+
}

src/main/java/nextstep/ladder/domain/Line.java

+18
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,25 @@ public Line(int namesSize, GenerateLadderPoint generateLadderPoint) {
1515
}
1616
}
1717

18+
public int move(int position) {
19+
if (isMoveRight(position)) {
20+
return position + 1;
21+
}
22+
if (isMoveLeft(position)) {
23+
return position - 1;
24+
}
25+
return position;
26+
}
27+
1828
public List<Boolean> getPoints() {
1929
return points;
2030
}
31+
32+
private boolean isMoveRight(int position) {
33+
return position < points.size() && points.get(position);
34+
}
35+
36+
private boolean isMoveLeft(int position) {
37+
return position > 0 && points.get(position - 1);
38+
}
2139
}

src/main/java/nextstep/ladder/domain/Lines.java

+7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ public void initialize(int size, Height height, GenerateLadderPoint generateLadd
1818
this.lines = createLines(size, height, generateLadderPoint);
1919
}
2020

21+
public int move(int position) {
22+
for (Line line : lines) {
23+
position = line.move(position);
24+
}
25+
return position;
26+
}
27+
2128
private List<Line> createLines(int size, Height height, GenerateLadderPoint generateLadderPoint) {
2229
return IntStream.range(0, height.getPoint())
2330
.mapToObj(i -> new Line(size, generateLadderPoint))

src/main/java/nextstep/ladder/view/InputView.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public static List<LadderResult> inputLadderResults() {
3434
return parseLadderResults(SCANNER.nextLine());
3535
}
3636

37+
public static Name inputNameForResult() {
38+
System.out.println("결과를 보고 싶은 사람은?");
39+
String inputNames = SCANNER.nextLine();
40+
41+
return new Name(inputNames);
42+
}
43+
3744
private static Names splitNames(String inputNames) {
3845
List<Name> names = Arrays.stream(inputNames.split(COMMA))
3946
.map(Name::new)
@@ -42,7 +49,7 @@ private static Names splitNames(String inputNames) {
4249
}
4350

4451
private static List<LadderResult> parseLadderResults(String inputLadderResults) {
45-
return Arrays.stream(inputLadderResults.split(","))
52+
return Arrays.stream(inputLadderResults.split(COMMA))
4653
.map(String::trim)
4754
.map(LadderResult::new)
4855
.collect(Collectors.toList());

src/main/java/nextstep/ladder/view/OutputView.java

+27
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,39 @@ public class OutputView {
1212
private static final String LADDER_VERTICAL_LINE = "|";
1313
private static final String LADDER_SPACE = " ";
1414
private static final String NEWLINE = System.lineSeparator();
15+
16+
private static final String PARTICIPANT_NAME_ALL = "all";
1517
private static final int MAX_NAME_LENGTH = 5;
1618

19+
private OutputView() {
20+
}
21+
1722
public static void printInputResults(List<LadderResult> inputLadderResults) {
1823
System.out.println(formatLadderResults(inputLadderResults) + NEWLINE);
1924
}
2025

26+
public static void printResultByName(Name inputName, LadderResults ladderResults) {
27+
printHeader();
28+
if (inputName.getName().equals(PARTICIPANT_NAME_ALL)) {
29+
printAllParticipantResults(ladderResults);
30+
} else {
31+
printSingleParticipantResult(inputName, ladderResults);
32+
}
33+
}
34+
35+
private static void printHeader() {
36+
System.out.println("실행 결과");
37+
}
38+
39+
private static void printAllParticipantResults(LadderResults ladderResults) {
40+
ladderResults.getAllResults().forEach((participant, result) ->
41+
System.out.println(participant.getName() + " : " + result.getResult()));
42+
}
43+
44+
private static void printSingleParticipantResult(Name name, LadderResults ladderResults) {
45+
System.out.println(ladderResults.getResultForParticipant(name).getResult());
46+
}
47+
2148
public static void printNames(Names names) {
2249
String strNames = names.getNames().stream()
2350
.map(name -> String.format(NAME_FORMAT, name.getName()))

0 commit comments

Comments
 (0)