-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathCarService.java
More file actions
89 lines (68 loc) · 2.08 KB
/
CarService.java
File metadata and controls
89 lines (68 loc) · 2.08 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
package service;
import camp.nextstep.edu.missionutils.Randoms;
import domain.Car;
import message.GameMessage;
import java.util.ArrayList;
import java.util.Collections;
public class CarService {
private final ArrayList<Car> carList;
private final StringBuilder sb;
public CarService() {
carList = new ArrayList<>();
sb = new StringBuilder();
}
public void close() {
}
public void fill(String[] carNameArr,int[] distance) {
int i = 0;
for(String name : carNameArr) {
carList.add(new Car(name,distance[i++]));
}
}
public void fill(String[] carNameArr) {
for(String name : carNameArr) {
carList.add(new Car(name));
}
}
public String getResult(int count) {
while(count-- > 0) {
race();
if(count != 0) {
sb.append(GameMessage.newLine.getMessage());
}
}
return sb.toString();
}
private void race() {
for(Car car : carList) {
int randomNumber = Randoms.pickNumberInRange(0,9);
car.move(randomNumber);
raceRecord(car);
}
}
private void raceRecord(Car car) {
sb.append(car.getName()).append(GameMessage.equal.getMessage());
buildBar(car.getDistance());
}
private void buildBar(int distance) {
while(distance-- > 0) {
sb.append(GameMessage.bar.getMessage());
}
sb.append(GameMessage.newLine.getMessage());
}
public String getWinners() {
Collections.sort(carList);
int winDistance = carList.get(0).getDistance();
ArrayList<String> winnerList = makeWinnerList(winDistance);
return String.join(", ",winnerList);
}
private ArrayList<String> makeWinnerList(int winDistance) {
ArrayList<String> winnerList = new ArrayList<>();
for(Car car : carList) {
int distance = car.getDistance();
if(winDistance > distance) { break; }
winnerList.add(car.getName());
}
return winnerList;
}
}