-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathLottoController.java
More file actions
102 lines (87 loc) · 3.32 KB
/
LottoController.java
File metadata and controls
102 lines (87 loc) · 3.32 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
package lotto.controller;
import java.util.List;
import java.util.Set;
import lotto.model.Game;
import lotto.model.Lotto;
import lotto.model.Player;
import lotto.service.LottoService;
import lotto.util.MajorErrorMessage;
import lotto.util.Validator;
import lotto.util.Validator.dataType;
import lotto.view.LottoView;
public class LottoController {
final LottoView lottoView;
final LottoService lottoService;
public void startGame() {
boolean buyContinue = true;
boolean setGameContinue = true;
while (buyContinue) {
buyContinue = buyStep();
}
while (setGameContinue) {
setGameContinue = setGameStep();
}
resultStep();
}
public boolean buyStep() {
try {
Player player = setLottoMoney();
attemptLottoPurchase(player);
lottoService.setPlayer(player);
return false;
} catch (IllegalArgumentException e) {
lottoView.outputCaughtError(e.getMessage());
return true;
}
}
public boolean setGameStep() {
try {
Game gameStep = setJackpot();
gameStep = setBonus(gameStep);
lottoService.setGame(gameStep);
return false;
} catch (Exception e) {
lottoView.outputCaughtError(MajorErrorMessage.LOTTONUM_WRONG.getMessage() + e.getMessage());
return true;
}
}
public void resultStep() {
int[] lottoResultTypes = lottoService.calculateLottoResultType();
float lottoResultProfitPercent = lottoService.calculateLottoResultProfit(lottoResultTypes);
lottoView.outputLottoResult(lottoResultTypes, lottoResultProfitPercent);
}
Player setLottoMoney() {
try {
String inputLine = lottoView.inputPurchaseMoney();
return Player.setLottoMoney(Validator.isSingleInputType(inputLine, dataType.NUMBER));
} catch (Exception e) {
throw new IllegalArgumentException(MajorErrorMessage.MONEY_WRONG.getMessage() + e.getMessage());
}
}
void attemptLottoPurchase(Player player) {
try {
player.buyLotto();
lottoView.outputPurchasedLottoNum(player.getPurchasedLottoNum());
player.getPurchasedLottoList().forEach(lotto -> lottoView.outputPurchasedLottoDetail(lotto.getNumbers()));
} catch (Exception e) {
throw new IllegalArgumentException(MajorErrorMessage.LOTTONUM_WRONG.getMessage() + e.getMessage());
}
}
Game setJackpot() {
String inputLine = lottoView.inputJackpotNumber();
List<Integer> jackpotNumbers = Validator.isMultipleInputType(inputLine, dataType.NUMBER, ",");
Validator.isListItemInRange(Lotto.getLottoRangeStart(), Lotto.getLottoRangeEnd(), jackpotNumbers);
Set<Integer> jackpotNumberSet = Validator.isListItemDuplicated(jackpotNumbers);
return Game.setJackpot(jackpotNumberSet);
}
Game setBonus(Game game) {
String inputLine = lottoView.inputBonusNumber();
int bonusNumber = Validator.isSingleInputType(inputLine, dataType.NUMBER);
game.setBonus(bonusNumber);
return game;
}
public LottoController(LottoView lottoView, LottoService lottoService) {
this.lottoView = lottoView;
this.lottoService = lottoService;
}
}