forked from JaeHongDev/java-baseball
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathBaseballGame.java
More file actions
109 lines (86 loc) · 2.82 KB
/
BaseballGame.java
File metadata and controls
109 lines (86 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package baseball;
import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class BaseballGame {
private Integer answer;
public BaseballGame() {
this.answer = 0;
}
public Integer getAnswer() {
return answer;
}
public int generateAnswer() {
AtomicInteger index = new AtomicInteger();
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
while (numbers.size() < 3) {
numbers.add(Randoms.pickNumberInRange(1, 9));
}
answer = numbers.stream().reduce(0, (x, y) -> {
int result = (int) (x + y * Math.pow(10, 2 - index.doubleValue()));
index.getAndIncrement();
return result;
});
return answer;
}
public int receiveUserInput() {
System.out.print("숫자를 입력해주세요 : ");
String input = Console.readLine();
validateInput(input);
try {
return Integer.parseInt(input);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("잘못된 입력 형식입니다.");
}
}
private void validateInput(String input) {
if (input.length() != 3) {
throw new IllegalArgumentException("잘못된 입력 형식입니다.");
}
}
public boolean score(int answer, int userAnswer) {
List<Integer> answerDigits = getDigits(answer);
List<Integer> userAnswerDigits = getDigits(userAnswer);
int strike = 0;
int ball = 0;
for (int index = 0; index < 3; index++) {
int num = userAnswerDigits.get(index);
if (num == answerDigits.get(index)) {
strike++;
continue;
}
if (answerDigits.contains(num)) {
ball++;
}
}
StringBuilder sb = new StringBuilder();
if (strike == 0 && ball == 0) {
sb.append("낫싱");
}
if (ball > 0) {
sb.append(ball).append("볼 ");
}
if (strike > 0) {
sb.append(strike).append("스트라이크 ");
}
System.out.println(sb);
if (strike == 3) {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
return true;
}
return false;
}
private static List<Integer> getDigits(int num) {
List<Integer> answerNums = new ArrayList<>();
int current = num;
for (int i = 0; i < 3; i++) {
answerNums.add(0, current % 10);
current /= 10;
}
return answerNums;
}
}