From 0d907ffb3299c8afcb80e7c63e407cb1493078a2 Mon Sep 17 00:00:00 2001 From: OptimistLabyrinth Date: Sat, 26 Nov 2022 21:53:09 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=8B=9C=20=EB=B2=88=ED=98=B8=20=EC=98=A4=EB=A6=84?= =?UTF-8?q?=EC=B0=A8=EC=88=9C=20=EC=A0=95=EB=A0=AC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto2/model/Lotto.java | 6 +++++- src/main/java/lotto2/model/LottoNumber.java | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/lotto2/model/Lotto.java b/src/main/java/lotto2/model/Lotto.java index 2210cc0d7..e4c4fdae6 100644 --- a/src/main/java/lotto2/model/Lotto.java +++ b/src/main/java/lotto2/model/Lotto.java @@ -1,5 +1,7 @@ package lotto2.model; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class Lotto { @@ -19,6 +21,8 @@ public List lottoNumbers() { @Override public String toString() { - return lottoNumbers.toString(); + final List listToPrint = new ArrayList<>(lottoNumbers); + Collections.sort(listToPrint, (o1, o2) -> Integer.compare(o1.value(), o2.value())); + return listToPrint.toString(); } } diff --git a/src/main/java/lotto2/model/LottoNumber.java b/src/main/java/lotto2/model/LottoNumber.java index 745b046f3..77fde1c79 100644 --- a/src/main/java/lotto2/model/LottoNumber.java +++ b/src/main/java/lotto2/model/LottoNumber.java @@ -36,6 +36,10 @@ private boolean lottoNumberOutOfRange(int tokenValue) { return tokenValue < LottoConstant.LOTTO_MINIMUM_NUMBER || LottoConstant.LOTTO_MAXIMUM_NUMBER < tokenValue; } + public int value() { + return value; + } + @Override public boolean equals(Object o) { if (this == o) { From 1d9a83fd83eca0ad9c90327652b14a7347c8c8ee Mon Sep 17 00:00:00 2001 From: OptimistLabyrinth Date: Sat, 26 Nov 2022 21:56:34 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=EC=97=90=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EC=88=AB=EC=9E=90=EB=8A=94=206=20?= =?UTF-8?q?=EA=B0=9C=20=EC=9D=B4=EA=B3=A0=20=EC=88=AB=EC=9E=90=EC=97=90=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EC=9D=B4=20=EC=97=86=EC=9D=8C=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EC=9E=A5=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LottoGeneratorFromWinningNumbers 클래스에서 확인하던 로직을 Lotto 클래스 생성자에서 확인하도록 이동 --- src/main/java/lotto2/model/Lotto.java | 14 +++++++++++--- .../LottoGeneratorFromWinningNumbers.java | 10 ---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/lotto2/model/Lotto.java b/src/main/java/lotto2/model/Lotto.java index e4c4fdae6..23eff66c9 100644 --- a/src/main/java/lotto2/model/Lotto.java +++ b/src/main/java/lotto2/model/Lotto.java @@ -1,16 +1,24 @@ package lotto2.model; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import lotto2.model.constant.LottoConstant; + +import java.util.*; public class Lotto { private final List lottoNumbers; public Lotto(List lottoNumbers) { + checkDuplicateNumberInList(lottoNumbers); this.lottoNumbers = lottoNumbers; } + private void checkDuplicateNumberInList(List winningLottoNumbers) throws IllegalArgumentException { + final Set duplicateCheck = new HashSet<>(winningLottoNumbers); + if (duplicateCheck.size() != LottoConstant.COUNT_OF_NUMBER_IN_LOTTO) { + throw new IllegalArgumentException("최종적으로 당첨 번호는 반드시 6 개가 되어야 합니다."); + } + } + public boolean contains(LottoNumber lottoNumber) { return lottoNumbers.contains(lottoNumber); } diff --git a/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java b/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java index 358e7afe8..97add5020 100644 --- a/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java +++ b/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java @@ -6,9 +6,7 @@ import lotto2.model.LottoNumber; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; public class LottoGeneratorFromWinningNumbers { private final String input; @@ -25,7 +23,6 @@ public Lotto generate() { throw new IllegalArgumentException("당첨 번호는 반드시 6 개를 입력해야 합니다."); } final List winningLottoNumbers = toLottoNumbers(tokens); - checkDuplicateNumberInList(winningLottoNumbers); return new Lotto(winningLottoNumbers); } @@ -60,11 +57,4 @@ private List toLottoNumbers(String[] tokens) { } return lottoNumbersData; } - - private void checkDuplicateNumberInList(List winningLottoNumbers) throws IllegalArgumentException { - final Set duplicateCheck = new HashSet<>(winningLottoNumbers); - if (duplicateCheck.size() != LottoConstant.COUNT_OF_NUMBER_IN_LOTTO) { - throw new IllegalArgumentException("최종적으로 당첨 번호는 반드시 6 개가 되어야 합니다."); - } - } } From fc268bff5e8fb3b33f2d08bc890ff98acf0a1fa7 Mon Sep 17 00:00:00 2001 From: OptimistLabyrinth Date: Sat, 26 Nov 2022 22:03:55 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20getMatchCount=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20Lotto=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99,=20setCountForEachWinningRank=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LottoCalculationUtils 클래스에 있던 getMatchCount 메서드를 Lotto 클래스로 이동 setCountForEachWinningRank 메서드에서 예외 처리 부족으로 발생하던 버그 수정 --- .../java/lotto2/controller/LottoController.java | 5 ++--- src/main/java/lotto2/model/Lotto.java | 13 ++++++++++++- .../java/lotto2/model/LottoCalculationUtils.java | 15 +++------------ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/lotto2/controller/LottoController.java b/src/main/java/lotto2/controller/LottoController.java index c9fcef0f6..50f8f80d3 100644 --- a/src/main/java/lotto2/controller/LottoController.java +++ b/src/main/java/lotto2/controller/LottoController.java @@ -69,9 +69,8 @@ private Map calculateLotto( final LottoCalculationUtils lottoCalculationUtils = new LottoCalculationUtils(); Map countForEachWinningRank = lottoCalculationUtils.initializeCountMap(); for (Lotto eachLotto : lottoBucket) { - final int matchCount = lottoCalculationUtils.getMatchCount(eachLotto, winningNumbers); - final WinningRank winningRank = lottoCalculationUtils.winningRankForMatchCount( - matchCount, + final int matchCount = eachLotto.getMatchCount(winningNumbers); + final WinningRank winningRank = lottoCalculationUtils.winningRankForMatchCount(matchCount, eachLotto.contains(bonusNumber)); countForEachWinningRank = lottoCalculationUtils.setCountForEachWinningRank( countForEachWinningRank, winningRank); diff --git a/src/main/java/lotto2/model/Lotto.java b/src/main/java/lotto2/model/Lotto.java index 23eff66c9..bbbc7c04f 100644 --- a/src/main/java/lotto2/model/Lotto.java +++ b/src/main/java/lotto2/model/Lotto.java @@ -27,10 +27,21 @@ public List lottoNumbers() { return lottoNumbers; } + public int getMatchCount(Lotto other) { + final List otherNumbers = other.lottoNumbers(); + int matchCount = 0; + for (LottoNumber lottoNumber : otherNumbers) { + if (lottoNumbers.contains(lottoNumber)) { + ++matchCount; + } + } + return matchCount; + } + @Override public String toString() { final List listToPrint = new ArrayList<>(lottoNumbers); - Collections.sort(listToPrint, (o1, o2) -> Integer.compare(o1.value(), o2.value())); + Collections.sort(listToPrint, Comparator.comparingInt(LottoNumber::value)); return listToPrint.toString(); } } diff --git a/src/main/java/lotto2/model/LottoCalculationUtils.java b/src/main/java/lotto2/model/LottoCalculationUtils.java index 88db55568..0cedc2415 100644 --- a/src/main/java/lotto2/model/LottoCalculationUtils.java +++ b/src/main/java/lotto2/model/LottoCalculationUtils.java @@ -3,7 +3,6 @@ import lotto2.model.enums.WinningRank; import java.util.HashMap; -import java.util.List; import java.util.Map; public class LottoCalculationUtils { @@ -17,17 +16,6 @@ public Map initializeCountMap() { return countForEachWinningRank; } - public int getMatchCount(Lotto eachLotto, Lotto winningNumbers) { - final List lottoWinningNumbers = winningNumbers.lottoNumbers(); - int matchCount = 0; - for (LottoNumber currentWinningNumber : lottoWinningNumbers) { - if (eachLotto.contains(currentWinningNumber)) { - ++matchCount; - } - } - return matchCount; - } - public WinningRank winningRankForMatchCount(int matchCount, boolean containsBonusNumber) { if (matchCount == 3) { return WinningRank.FIFTH; @@ -51,6 +39,9 @@ public Map setCountForEachWinningRank( Map countMap, WinningRank winningRank) { final Map countForEachWinningRank = new HashMap<>(countMap); + if (winningRank == WinningRank.NONE) { + return countMap; + } final int count = countForEachWinningRank.get(winningRank); countForEachWinningRank.put(winningRank, count + 1); return countForEachWinningRank; From caa6e53debe952c30ec90469c67ba2ea621d47e4 Mon Sep 17 00:00:00 2001 From: OptimistLabyrinth Date: Sat, 26 Nov 2022 22:19:26 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8,=20=EB=B3=B4=EB=84=88=EC=8A=A4=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=EB=A5=BC=20=ED=95=A8=EA=BB=98=20=EA=B4=80=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20WinningLotto=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lotto2/controller/LottoController.java | 25 +++++++++---------- src/main/java/lotto2/model/WinningLotto.java | 22 ++++++++++++++++ 2 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 src/main/java/lotto2/model/WinningLotto.java diff --git a/src/main/java/lotto2/controller/LottoController.java b/src/main/java/lotto2/controller/LottoController.java index 50f8f80d3..9a865b2c4 100644 --- a/src/main/java/lotto2/controller/LottoController.java +++ b/src/main/java/lotto2/controller/LottoController.java @@ -22,9 +22,9 @@ public LottoController(InputView inputView, OutputView outputView) { public void run() { final MoneyToBuy money = acceptInputMoney(); final List lottoBucket = generateManyLotto(money); - final Lotto winningNumbers = acceptWinningNumbers(); - final LottoNumber bonusNumber = acceptBonusNumber(); - final Map result = calculateLotto(lottoBucket, winningNumbers, bonusNumber); + final WinningLotto winningLotto = acceptWinningNumbers(); + acceptBonusNumber(winningLotto); + final Map result = calculateLotto(lottoBucket, winningLotto); final List winningRankCounts = winningRankCountsAsArray(result); displayStatistics(winningRankCounts); final double profitRatio = calculateProfitRatio(money, winningRankCounts); @@ -52,26 +52,25 @@ private Lotto generateEachLotto() { return LottoGeneratorRandom.generate(); } - private Lotto acceptWinningNumbers() { + private WinningLotto acceptWinningNumbers() { final String input = inputView.inputWinningNumbers(); final LottoGeneratorFromWinningNumbers lottoGenerator = new LottoGeneratorFromWinningNumbers(input); - return lottoGenerator.generate(); + return new WinningLotto(lottoGenerator.generate()); } - private LottoNumber acceptBonusNumber() { - return inputView.inputBonusNumber(); + private WinningLotto acceptBonusNumber(WinningLotto winningLotto) { + final LottoNumber bonusNumber = inputView.inputBonusNumber(); + winningLotto.setBonusNumber(bonusNumber); + return winningLotto; } - private Map calculateLotto( - List lottoBucket, - Lotto winningNumbers, - LottoNumber bonusNumber) { + private Map calculateLotto(List lottoBucket, WinningLotto winningLotto) { final LottoCalculationUtils lottoCalculationUtils = new LottoCalculationUtils(); Map countForEachWinningRank = lottoCalculationUtils.initializeCountMap(); for (Lotto eachLotto : lottoBucket) { - final int matchCount = eachLotto.getMatchCount(winningNumbers); + final int matchCount = eachLotto.getMatchCount(winningLotto.getLotto()); final WinningRank winningRank = lottoCalculationUtils.winningRankForMatchCount(matchCount, - eachLotto.contains(bonusNumber)); + eachLotto.contains(winningLotto.getBonusNumber())); countForEachWinningRank = lottoCalculationUtils.setCountForEachWinningRank( countForEachWinningRank, winningRank); } diff --git a/src/main/java/lotto2/model/WinningLotto.java b/src/main/java/lotto2/model/WinningLotto.java new file mode 100644 index 000000000..e0110a53e --- /dev/null +++ b/src/main/java/lotto2/model/WinningLotto.java @@ -0,0 +1,22 @@ +package lotto2.model; + +public class WinningLotto { + private final Lotto lotto; + private LottoNumber bonusNumber; + + public WinningLotto(Lotto lotto) { + this.lotto = lotto; + } + + public Lotto getLotto() { + return lotto; + } + + public LottoNumber getBonusNumber() { + return bonusNumber; + } + + public void setBonusNumber(LottoNumber bonusNumber) { + this.bonusNumber = bonusNumber; + } +} From 39b31b50187ad0dcfc91a145293f38807140b842 Mon Sep 17 00:00:00 2001 From: OptimistLabyrinth Date: Sat, 26 Nov 2022 23:07:40 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=EC=88=98=EB=8F=99=20=EB=A1=9C?= =?UTF-8?q?=EB=98=90=20=EA=B5=AC=EB=A7=A4=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lotto2/controller/LottoController.java | 44 +++++++++++++------ .../java/lotto2/model/ManualLottoCount.java | 37 ++++++++++++++++ src/main/java/lotto2/model/MoneyToBuy.java | 4 +- ....java => LottoGeneratorFromUserInput.java} | 4 +- src/main/java/lotto2/view/InputView.java | 27 +++++++++++- src/main/java/lotto2/view/OutputView.java | 8 +--- 6 files changed, 99 insertions(+), 25 deletions(-) create mode 100644 src/main/java/lotto2/model/ManualLottoCount.java rename src/main/java/lotto2/model/generator/{LottoGeneratorFromWinningNumbers.java => LottoGeneratorFromUserInput.java} (94%) diff --git a/src/main/java/lotto2/controller/LottoController.java b/src/main/java/lotto2/controller/LottoController.java index 9a865b2c4..020ec85ea 100644 --- a/src/main/java/lotto2/controller/LottoController.java +++ b/src/main/java/lotto2/controller/LottoController.java @@ -3,7 +3,7 @@ import lotto2.model.*; import lotto2.model.enums.LottoPrize; import lotto2.model.enums.WinningRank; -import lotto2.model.generator.LottoGeneratorFromWinningNumbers; +import lotto2.model.generator.LottoGeneratorFromUserInput; import lotto2.model.generator.LottoGeneratorRandom; import lotto2.view.InputView; import lotto2.view.OutputView; @@ -20,31 +20,43 @@ public LottoController(InputView inputView, OutputView outputView) { } public void run() { - final MoneyToBuy money = acceptInputMoney(); - final List lottoBucket = generateManyLotto(money); + final MoneyToBuy moneyToBuy = acceptInputMoney(); + final ManualLottoCount manualLottoCount = acceptManualCount(moneyToBuy); + final List lottoBucket = acceptManyManualLotto(manualLottoCount); + final int automaticLottoCount = getAutomaticLottoCount(moneyToBuy, manualLottoCount); + generateManyAutomaticLotto(automaticLottoCount, lottoBucket); + displayAllLotto(manualLottoCount, automaticLottoCount, lottoBucket); final WinningLotto winningLotto = acceptWinningNumbers(); acceptBonusNumber(winningLotto); final Map result = calculateLotto(lottoBucket, winningLotto); final List winningRankCounts = winningRankCountsAsArray(result); displayStatistics(winningRankCounts); - final double profitRatio = calculateProfitRatio(money, winningRankCounts); + final double profitRatio = calculateProfitRatio(moneyToBuy, winningRankCounts); displayProfitRatio(profitRatio); } private MoneyToBuy acceptInputMoney() { - final MoneyToBuy money = inputView.inputMoney(); - outputView.printNumberOfBoughtLotto(money); - return money; + return inputView.inputMoney(); } - private List generateManyLotto(MoneyToBuy money) { - final List lottoBucket = new ArrayList<>(); - final Round round = new Round(money.getCount()); + private ManualLottoCount acceptManualCount(MoneyToBuy moneyToBuy) { + return inputView.inputManualCount(moneyToBuy); + } + + private List acceptManyManualLotto(ManualLottoCount lottoCount) { + return inputView.inputManyManualLotto(lottoCount); + } + + private int getAutomaticLottoCount(MoneyToBuy moneyToBuy, ManualLottoCount manualLottoCount) { + return moneyToBuy.count() - manualLottoCount.count(); + } + + private List generateManyAutomaticLotto(int count, List lottoBucket) { + final Round round = new Round(count); while (round.hasNext()) { round.goNext(); lottoBucket.add(generateEachLotto()); } - outputView.printListOfLotto(lottoBucket); return lottoBucket; } @@ -52,9 +64,13 @@ private Lotto generateEachLotto() { return LottoGeneratorRandom.generate(); } + private void displayAllLotto(ManualLottoCount manualLottoCount, int automaticLottoCount, List lottoBucket) { + outputView.printListOfLotto(manualLottoCount, automaticLottoCount, lottoBucket); + } + private WinningLotto acceptWinningNumbers() { final String input = inputView.inputWinningNumbers(); - final LottoGeneratorFromWinningNumbers lottoGenerator = new LottoGeneratorFromWinningNumbers(input); + final LottoGeneratorFromUserInput lottoGenerator = new LottoGeneratorFromUserInput(input); return new WinningLotto(lottoGenerator.generate()); } @@ -91,12 +107,12 @@ private void displayStatistics(List winningRankCounts) { outputView.printStatistics(winningRankCounts); } - private double calculateProfitRatio(MoneyToBuy money, List winningRankCounts) { + private double calculateProfitRatio(MoneyToBuy moneyToBuy, List winningRankCounts) { int totalPrize = 0; for (final WinningRankCountDto winningRankCount : winningRankCounts) { totalPrize += winningRankCount.getLottoPrize().getPrize() * winningRankCount.getCount(); } - return (double) totalPrize / money.getValue(); + return (double) totalPrize / moneyToBuy.value(); } private void displayProfitRatio(double profitRatio) { diff --git a/src/main/java/lotto2/model/ManualLottoCount.java b/src/main/java/lotto2/model/ManualLottoCount.java new file mode 100644 index 000000000..98a93ea7e --- /dev/null +++ b/src/main/java/lotto2/model/ManualLottoCount.java @@ -0,0 +1,37 @@ +package lotto2.model; + +public class ManualLottoCount { + private final int count; + + public ManualLottoCount(String input, MoneyToBuy moneyToBuy) { + this.count = parseInt(input, moneyToBuy); + } + + private int parseInt(String input, MoneyToBuy moneyToBuy) { + int count; + try { + count = Integer.parseInt(input); + } catch (Exception e) { + throw new NumberFormatException("수동으로 구매할 로또는 숫자를 입력해야 합니다."); + } + if (isNegative(count)) { + throw new IllegalArgumentException("수동으로 구매할 로또는 반드시 0 이상의 정수여야 합니다."); + } + if (isMoreThanTotalCount(moneyToBuy, count)) { + throw new IllegalArgumentException("수동으로 구매할 로또는 입력한 금액으로 구입 가능한 총 개수보다 많을 수 없습니다."); + } + return count; + } + + private boolean isNegative(int count) { + return count < 0; + } + + private boolean isMoreThanTotalCount(MoneyToBuy moneyToBuy, int count) { + return moneyToBuy.count() < count; + } + + public int count() { + return count; + } +} diff --git a/src/main/java/lotto2/model/MoneyToBuy.java b/src/main/java/lotto2/model/MoneyToBuy.java index f4308f1c8..2c6b3cd5e 100644 --- a/src/main/java/lotto2/model/MoneyToBuy.java +++ b/src/main/java/lotto2/model/MoneyToBuy.java @@ -37,11 +37,11 @@ private boolean divisibleWithoutRemainder(int inputMoney) { return inputMoney % PRICE_OF_SINGLE_LOTTO_TICKET == 0; } - public int getValue() { + public int value() { return value; } - public int getCount() { + public int count() { return count; } } diff --git a/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java b/src/main/java/lotto2/model/generator/LottoGeneratorFromUserInput.java similarity index 94% rename from src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java rename to src/main/java/lotto2/model/generator/LottoGeneratorFromUserInput.java index 97add5020..538648df9 100644 --- a/src/main/java/lotto2/model/generator/LottoGeneratorFromWinningNumbers.java +++ b/src/main/java/lotto2/model/generator/LottoGeneratorFromUserInput.java @@ -8,12 +8,12 @@ import java.util.ArrayList; import java.util.List; -public class LottoGeneratorFromWinningNumbers { +public class LottoGeneratorFromUserInput { private final String input; private static final String LOTTO_NUMBERS_STRING_DELIMITER_REGEX = ","; - public LottoGeneratorFromWinningNumbers(String input) { + public LottoGeneratorFromUserInput(String input) { this.input = input; } diff --git a/src/main/java/lotto2/view/InputView.java b/src/main/java/lotto2/view/InputView.java index 91cf214b2..049a112b5 100644 --- a/src/main/java/lotto2/view/InputView.java +++ b/src/main/java/lotto2/view/InputView.java @@ -1,7 +1,11 @@ package lotto2.view; +import lotto2.controller.Round; import lotto2.model.*; +import lotto2.model.generator.LottoGeneratorFromUserInput; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class InputView { @@ -12,8 +16,29 @@ public MoneyToBuy inputMoney() { return new MoneyToBuy(input); } + public ManualLottoCount inputManualCount(MoneyToBuy moneyToBuy) { + System.out.print("\n수동으로 구매할 로또 수를 입력해 주세요.\n"); + final Scanner scanner = new Scanner(System.in); + final String input = scanner.nextLine(); + return new ManualLottoCount(input, moneyToBuy); + } + + public List inputManyManualLotto(ManualLottoCount lottoCount) { + System.out.print("\n수동으로 구매할 번호를 입력해 주세요.\n"); + final List lottoBucket = new ArrayList<>(); + final Round round = new Round(lottoCount.count()); + while (round.hasNext()) { + round.goNext(); + final Scanner scanner = new Scanner(System.in); + final String input = scanner.nextLine(); + final LottoGeneratorFromUserInput lottoGenerator = new LottoGeneratorFromUserInput(input); + lottoBucket.add(lottoGenerator.generate()); + } + return lottoBucket; + } + public String inputWinningNumbers() { - System.out.print("지난 주 당첨 번호를 입력해 주세요.\n"); + System.out.print("\n지난 주 당첨 번호를 입력해 주세요.\n"); final Scanner scanner = new Scanner(System.in); return scanner.nextLine(); } diff --git a/src/main/java/lotto2/view/OutputView.java b/src/main/java/lotto2/view/OutputView.java index 2ad6f4bf9..ca3d6f99f 100644 --- a/src/main/java/lotto2/view/OutputView.java +++ b/src/main/java/lotto2/view/OutputView.java @@ -9,15 +9,11 @@ public class OutputView { private static final DecimalFormat decimalFormat = new DecimalFormat("0.00"); - public void printNumberOfBoughtLotto(MoneyToBuy money) { - System.out.printf("%d개를 구매했습니다.\n", money.getCount()); - } - - public void printListOfLotto(List lottoBucket) { + public void printListOfLotto(ManualLottoCount manualLottoCount, int automaticLottoCount, List lottoBucket) { + System.out.printf("\n수동으로 %d장, 자동으로 %d개를 구매했습니다.\n", manualLottoCount.count(), automaticLottoCount); for (Lotto lotto : lottoBucket) { printEachLotto(lotto); } - System.out.println(); } private void printEachLotto(Lotto lotto) {