diff --git a/.gitignore b/.gitignore index 573e847..09f21d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea/ .gradle/ build/ +out \ No newline at end of file diff --git a/README.md b/README.md index 7c9722c..7c50e48 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,21 @@ # ๐Ÿš€ ๋กœ๋˜ 1๋‹จ๊ณ„ - ์ž๋™ +## ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก +- [ ] ๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. +- [ ] ๊ตฌ์ž…๊ธˆ์•ก์— ๋”ฐ๋ผ ๋ช‡๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๊ตฌ์ž…ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค. +- [ ] ๋กœ๋˜์˜ ๊ฐฏ์ˆ˜์— ๋งž์ถ”์–ด 1~45๊นŒ์ง€ 6๊ฐœ์˜ ๋žœ๋ค ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค. +- [ ] ์ง€๋‚œ ์ฃผ ๋‹ด์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. +- [ ] ๋ณด๋„ˆ์Šค ๋ณผ์„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. +- [ ] ๋‹ด์ฒญ ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. +- [ ] ๋กœ๋˜์™€ ๋‹ด์ฒญ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ ๋ช‡๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋งž์•˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค. +- [ ] ์ด ์ˆ˜์ต๋ฅ ์„ ์†Œ์ˆซ์  2๋ฒˆ์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค. + +## ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ชฉ๋ก +- [ ] ๊ตฌ์ž…๊ธˆ์•ก์ด 0์›์ผ ๊ฒฝ์šฐ ๋กœ๋˜ ํ•œ์žฅ์˜ ๊ฐ€๊ฒฉ์ด 1000์›์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”` ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. +- [ ] ๋กœ๋˜ ๋„˜๋ฒ„์˜ ๋ฒ”์œ„๋Š” 1~45๊นŒ์ง€๋กœ ์ œํ•œํ•˜๋ฉฐ ์ด์™ธ์˜ ์ˆซ์ž๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. +- [ ] ๋‹ด์ฒญ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ์ƒํ™ฉ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. +- [ ] ์ €๋ฒˆ์ฃผ ๋‹ด์ฒญ๋ฒˆํ˜ธ๋“ค์ด 2๊ฐœ ์ด์ƒ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. + ## ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ - ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋กœ๋˜๋ฅผ ๋ฐœ๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค. - ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 1000์›์ด๋‹ค. @@ -27,7 +43,7 @@ 1, 2, 3, 4, 5, 6 ๋ณด๋„ˆ์Šค ๋ณผ์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. 7 - + ๋‹น์ฒจ ํ†ต๊ณ„ --------- 3๊ฐœ ์ผ์น˜ (5000์›)- 1๊ฐœ @@ -53,4 +69,4 @@ ## ํžŒํŠธ - ๋กœ๋˜ ์ž๋™ ์ƒ์„ฑ์€ Collections.shuffle() ๋ฉ”์†Œ๋“œ ํ™œ์šฉํ•œ๋‹ค. - Collections.sort() ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ์ •๋ ฌ ๊ฐ€๋Šฅํ•˜๋‹ค. -- ArrayList์˜ contains() ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์–ด๋–ค ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. +- ArrayList์˜ contains() ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์–ด๋–ค ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. \ No newline at end of file diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java new file mode 100644 index 0000000..3a720db --- /dev/null +++ b/src/main/java/lotto/LottoApplication.java @@ -0,0 +1,59 @@ +package lotto; + +import lotto.domain.LottoMachine; +import lotto.domain.Profit; +import lotto.domain.WinningStatus; +import lotto.domain.lastweekwinninglotto.LastWeekWinningBonusBall; +import lotto.domain.lastweekwinninglotto.LastWeekWinningLotto; +import lotto.domain.lottoticket.LottoTicket; +import lotto.domain.lottoticket.Lottos; +import lotto.domain.lottoticket.NumberOfLottoTicket; +import lotto.domain.strategy.RandomLottoNumberStrategy; +import lotto.ui.Printer; +import lotto.ui.Receiver; + +import java.util.ArrayList; +import java.util.List; + +public class LottoApplication { + private final Printer printer = new Printer(); + private final Receiver receiver = new Receiver(); + private static LottoMachine lottoMachine = new LottoMachine(); + private final RandomLottoNumberStrategy randomLottoNumberStrategy = new RandomLottoNumberStrategy(); + + public void run() { + printer.requestPurchaseAmount(); + NumberOfLottoTicket numberOfLottoTicket = new NumberOfLottoTicket(receiver.receiveLottoTotalAmount()); + printer.printNumberOfLottoTicket(numberOfLottoTicket); + Lottos lottos = makeLottos(numberOfLottoTicket); + printer.printAllLotto(lottos); + + printer.requestLastWeekLottoWinningNumber(); + List LastWeekLottoWinningNumbers = receiver.receiveLastWeekLottoWinningNumbers(); + LastWeekWinningLotto lastWeekWinningLotto = new LastWeekWinningLotto(LastWeekLottoWinningNumbers); + + printer.requestLottoBonusBallNumber(); + LastWeekWinningBonusBall lastWeekWinningBonusBall = new LastWeekWinningBonusBall(receiver.receiveLottoBonusBallNumber(), lastWeekWinningLotto); + ArrayList getLottoPrices = lottoMachine.Discriminator(lottos, lastWeekWinningLotto, lastWeekWinningBonusBall, numberOfLottoTicket); + Profit profit = new Profit(getLottoPrices, numberOfLottoTicket); + + printer.printLottoProfit(profit.getProfit()); + printer.printIsLottoProfit(profit.isProfit()); + } + + private Lottos makeLottos(NumberOfLottoTicket numberOfLottoTicket) { + ArrayList lottoDummy = new ArrayList<>(); + for (int i = 0; i < numberOfLottoTicket.getNumberOfLottoTicket(); i++) { + LottoTicket lotto = new LottoTicket(randomLottoNumberStrategy.getRandomLottoNumbers()); + lottoDummy.add(lotto); + } + Lottos lottos = new Lottos(lottoDummy); + return lottos; + } + + public static void main(String[] args) { + LottoApplication app = new LottoApplication(); + app.run(); + } +} + diff --git a/src/main/java/lotto/domain/EnumWinningStatus.java b/src/main/java/lotto/domain/EnumWinningStatus.java new file mode 100644 index 0000000..d7fe396 --- /dev/null +++ b/src/main/java/lotto/domain/EnumWinningStatus.java @@ -0,0 +1,60 @@ +package lotto.domain; + +import lotto.domain.lottoticket.NumberOfLottoTicket; +import lotto.domain.lottowinningresult.LottoWinningBonusBallResult; +import lotto.domain.lottowinningresult.LottoWinningResult; +import lotto.ui.Printer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class EnumWinningStatus { + private static final int NOT_MATCH_LOTTO = 0; + private ArrayList lottoPrices = new ArrayList<>(); + private Map mappingLottoWithBonusBall = new HashMap<>(); + private Printer printer = new Printer(); + + public ArrayList getLottoPrices(LottoFactory lottoFactory, NumberOfLottoTicket numberOfLottoTicket){ + LottoWinningResult lottoWinningResults = lottoFactory.getLottoWinningResult(); + LottoWinningBonusBallResult lottoWinningBonusBallResult = lottoFactory.getLottoWinningBonusBallResult(); + + for (int i = 0; i < numberOfLottoTicket.getNumberOfLottoTicket(); i++) { + int lottoMatchedNumber = lottoWinningResults.getLottoWinningResult().get(i); + Boolean lottoBonusBallNumber = lottoWinningBonusBallResult.getLottoWinningBonusBallResult().get(i); + getWinningLottoTicketPrices(lottoMatchedNumber, lottoBonusBallNumber); + } + printer.printWinningStatistics(); + printer.printAllMatchedLottoResults(getMappingLottoWithBonusBall()); + return lottoPrices; + } + + private void getWinningLottoTicketPrices(int lottoMatchedNumber, boolean lottoBonusBallNumber) { + for(WinningStatus winningStatus: WinningStatus.values()){ + int matchedWinningNumberCount = winningStatus.getMatchCount(); + boolean isMatchedBonusBallCount = winningStatus.hasBonusBall(); + makeWinningLottoTicket(lottoMatchedNumber, matchedWinningNumberCount, isMatchedBonusBallCount, lottoBonusBallNumber, winningStatus); + } + } + + private void makeWinningLottoTicket( + int lottoMatchedNumber, + int matchedWinningNumberCount, + boolean isMatchedBonusBallCount, + boolean lottoBonusBallNumber, + WinningStatus winningStatus + ){ + if((lottoMatchedNumber == matchedWinningNumberCount) && (isMatchedBonusBallCount == lottoBonusBallNumber)){ + lottoPrices.add(winningStatus); + } + } + + private Map getMappingLottoWithBonusBall() { + for (WinningStatus key: lottoPrices + ) { + mappingLottoWithBonusBall.put(key, mappingLottoWithBonusBall.getOrDefault(key, 0)+1); + } + return mappingLottoWithBonusBall; + } + +} diff --git a/src/main/java/lotto/domain/LottoFactory.java b/src/main/java/lotto/domain/LottoFactory.java new file mode 100644 index 0000000..2a6acf3 --- /dev/null +++ b/src/main/java/lotto/domain/LottoFactory.java @@ -0,0 +1,23 @@ +package lotto.domain; + +import lotto.domain.lottowinningresult.LottoWinningBonusBallResult; +import lotto.domain.lottowinningresult.LottoWinningResult; + +public class LottoFactory { + private LottoWinningResult lottoWinningResult; + private LottoWinningBonusBallResult lottoWinningBonusBallResult; + + public LottoFactory(LottoWinningResult lottoWinningResults, LottoWinningBonusBallResult lottoWinningBonusBallResults){ + this.lottoWinningResult = lottoWinningResults; + this.lottoWinningBonusBallResult = lottoWinningBonusBallResults; + } + + public LottoWinningResult getLottoWinningResult(){ + return this.lottoWinningResult; + } + + public LottoWinningBonusBallResult getLottoWinningBonusBallResult(){ + return this.lottoWinningBonusBallResult; + } + +} diff --git a/src/main/java/lotto/domain/LottoMachine.java b/src/main/java/lotto/domain/LottoMachine.java new file mode 100644 index 0000000..af8f9ee --- /dev/null +++ b/src/main/java/lotto/domain/LottoMachine.java @@ -0,0 +1,68 @@ +package lotto.domain; + +import lotto.domain.lastweekwinninglotto.LastWeekWinningBonusBall; +import lotto.domain.lastweekwinninglotto.LastWeekWinningLotto; +import lotto.domain.lottoticket.LottoTicket; +import lotto.domain.lottoticket.Lottos; +import lotto.domain.lottoticket.NumberOfLottoTicket; +import lotto.domain.lottowinningresult.LottoWinningBonusBallResult; +import lotto.domain.lottowinningresult.LottoWinningResult; + +import java.util.ArrayList; +import java.util.List; + +public class LottoMachine { + EnumWinningStatus enumWinningStatus = new EnumWinningStatus(); + ArrayList lottoWinningResults = new ArrayList<>(); + ArrayList lottoWinningBonusBallResults = new ArrayList<>(); + + public ArrayList Discriminator( + Lottos lottos, + LastWeekWinningLotto lastWeekWinningLotto, + LastWeekWinningBonusBall lastWeekWinningBonusBall, + NumberOfLottoTicket numberOfLottoTicket + ){ + for (LottoTicket lotto : lottos.getLottos()) + { + List lottoMatchedResult = getMatchLottoNumber(lotto, lastWeekWinningLotto); + Boolean lottoMatchedBonusBallResult = getMatchLottoBonusBallNumber(lotto, lastWeekWinningBonusBall); + int matchLottoNumberCount = getMatchLottoNumberCount(lottoMatchedResult); + lottoWinningResults.add(matchLottoNumberCount); + lottoWinningBonusBallResults.add(lottoMatchedBonusBallResult); + } + LottoFactory lottoFactory = createLottoFactory(lottoWinningResults, lottoWinningBonusBallResults); + return enumWinningStatus.getLottoPrices(lottoFactory, numberOfLottoTicket); + } + + private LottoFactory createLottoFactory(ArrayList lottoWinningResults, ArrayList lottoWinningBonusBallResults) { + LottoWinningBonusBallResult lottoWinningBonusBallResult = new LottoWinningBonusBallResult(lottoWinningBonusBallResults); + LottoWinningResult winningResult = new LottoWinningResult(lottoWinningResults); + + LottoFactory lottoFactory = new LottoFactory(winningResult, lottoWinningBonusBallResult); + return lottoFactory; + } + + private int getMatchLottoNumberCount(List lottoMatchedResult){ + return (int) lottoMatchedResult.stream().filter(index-> (index)).count(); + } + + private List getMatchLottoNumber(LottoTicket lotto, LastWeekWinningLotto lastWeekWinningLotto){ + List lottoList = lotto.getLotto(); + List lastWeekWinningLottos = lastWeekWinningLotto.getLotto(); + ArrayList lottoMatchedResult = new ArrayList<>(); + + for (int winningLottoNumber = 0; winningLottoNumber < lastWeekWinningLottos.size(); winningLottoNumber++) { + Boolean isMatchLottoNumber = lottoList.contains(lastWeekWinningLottos.get(winningLottoNumber)); + lottoMatchedResult.add(isMatchLottoNumber); + } + return lottoMatchedResult; + } + + private Boolean getMatchLottoBonusBallNumber(LottoTicket lotto, LastWeekWinningBonusBall lastWeekWinningBonusBall) { + List lottoBonusBalls = lotto.getLotto(); + int lastWeekWinningBonusBalls = lastWeekWinningBonusBall.getLastWeekWinningBonusBall(); + Boolean isMatchLottoNumber = lottoBonusBalls.contains(lastWeekWinningBonusBalls); + return isMatchLottoNumber; + + } +} diff --git a/src/main/java/lotto/domain/Profit.java b/src/main/java/lotto/domain/Profit.java new file mode 100644 index 0000000..74ce809 --- /dev/null +++ b/src/main/java/lotto/domain/Profit.java @@ -0,0 +1,36 @@ +package lotto.domain; + +import lotto.domain.lottoticket.NumberOfLottoTicket; + +import java.util.List; + +public class Profit { + private static final int PROFIT_THRESHOLD = 1; + private static int sumLottoPrices; + private static NumberOfLottoTicket numberOfLottoTicket; + private static float calculatedProfit; + public Profit(List lottoPrices, NumberOfLottoTicket numberOfLottoTicket) { + this.sumLottoPrices = sumLottoPrices(lottoPrices); + this.numberOfLottoTicket = numberOfLottoTicket; + this.calculatedProfit = CalculatedProfit(); + } + + private int sumLottoPrices(List lottoPrices){ + return lottoPrices.stream().mapToInt(WinningStatus::getWinningMoney).sum(); + } + + private float CalculatedProfit() { + return (float) sumLottoPrices / numberOfLottoTicket.getMoney(); + } + + public boolean isProfit() { + if (calculatedProfit winningLotto; + + public LastWeekWinningLotto(List winningLotto){ + checkLottoLength(winningLotto); + this.winningLotto = winningLotto; + } + + private void checkLottoLength(List numbers){ + if(numbers.size() !=LOTTO_NUMBER_COUNT){ + throw new NotValidLottoLengthException(); + } + } + + @Override + public List getLotto(){ + return this.winningLotto; + } +} diff --git a/src/main/java/lotto/domain/lottoticket/Lotto.java b/src/main/java/lotto/domain/lottoticket/Lotto.java new file mode 100644 index 0000000..5a40ff5 --- /dev/null +++ b/src/main/java/lotto/domain/lottoticket/Lotto.java @@ -0,0 +1,7 @@ +package lotto.domain.lottoticket; + +import java.util.List; + +public interface Lotto { + public List getLotto(); +} diff --git a/src/main/java/lotto/domain/lottoticket/LottoTicket.java b/src/main/java/lotto/domain/lottoticket/LottoTicket.java new file mode 100644 index 0000000..c50832e --- /dev/null +++ b/src/main/java/lotto/domain/lottoticket/LottoTicket.java @@ -0,0 +1,27 @@ +package lotto.domain.lottoticket; + +import lotto.domain.exception.NotValidLottoLengthException; + +import java.util.List; + +public class LottoTicket implements Lotto{ + private static final int LOTTO_NUMBER_COUNT = 6; + private final List numbers; + + public LottoTicket(List numbers ) { + checkLottoLength(numbers); + this.numbers = numbers; + } + + private void checkLottoLength(List numbers){ + if(numbers.size() !=LOTTO_NUMBER_COUNT){ + throw new NotValidLottoLengthException(); + } + } + + @Override + public List getLotto(){ + return this.numbers; + } + +} \ No newline at end of file diff --git a/src/main/java/lotto/domain/lottoticket/Lottos.java b/src/main/java/lotto/domain/lottoticket/Lottos.java new file mode 100644 index 0000000..84c0230 --- /dev/null +++ b/src/main/java/lotto/domain/lottoticket/Lottos.java @@ -0,0 +1,16 @@ +package lotto.domain.lottoticket; +import lotto.domain.strategy.RandomLottoNumberStrategy; + +import java.util.List; + +public class Lottos { + private final List lotto; + + public Lottos(List lotto ) { + this.lotto = lotto; + } + + public List getLottos() { + return this.lotto; + } +} diff --git a/src/main/java/lotto/domain/lottoticket/NumberOfLottoTicket.java b/src/main/java/lotto/domain/lottoticket/NumberOfLottoTicket.java new file mode 100644 index 0000000..d0a0840 --- /dev/null +++ b/src/main/java/lotto/domain/lottoticket/NumberOfLottoTicket.java @@ -0,0 +1,25 @@ +package lotto.domain.lottoticket; + +public class NumberOfLottoTicket { + private final static int LOTTO_PRICE = 1000; + private final int tickets; + private final int money; + + public NumberOfLottoTicket(int money) { + this.tickets = setNumberOfLottoTickets(money); + this.money = money; + } + + // naming ๋ฐ”๊พธ๊ธฐ + private int setNumberOfLottoTickets(int money) { + return money / LOTTO_PRICE; + } + + public int getNumberOfLottoTicket() { + return this.tickets; + } + + public int getMoney() { + return this.money; + } +} diff --git a/src/main/java/lotto/domain/lottowinningresult/LottoWinningBonusBallResult.java b/src/main/java/lotto/domain/lottowinningresult/LottoWinningBonusBallResult.java new file mode 100644 index 0000000..addf67d --- /dev/null +++ b/src/main/java/lotto/domain/lottowinningresult/LottoWinningBonusBallResult.java @@ -0,0 +1,15 @@ +package lotto.domain.lottowinningresult; + +import java.util.List; + +public class LottoWinningBonusBallResult { + private final List LottoWinningBonusBall; + + public LottoWinningBonusBallResult(List LottoWinningBonusBall) { + this.LottoWinningBonusBall = LottoWinningBonusBall; + } + + public List getLottoWinningBonusBallResult(){ + return this.LottoWinningBonusBall; + } +} diff --git a/src/main/java/lotto/domain/lottowinningresult/LottoWinningResult.java b/src/main/java/lotto/domain/lottowinningresult/LottoWinningResult.java new file mode 100644 index 0000000..cffc911 --- /dev/null +++ b/src/main/java/lotto/domain/lottowinningresult/LottoWinningResult.java @@ -0,0 +1,15 @@ +package lotto.domain.lottowinningresult; + +import java.util.List; + +public class LottoWinningResult { + private final List lottoWinning; + public LottoWinningResult(List lottoWinning) { + this.lottoWinning = lottoWinning; + } + + public List getLottoWinningResult() { + return this.lottoWinning; + + } +} \ No newline at end of file diff --git a/src/main/java/lotto/domain/strategy/RandomLottoNumberStrategy.java b/src/main/java/lotto/domain/strategy/RandomLottoNumberStrategy.java new file mode 100644 index 0000000..c76224d --- /dev/null +++ b/src/main/java/lotto/domain/strategy/RandomLottoNumberStrategy.java @@ -0,0 +1,32 @@ +package lotto.domain.strategy; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RandomLottoNumberStrategy { + private final static int UPPER_BOUND = 45; + private final static int LOWER_BOUND = 1; + private final static int LOTTO_NUMBER_COUNT = 6; + + public List getRandomLottoNumbers(){ + List lottoNumberRange = setLottoNumberRange(); + return getLottoNumbers(lottoNumberRange); + } + + private List setLottoNumberRange(){ + ArrayList lottoNumberIndex = new ArrayList<>(); + for (int lottoNumber = LOWER_BOUND; lottoNumber < UPPER_BOUND; lottoNumber++) { + lottoNumberIndex.add(lottoNumber); + } + return lottoNumberIndex; + } + + private List getLottoNumbers(List lottoNumberRange){ + Collections.shuffle(lottoNumberRange); + List collectedNumbers = lottoNumberRange.subList(0,LOTTO_NUMBER_COUNT); + Collections.sort(collectedNumbers); + return collectedNumbers; + } + +} diff --git a/src/main/java/lotto/ui/Printer.java b/src/main/java/lotto/ui/Printer.java new file mode 100644 index 0000000..cd10ea2 --- /dev/null +++ b/src/main/java/lotto/ui/Printer.java @@ -0,0 +1,99 @@ +package lotto.ui; + +import lotto.domain.WinningStatus; +import lotto.domain.lottoticket.LottoTicket; +import lotto.domain.lottoticket.Lottos; +import lotto.domain.lottoticket.NumberOfLottoTicket; + +import java.util.*; + +public class Printer { + private static final String REQUEST_PURCHASE_AMOUNT_MESSAGE = "๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."; + private static final String REQUEST_LAST_WEEK_LOTTO_WINNING_NUMBER_MESSAGE = "\n์ง€๋‚œ ์ฃผ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."; + private static final String REQUEST_LOTTO_BONUS_BALL_NUMBER_MESSAGE = "๋ณด๋„ˆ์Šค ๋ณผ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"; + private static final String PRINT_FINAL_MATCHED_LOTTO_RESULT_MESSAGE = "%s๊ฐœ ์ผ์น˜%s(%s์›)- "; + private static final String PRINT_LOTTO_PROFIT_MESSAGE = "์ด ์ˆ˜์ต๋ฅ ์€ %.2f์ž…๋‹ˆ๋‹ค."; + private static final String PRINT_MATCH_BONUS_BALL_MESSAGE = ", ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜"; + private static final String PRINT_DIVIDER_MESSAGE = "---------\n"; + private static final String PRINT_WINNING_STATISTICS_MESSAGE = "\n๋‹น์ฒจ ํ†ต๊ณ„\n"; + private static final String PRINT_PROFIT_LOSS_MESSAGE = "(๊ธฐ์ค€์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋กœ ์†ํ•ด๋ผ๋Š” ์˜๋ฏธ์ž„)"; + private static final String PRINT_NUMBER_OF_LOTTO_TICKET = "๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค."; + + public void requestPurchaseAmount() { + System.out.println(REQUEST_PURCHASE_AMOUNT_MESSAGE); + } + + public void requestLastWeekLottoWinningNumber() { + System.out.println(REQUEST_LAST_WEEK_LOTTO_WINNING_NUMBER_MESSAGE); + } + + public void requestLottoBonusBallNumber() { + System.out.println(REQUEST_LOTTO_BONUS_BALL_NUMBER_MESSAGE); + } + + public void printWinningStatistics() { + System.out.print(PRINT_WINNING_STATISTICS_MESSAGE); + System.out.print(PRINT_DIVIDER_MESSAGE); + } + + public void printAllLotto(Lottos lottos) { + for (LottoTicket lotto : lottos.getLottos()) { + System.out.println(lotto.getLotto()); + } + } + + public void printAllMatchedLottoResults(Map lottoPrices) { + List keySet = new ArrayList(lottoPrices.keySet()); + keySet.sort(Comparator.comparingInt(WinningStatus::getWinningMoney)); + + for(WinningStatus winningStatus: WinningStatus.values()){ + printMatchedLottoWithBonusBallFormat(winningStatus); + printMatchedLottoFormat(winningStatus); + printMatchedLottoResult(winningStatus, lottoPrices); + } + } + + private void printMatchedLottoResult(WinningStatus winningStatus, Map lottoPrices) { + if (lottoPrices.get(winningStatus) == null){ + System.out.println("0๊ฐœ"); + } + if (lottoPrices.get(winningStatus) != null){ + System.out.println(lottoPrices.get(winningStatus)+"๊ฐœ"); + } + } + + private void printMatchedLottoFormat(WinningStatus winningStatus) { + if (!winningStatus.hasBonusBall()) { + System.out.print(String.format( + PRINT_FINAL_MATCHED_LOTTO_RESULT_MESSAGE, + winningStatus.getMatchCount(), + "", + winningStatus.getWinningMoney())); + } + } + + private void printMatchedLottoWithBonusBallFormat(WinningStatus winningStatus) { + if (winningStatus.hasBonusBall()){ + System.out.print(String.format( + PRINT_FINAL_MATCHED_LOTTO_RESULT_MESSAGE, + winningStatus.getMatchCount(), + PRINT_MATCH_BONUS_BALL_MESSAGE, + winningStatus.getWinningMoney())); + } + } + + public void printLottoProfit(float calculatedProfit) { + System.out.print(String.format(PRINT_LOTTO_PROFIT_MESSAGE, calculatedProfit)); + } + + public void printIsLottoProfit(boolean isProfit) { + if(!isProfit) { + System.out.println(PRINT_PROFIT_LOSS_MESSAGE); + } + } + + public void printNumberOfLottoTicket(NumberOfLottoTicket numberOfLottoTicket) { + System.out.println(numberOfLottoTicket.getNumberOfLottoTicket() + PRINT_NUMBER_OF_LOTTO_TICKET); + } +} + diff --git a/src/main/java/lotto/ui/Receiver.java b/src/main/java/lotto/ui/Receiver.java new file mode 100644 index 0000000..3d8afae --- /dev/null +++ b/src/main/java/lotto/ui/Receiver.java @@ -0,0 +1,37 @@ +package lotto.ui; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class Receiver { + private static final Scanner scanner = new Scanner(System.in); + private static final String DELIMITER = ","; + + public int receiveLottoTotalAmount() { + int lottoTotalAmount = scanner.nextInt(); + return lottoTotalAmount; + } + + public int receiveLottoBonusBallNumber() { + int lottoBonusBallNumber = scanner.nextInt(); + return lottoBonusBallNumber; + } + + public List receiveLastWeekLottoWinningNumbers() { + String lastWeekLottoWinningNumbers = scanner.next(); + List dividedLastWeekLottoWinningNumbers = splitInputLine(lastWeekLottoWinningNumbers); + return convertStringToInt(dividedLastWeekLottoWinningNumbers); + } + + private List splitInputLine(String line) { + return Arrays.asList(line.split(DELIMITER)); + } + + private List convertStringToInt(List dividedLastWeekLottoWinningNumbers) { + return dividedLastWeekLottoWinningNumbers.stream() + .map(Integer::parseInt) + .collect(Collectors.toList()); + } +} diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/lotto/domain/LottoTest.java b/src/test/java/lotto/domain/LottoTest.java new file mode 100644 index 0000000..d1b1ba0 --- /dev/null +++ b/src/test/java/lotto/domain/LottoTest.java @@ -0,0 +1,45 @@ +package lotto.domain; + +import lotto.domain.exception.NotValidLottoLengthException; +import lotto.domain.lottoticket.LottoTicket; +import org.junit.jupiter.api.Test; + +import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +class LottoTest { + @Test + void ๋กœ๋˜_๊ฐ์ฒด๋ฅผ_์ƒ์„ฑํ•œ๋‹ค(){ + //given + List numbers = List.of(6,7,8,9,10,11); + List actual = List.of(6,7,8,9,10,11); + LottoTicket lotto = new LottoTicket(numbers); + + //when + List expected = lotto.getLotto(); + System.out.println(expected); + //then + assertThat(expected).isEqualTo(actual); + } + @Test + void ๋กœ๋˜_์ˆซ์ž๊ฐ€_6๊ฐœ๋ฅผ_์ดˆ๊ณผํ• _๊ฒฝ์šฐ_NotValidLottoLengthException์„_๋˜์ง„๋‹ค(){ + //given + List numbers = List.of(6,7,8,9,10,11,12); + + //when + //then + assertThatExceptionOfType(NotValidLottoLengthException.class). + isThrownBy(() -> new LottoTicket(numbers)); + } + @Test + void ๋กœ๋˜_์ˆซ์ž๊ฐ€_6๊ฐœ_๋ฏธ๋งŒ์ผ_๊ฒฝ์šฐ_NotValidLottoLengthException์„_๋˜์ง„๋‹ค(){ + //given + List numbers = List.of(6,7,8,9,10); + + //when + //then + assertThatExceptionOfType(NotValidLottoLengthException.class). + isThrownBy(() -> new LottoTicket(numbers)); + } +} \ No newline at end of file