-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathNumbers.java
More file actions
64 lines (54 loc) · 1.56 KB
/
Numbers.java
File metadata and controls
64 lines (54 loc) · 1.56 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
package domain;
import util.Validator;
import java.util.ArrayList;
import java.util.List;
public class Numbers {
private static final int LENGTH = 3;
private final List<Number> numbers;
private Numbers(List<Number> numbers) {
this.numbers = numbers;
}
public static Numbers from(String input) {
String error = Validator.guessError(input);
if (error != null) {
throw new IllegalArgumentException(error);
}
return new Numbers(parse(input));
}
private static List<Number> parse(String input) {
List<Number> parsedNumbers = new ArrayList<>(LENGTH);
for (char digitChar : input.toCharArray()) {
parsedNumbers.add(Number.fromChar(digitChar));
}
return parsedNumbers;
}
public int get(int index) {
return numbers.get(index).value();
}
public boolean contains(int number) {
for (Number numberItem : numbers) {
if (numberItem.same(number)) {
return true;
}
}
return false;
}
public int size() {
return numbers.size();
}
public JudgeCount judge(Numbers guess) {
int ball = 0;
int strike = 0;
for (int index = 0; index < size(); index++) {
int guessDigit = guess.get(index);
if (guessDigit == get(index)) {
strike++;
continue;
}
if (contains(guessDigit)) {
ball++;
}
}
return new JudgeCount(ball, strike);
}
}