From a4853f5b4dc66c46f8742440d0a0c33bd1efe367 Mon Sep 17 00:00:00 2001 From: zhy2on Date: Mon, 6 May 2024 00:45:19 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=201=EB=8B=A8=EA=B3=84=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LottoApplication.java | 9 +++++ src/main/java/controller/LottoController.java | 31 ++++++++++++++++ src/main/java/domain/LottoTicket.java | 36 +++++++++++++++++++ src/main/java/view/InputView.java | 12 +++++++ src/main/java/view/OutputView.java | 17 +++++++++ 5 files changed, 105 insertions(+) create mode 100644 src/main/java/LottoApplication.java create mode 100644 src/main/java/controller/LottoController.java create mode 100644 src/main/java/domain/LottoTicket.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/LottoApplication.java b/src/main/java/LottoApplication.java new file mode 100644 index 00000000..c4915993 --- /dev/null +++ b/src/main/java/LottoApplication.java @@ -0,0 +1,9 @@ +import controller.LottoController; + +public class LottoApplication { + + public static void main(String[] args) { + LottoController controller = new LottoController(); + controller.run(); + } +} diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java new file mode 100644 index 00000000..040bd10c --- /dev/null +++ b/src/main/java/controller/LottoController.java @@ -0,0 +1,31 @@ +package controller; + +import domain.LottoTicket; +import view.InputView; +import view.OutputView; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LottoController { + public void run() { + int amountToBuy = InputView.getAmountToBuy(); + List tickets = buyLottoTickets(amountToBuy); + OutputView.displayTicketCount(tickets.size()); + OutputView.displayLottoTickets(tickets); + } + + private List buyLottoTickets(final int amountToBuy) { + int ticketCount = amountToBuy / LottoTicket.getLottoPrice(); + return generateLottoTickets(ticketCount); + } + + private List generateLottoTickets(final int ticketCount) { + return IntStream.range(0, ticketCount) + .mapToObj(i -> new LottoTicket()) + .collect(Collectors.toList()); + } + +} diff --git a/src/main/java/domain/LottoTicket.java b/src/main/java/domain/LottoTicket.java new file mode 100644 index 00000000..bed1e2bc --- /dev/null +++ b/src/main/java/domain/LottoTicket.java @@ -0,0 +1,36 @@ +package domain; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class LottoTicket { + private static final int LOTTO_PRICE = 1000; + private static final int LOTTO_NUMBER_COUNT = 6; + private static final int LOTTO_NUMBER_MAX = 45; + + private List numbers; + + public LottoTicket() { + this.numbers = generateLottoNumbers(); + } + + private List generateLottoNumbers() { + List numbers = new ArrayList<>(); + for (int i = 1; i <= LOTTO_NUMBER_MAX; i++) { + numbers.add(i); + } + Collections.shuffle(numbers); + List selectedNumbers = numbers.subList(0, LOTTO_NUMBER_COUNT); + Collections.sort(selectedNumbers); // 오름차순 정렬 + return selectedNumbers; + } + + public List getNumbers() { + return numbers; + } + + public static int getLottoPrice() { + return LOTTO_PRICE; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..a5df192c --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,12 @@ +package view; + +import java.util.Scanner; + +public class InputView { + private static final Scanner scanner = new Scanner(System.in); + + public static int getAmountToBuy() { + System.out.println("구입금액을 입력해 주세요."); + return scanner.nextInt(); + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..6be203c2 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,17 @@ +package view; + +import domain.LottoTicket; + +import java.util.List; + +public class OutputView { + public static void displayTicketCount(final int ticketCount) { + System.out.println(ticketCount + "개를 구매했습니다."); + } + + public static void displayLottoTickets(final List tickets) { + for (LottoTicket ticket : tickets) { + System.out.println(ticket.getNumbers()); + } + } +} From d1c287ae11c04dc4a40dcf39a63c2c5391de38e4 Mon Sep 17 00:00:00 2001 From: zhy2on Date: Mon, 6 May 2024 22:57:29 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=202=EB=8B=A8=EA=B3=84=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LottoApplication.java | 9 ---- src/main/java/controller/LottoController.java | 31 +++++------ src/main/java/domain/Lotto.java | 53 +++++++++++++++++++ src/main/java/domain/LottoNumber.java | 33 ++++++++++++ src/main/java/domain/LottoStatistics.java | 26 +++++++++ src/main/java/domain/LottoTicket.java | 36 ------------- src/main/java/view/InputView.java | 19 +++++-- src/main/java/view/OutputView.java | 23 +++++--- 8 files changed, 157 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/LottoApplication.java create mode 100644 src/main/java/domain/Lotto.java create mode 100644 src/main/java/domain/LottoNumber.java create mode 100644 src/main/java/domain/LottoStatistics.java delete mode 100644 src/main/java/domain/LottoTicket.java diff --git a/src/main/java/LottoApplication.java b/src/main/java/LottoApplication.java deleted file mode 100644 index c4915993..00000000 --- a/src/main/java/LottoApplication.java +++ /dev/null @@ -1,9 +0,0 @@ -import controller.LottoController; - -public class LottoApplication { - - public static void main(String[] args) { - LottoController controller = new LottoController(); - controller.run(); - } -} diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index 040bd10c..5a1dbb84 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -1,31 +1,26 @@ package controller; -import domain.LottoTicket; +import domain.Lotto; +import domain.LottoNumber; +import domain.LottoStatistics; import view.InputView; import view.OutputView; -import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; public class LottoController { - public void run() { - int amountToBuy = InputView.getAmountToBuy(); - List tickets = buyLottoTickets(amountToBuy); - OutputView.displayTicketCount(tickets.size()); - OutputView.displayLottoTickets(tickets); + public static void main(String[] args) { + LottoController controller = new LottoController(); + controller.run(); } - private List buyLottoTickets(final int amountToBuy) { - int ticketCount = amountToBuy / LottoTicket.getLottoPrice(); - return generateLottoTickets(ticketCount); - } + private void run() { + int purchaseAmount = InputView.getPurchaseAmount(); + List lottos = Lotto.purchaseLottos(purchaseAmount); + OutputView.printLottos(lottos); - private List generateLottoTickets(final int ticketCount) { - return IntStream.range(0, ticketCount) - .mapToObj(i -> new LottoTicket()) - .collect(Collectors.toList()); + List winningNumbers = InputView.getWinningNumbers(); + LottoStatistics statistics = Lotto.getStatistics(lottos, winningNumbers); + OutputView.printStatistics(statistics); } - } diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java new file mode 100644 index 00000000..5e05bab4 --- /dev/null +++ b/src/main/java/domain/Lotto.java @@ -0,0 +1,53 @@ +package domain; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public record Lotto(List numbers) { + public static final int LOTTO_NUMBER_COUNT = 6; + public static final int LOTTO_PRICE = 1000; + + public static List purchaseLottos(int purchaseAmount) { + int lottoCount = purchaseAmount / LOTTO_PRICE; + return IntStream.range(0, lottoCount) + .mapToObj(i -> generateLotto()) + .collect(Collectors.toList()); + } + + private static Lotto generateLotto() { + List numbers = new ArrayList<>(); + while (numbers.size() < LOTTO_NUMBER_COUNT) { + LottoNumber number = LottoNumber.generate(); + if (!numbers.contains(number)) { + numbers.add(number); + } + } + Collections.sort(numbers); + return new Lotto(numbers); + } + + public static LottoStatistics getStatistics(List lottos, List winningNumbers) { + LottoStatistics statistics = new LottoStatistics(); + for (Lotto lotto : lottos) { + int matchCount = getMatchCount(lotto, winningNumbers); + statistics.addCount(matchCount); + } + return statistics; + } + + private static int getMatchCount(Lotto lotto, List winningNumbers) { + return (int) lotto.numbers.stream() + .filter(winningNumbers::contains) + .count(); + } + + @Override + public String toString() { + return numbers.stream() + .map(LottoNumber::toString) + .collect(Collectors.joining(", ", "[", "]")); + } +} diff --git a/src/main/java/domain/LottoNumber.java b/src/main/java/domain/LottoNumber.java new file mode 100644 index 00000000..1ba79ee3 --- /dev/null +++ b/src/main/java/domain/LottoNumber.java @@ -0,0 +1,33 @@ +package domain; + +import java.util.Random; + +public record LottoNumber(int value) implements Comparable { + private static final int MIN_VALUE = 1; + private static final int MAX_VALUE = 45; + + public LottoNumber { + validateValue(value); + } + + private void validateValue(int value) { + if (value < MIN_VALUE || value > MAX_VALUE) { + throw new IllegalArgumentException("로또 번호는 1부터 45 사이의 값이어야 합니다."); + } + } + + public static LottoNumber generate() { + Random random = new Random(); + return new LottoNumber(random.nextInt(MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE); + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @Override + public int compareTo(LottoNumber other) { + return Integer.compare(this.value, other.value); + } +} diff --git a/src/main/java/domain/LottoStatistics.java b/src/main/java/domain/LottoStatistics.java new file mode 100644 index 00000000..b6d583f5 --- /dev/null +++ b/src/main/java/domain/LottoStatistics.java @@ -0,0 +1,26 @@ +package domain; + +public class LottoStatistics { + private static final int[] PRIZES = {0, 0, 15000000, 5000, 50000, 1500000, 2000000000}; + private final int[] counts = new int[7]; + + public void addCount(int matchCount) { + counts[matchCount]++; + } + + public int getCountFor(int matchCount) { + return counts[matchCount]; + } + + public int getPrizeFor(int matchCount) { + return PRIZES[matchCount]; + } + + public double getProfitRatio() { + int totalPrize = 0; + for (int i = 3; i <= 6; i++) { + totalPrize += getPrizeFor(i) * getCountFor(i); + } + return (double) totalPrize / (Lotto.purchaseLottos(14000).size() * Lotto.LOTTO_PRICE); + } +} diff --git a/src/main/java/domain/LottoTicket.java b/src/main/java/domain/LottoTicket.java deleted file mode 100644 index bed1e2bc..00000000 --- a/src/main/java/domain/LottoTicket.java +++ /dev/null @@ -1,36 +0,0 @@ -package domain; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class LottoTicket { - private static final int LOTTO_PRICE = 1000; - private static final int LOTTO_NUMBER_COUNT = 6; - private static final int LOTTO_NUMBER_MAX = 45; - - private List numbers; - - public LottoTicket() { - this.numbers = generateLottoNumbers(); - } - - private List generateLottoNumbers() { - List numbers = new ArrayList<>(); - for (int i = 1; i <= LOTTO_NUMBER_MAX; i++) { - numbers.add(i); - } - Collections.shuffle(numbers); - List selectedNumbers = numbers.subList(0, LOTTO_NUMBER_COUNT); - Collections.sort(selectedNumbers); // 오름차순 정렬 - return selectedNumbers; - } - - public List getNumbers() { - return numbers; - } - - public static int getLottoPrice() { - return LOTTO_PRICE; - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index a5df192c..4f523701 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,12 +1,25 @@ package view; +import domain.LottoNumber; + +import java.util.List; import java.util.Scanner; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class InputView { private static final Scanner scanner = new Scanner(System.in); - public static int getAmountToBuy() { - System.out.println("구입금액을 입력해 주세요."); - return scanner.nextInt(); + public static int getPurchaseAmount() { + System.out.print("구입금액을 입력해 주세요.\n"); + return Integer.parseInt(scanner.nextLine()); + } + + public static List getWinningNumbers() { + System.out.print("지난 주 당첨 번호를 입력해 주세요.\n"); + return Stream.of(scanner.nextLine().split(",")) + .map(Integer::parseInt) + .map(LottoNumber::new) + .collect(Collectors.toList()); } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 6be203c2..5cc75d9c 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,17 +1,26 @@ package view; -import domain.LottoTicket; +import domain.Lotto; +import domain.LottoStatistics; import java.util.List; public class OutputView { - public static void displayTicketCount(final int ticketCount) { - System.out.println(ticketCount + "개를 구매했습니다."); + public static void printLottos(List lottos) { + System.out.printf("%d개를 구매했습니다.\n", lottos.size()); + for (Lotto lotto : lottos) { + System.out.println(lotto); + } } - public static void displayLottoTickets(final List tickets) { - for (LottoTicket ticket : tickets) { - System.out.println(ticket.getNumbers()); - } + public static void printStatistics(LottoStatistics statistics) { + System.out.println("\n당첨 통계\n---------"); + System.out.printf("3개 일치 (%d원)- %d개\n", statistics.getPrizeFor(3), statistics.getCountFor(3)); + System.out.printf("4개 일치 (%d원)- %d개\n", statistics.getPrizeFor(4), statistics.getCountFor(4)); + System.out.printf("5개 일치 (%d원)- %d개\n", statistics.getPrizeFor(5), statistics.getCountFor(5)); + System.out.printf("6개 일치 (%d원)- %d개\n", statistics.getPrizeFor(6), statistics.getCountFor(6)); + System.out.printf("총 수익률은 %.2f입니다.(기준이 1이기 때문에 결과적으로 %s라는 의미임)\n", + statistics.getProfitRatio(), + statistics.getProfitRatio() < 1 ? "손해" : "이익"); } } From fda63c451a8e96e0b4947a4f5088688e7eea7c9c Mon Sep 17 00:00:00 2001 From: zhy2on Date: Tue, 7 May 2024 03:57:18 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=203=EB=8B=A8=EA=B3=84=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LottoApplication.java | 8 ++++ src/main/java/controller/LottoController.java | 40 +++++++++++------ src/main/java/domain/Lotto.java | 45 ++++++++----------- src/main/java/domain/LottoMachine.java | 13 ++++++ src/main/java/domain/LottoNumber.java | 20 ++++----- src/main/java/domain/LottoPrize.java | 43 ++++++++++++++++++ src/main/java/domain/LottoResult.java | 27 +++++++++++ src/main/java/domain/LottoStatistics.java | 26 ----------- src/main/java/view/InputView.java | 20 ++++++--- src/main/java/view/OutputView.java | 35 ++++++++++----- 10 files changed, 184 insertions(+), 93 deletions(-) create mode 100644 src/main/java/LottoApplication.java create mode 100644 src/main/java/domain/LottoMachine.java create mode 100644 src/main/java/domain/LottoPrize.java create mode 100644 src/main/java/domain/LottoResult.java delete mode 100644 src/main/java/domain/LottoStatistics.java diff --git a/src/main/java/LottoApplication.java b/src/main/java/LottoApplication.java new file mode 100644 index 00000000..4c6163f3 --- /dev/null +++ b/src/main/java/LottoApplication.java @@ -0,0 +1,8 @@ +import controller.LottoController; + +public class LottoApplication { + public static void main(String[] args) { + LottoController controller = new LottoController(); + controller.run(); + } +} diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index 5a1dbb84..144bc983 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -1,26 +1,40 @@ package controller; -import domain.Lotto; -import domain.LottoNumber; -import domain.LottoStatistics; +import domain.*; import view.InputView; import view.OutputView; import java.util.List; public class LottoController { - public static void main(String[] args) { - LottoController controller = new LottoController(); - controller.run(); - } - - private void run() { + public void run() { int purchaseAmount = InputView.getPurchaseAmount(); - List lottos = Lotto.purchaseLottos(purchaseAmount); + List lottos = LottoMachine.generateLottos(purchaseAmount / Lotto.LOTTO_PRICE); OutputView.printLottos(lottos); - List winningNumbers = InputView.getWinningNumbers(); - LottoStatistics statistics = Lotto.getStatistics(lottos, winningNumbers); - OutputView.printStatistics(statistics); + Lotto winningLotto = InputView.getWinningLotto(); + LottoNumber bonusNumber = InputView.getBonusNumber(); + + LottoResult result = getLottoResult(lottos, winningLotto, bonusNumber); + OutputView.printResult(result, purchaseAmount); + } + + private LottoResult getLottoResult(List lottos, Lotto winningLotto, LottoNumber bonusNumber) { + List prizes = lottos.stream() + .map(lotto -> getLottoPrize(lotto, winningLotto, bonusNumber)) + .toList(); + return new LottoResult(prizes); + } + + private LottoPrize getLottoPrize(Lotto lotto, Lotto winningLotto, LottoNumber bonusNumber) { + int matchCount = countMatchingNumbers(lotto, winningLotto); + boolean isMatchBonus = lotto.contains(bonusNumber); + return LottoPrize.matchPrize(matchCount, isMatchBonus); + } + + private int countMatchingNumbers(Lotto lotto, Lotto winningLotto) { + return (int) lotto.numbers().stream() + .filter(winningLotto.numbers()::contains) + .count(); } } diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 5e05bab4..fbad96d7 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -1,47 +1,38 @@ package domain; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.IntStream; +import java.util.stream.Stream; public record Lotto(List numbers) { public static final int LOTTO_NUMBER_COUNT = 6; public static final int LOTTO_PRICE = 1000; - public static List purchaseLottos(int purchaseAmount) { - int lottoCount = purchaseAmount / LOTTO_PRICE; - return IntStream.range(0, lottoCount) - .mapToObj(i -> generateLotto()) - .collect(Collectors.toList()); + public Lotto { + validateNumbers(numbers); + Collections.sort(numbers); } - private static Lotto generateLotto() { - List numbers = new ArrayList<>(); - while (numbers.size() < LOTTO_NUMBER_COUNT) { - LottoNumber number = LottoNumber.generate(); - if (!numbers.contains(number)) { - numbers.add(number); - } + private void validateNumbers(List numbers) { + if (numbers.size() != LOTTO_NUMBER_COUNT) { + throw new IllegalArgumentException("로또 숫자는 6개여야 합니다."); + } + if (numbers.stream().distinct().count() != LOTTO_NUMBER_COUNT) { + throw new IllegalArgumentException("로또 숫자는 중복 되지 않아야 합니다."); } - Collections.sort(numbers); - return new Lotto(numbers); } - public static LottoStatistics getStatistics(List lottos, List winningNumbers) { - LottoStatistics statistics = new LottoStatistics(); - for (Lotto lotto : lottos) { - int matchCount = getMatchCount(lotto, winningNumbers); - statistics.addCount(matchCount); - } - return statistics; + public static Lotto generate() { + List numbers = Stream.generate(LottoNumber::generate) + .distinct() + .limit(LOTTO_NUMBER_COUNT) + .collect(Collectors.toList()); + return new Lotto(numbers); } - private static int getMatchCount(Lotto lotto, List winningNumbers) { - return (int) lotto.numbers.stream() - .filter(winningNumbers::contains) - .count(); + public boolean contains(LottoNumber number) { + return numbers.contains(number); } @Override diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java new file mode 100644 index 00000000..495ef22c --- /dev/null +++ b/src/main/java/domain/LottoMachine.java @@ -0,0 +1,13 @@ +package domain; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class LottoMachine { + public static List generateLottos(int count) { + return Stream.generate(Lotto::generate) + .limit(count) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/domain/LottoNumber.java b/src/main/java/domain/LottoNumber.java index 1ba79ee3..f64c9d4c 100644 --- a/src/main/java/domain/LottoNumber.java +++ b/src/main/java/domain/LottoNumber.java @@ -2,32 +2,32 @@ import java.util.Random; -public record LottoNumber(int value) implements Comparable { - private static final int MIN_VALUE = 1; - private static final int MAX_VALUE = 45; +public record LottoNumber(int number) implements Comparable { + private static final int MIN_NUMBER = 1; + private static final int MAX_NUMBER = 45; + private static final Random random = new Random(); public LottoNumber { - validateValue(value); + valdateNumber(number); } - private void validateValue(int value) { - if (value < MIN_VALUE || value > MAX_VALUE) { + private void valdateNumber(final int number) { + if (number < MIN_NUMBER || number > MAX_NUMBER) { throw new IllegalArgumentException("로또 번호는 1부터 45 사이의 값이어야 합니다."); } } public static LottoNumber generate() { - Random random = new Random(); - return new LottoNumber(random.nextInt(MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE); + return new LottoNumber(random.nextInt(MAX_NUMBER - MIN_NUMBER + 1) + MIN_NUMBER); } @Override public String toString() { - return String.valueOf(value); + return String.valueOf(number); } @Override public int compareTo(LottoNumber other) { - return Integer.compare(this.value, other.value); + return Integer.compare(this.number, other.number); } } diff --git a/src/main/java/domain/LottoPrize.java b/src/main/java/domain/LottoPrize.java new file mode 100644 index 00000000..10ffd09f --- /dev/null +++ b/src/main/java/domain/LottoPrize.java @@ -0,0 +1,43 @@ +package domain; + +import java.util.Arrays; + +public enum LottoPrize { + MISS(0, 0, false), + FIFTH(3, 5_000, false), + FOURTH(4, 50_000, false), + THIRD(5, 1_500_000, false), + SECOND(5, 30_000_000, true), + FIRST(6, 2_000_000_000, false); + + private final int matchCount; + private final int prize; + private final boolean isMatchBonus; + + LottoPrize(final int matchCount, final int prize, final boolean isMatchBonus) { + this.matchCount = matchCount; + this.prize = prize; + this.isMatchBonus = isMatchBonus; + } + + public static LottoPrize matchPrize(final int matchCount, final boolean isWithBonus) { + return Arrays.stream(LottoPrize.values()) + .filter(prize -> prize.matchCount == matchCount) + .filter(prize -> prize.isMatchBonus == isWithBonus) + .findFirst() + .orElse(MISS); + } + + public int getMatchCount() { + return matchCount; + } + + public int getPrize() { + return prize; + } + + public boolean isMatchBonus() { + return isMatchBonus; + } +} + diff --git a/src/main/java/domain/LottoResult.java b/src/main/java/domain/LottoResult.java new file mode 100644 index 00000000..99f25ecd --- /dev/null +++ b/src/main/java/domain/LottoResult.java @@ -0,0 +1,27 @@ +package domain; + +import java.util.List; + +public class LottoResult { + private final List prizes; + + public LottoResult(List prizes) { + this.prizes = prizes; + } + + public int getTotalPrize() { + return prizes.stream() + .mapToInt(LottoPrize::getPrize) + .sum(); + } + + public double getEarningRate(int purchaseAmount) { + return (double) getTotalPrize() / purchaseAmount; + } + + public int getCountByPrize(LottoPrize prize) { + return (int) prizes.stream() + .filter(p -> p == prize) + .count(); + } +} diff --git a/src/main/java/domain/LottoStatistics.java b/src/main/java/domain/LottoStatistics.java deleted file mode 100644 index b6d583f5..00000000 --- a/src/main/java/domain/LottoStatistics.java +++ /dev/null @@ -1,26 +0,0 @@ -package domain; - -public class LottoStatistics { - private static final int[] PRIZES = {0, 0, 15000000, 5000, 50000, 1500000, 2000000000}; - private final int[] counts = new int[7]; - - public void addCount(int matchCount) { - counts[matchCount]++; - } - - public int getCountFor(int matchCount) { - return counts[matchCount]; - } - - public int getPrizeFor(int matchCount) { - return PRIZES[matchCount]; - } - - public double getProfitRatio() { - int totalPrize = 0; - for (int i = 3; i <= 6; i++) { - totalPrize += getPrizeFor(i) * getCountFor(i); - } - return (double) totalPrize / (Lotto.purchaseLottos(14000).size() * Lotto.LOTTO_PRICE); - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 4f523701..7807b490 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,25 +1,35 @@ package view; +import domain.Lotto; import domain.LottoNumber; +import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; -import java.util.stream.Stream; public class InputView { private static final Scanner scanner = new Scanner(System.in); public static int getPurchaseAmount() { - System.out.print("구입금액을 입력해 주세요.\n"); + System.out.println("구입 금액을 입력해 주세요."); return Integer.parseInt(scanner.nextLine()); } - public static List getWinningNumbers() { - System.out.print("지난 주 당첨 번호를 입력해 주세요.\n"); - return Stream.of(scanner.nextLine().split(",")) + public static Lotto getWinningLotto() { + System.out.println("지난 주 당첨 번호를 입력해 주세요."); + String input = scanner.nextLine(); + List numbers = Arrays.stream(input.split(",")) + .map(String::trim) .map(Integer::parseInt) .map(LottoNumber::new) .collect(Collectors.toList()); + return new Lotto(numbers); + } + + public static LottoNumber getBonusNumber() { + System.out.println("보너스 볼을 입력해 주세요."); + int number = Integer.parseInt(scanner.nextLine()); + return new LottoNumber(number); } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 5cc75d9c..c12fa8ca 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,26 +1,37 @@ package view; import domain.Lotto; -import domain.LottoStatistics; +import domain.LottoPrize; +import domain.LottoResult; import java.util.List; public class OutputView { public static void printLottos(List lottos) { System.out.printf("%d개를 구매했습니다.\n", lottos.size()); - for (Lotto lotto : lottos) { - System.out.println(lotto); + lottos.forEach(System.out::println); + System.out.println(); + } + + public static void printResult(LottoResult result, int purchaseAmount) { + System.out.println("당첨 통계"); + System.out.println("---------"); + for (LottoPrize prize : LottoPrize.values()) { + int count = result.getCountByPrize(prize); + printPrizeStatics(prize, count); } + double earningRate = result.getEarningRate(purchaseAmount); + System.out.printf("총 수익률은 %.2f입니다.%n", earningRate); } - public static void printStatistics(LottoStatistics statistics) { - System.out.println("\n당첨 통계\n---------"); - System.out.printf("3개 일치 (%d원)- %d개\n", statistics.getPrizeFor(3), statistics.getCountFor(3)); - System.out.printf("4개 일치 (%d원)- %d개\n", statistics.getPrizeFor(4), statistics.getCountFor(4)); - System.out.printf("5개 일치 (%d원)- %d개\n", statistics.getPrizeFor(5), statistics.getCountFor(5)); - System.out.printf("6개 일치 (%d원)- %d개\n", statistics.getPrizeFor(6), statistics.getCountFor(6)); - System.out.printf("총 수익률은 %.2f입니다.(기준이 1이기 때문에 결과적으로 %s라는 의미임)\n", - statistics.getProfitRatio(), - statistics.getProfitRatio() < 1 ? "손해" : "이익"); + private static void printPrizeStatics(LottoPrize prize, int statics) { + if (prize == LottoPrize.MISS) { + return; + } + if (prize.isMatchBonus()) { + System.out.printf("%d개 일치, 보너스 볼 일치(%d원) - %d개%n", prize.getMatchCount(), prize.getPrize(), statics); + return; + } + System.out.printf("%d개 일치 (%d원)- %d개%n", prize.getMatchCount(), prize.getPrize(), statics); } } From a39799b707ae9c46b217f4b0c759c4c47b7879a2 Mon Sep 17 00:00:00 2001 From: zhy2on Date: Tue, 7 May 2024 05:13:53 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=204=EB=8B=A8=EA=B3=84=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LottoController.java | 8 +++++--- src/main/java/domain/LottoMachine.java | 3 +++ src/main/java/view/InputView.java | 20 ++++++++++++++++++- src/main/java/view/OutputView.java | 9 +++++---- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index 144bc983..dd983b41 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -9,10 +9,12 @@ public class LottoController { public void run() { int purchaseAmount = InputView.getPurchaseAmount(); - List lottos = LottoMachine.generateLottos(purchaseAmount / Lotto.LOTTO_PRICE); - OutputView.printLottos(lottos); + int manualLottoCount = InputView.getManualLottoCount(); + List lottos = InputView.getManualLottos(manualLottoCount); + lottos.addAll(LottoMachine.generateLottos(purchaseAmount / Lotto.LOTTO_PRICE - manualLottoCount)); + OutputView.printLottos(lottos, manualLottoCount); - Lotto winningLotto = InputView.getWinningLotto(); + Lotto winningLotto = InputView.getWinningLottoNumbers(); LottoNumber bonusNumber = InputView.getBonusNumber(); LottoResult result = getLottoResult(lottos, winningLotto, bonusNumber); diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java index 495ef22c..605d995a 100644 --- a/src/main/java/domain/LottoMachine.java +++ b/src/main/java/domain/LottoMachine.java @@ -1,10 +1,13 @@ package domain; +import domain.Lotto; + import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class LottoMachine { + public static List generateLottos(int count) { return Stream.generate(Lotto::generate) .limit(count) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 7807b490..7f008607 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -3,10 +3,12 @@ import domain.Lotto; import domain.LottoNumber; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; +import java.util.stream.IntStream; public class InputView { private static final Scanner scanner = new Scanner(System.in); @@ -16,8 +18,24 @@ public static int getPurchaseAmount() { return Integer.parseInt(scanner.nextLine()); } - public static Lotto getWinningLotto() { + public static int getManualLottoCount() { + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + return Integer.parseInt(scanner.nextLine()); + } + + public static List getManualLottos(int count) { + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + return IntStream.range(0, count) + .mapToObj(i -> getLottoNumbers()) + .collect(Collectors.toList()); + } + + public static Lotto getWinningLottoNumbers() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); + return getLottoNumbers(); + } + + private static Lotto getLottoNumbers() { String input = scanner.nextLine(); List numbers = Arrays.stream(input.split(",")) .map(String::trim) diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index c12fa8ca..ec6d3af4 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -7,10 +7,11 @@ import java.util.List; public class OutputView { - public static void printLottos(List lottos) { - System.out.printf("%d개를 구매했습니다.\n", lottos.size()); - lottos.forEach(System.out::println); - System.out.println(); + public static void printLottos(List lottos, int manualLottoCount) { + int autoLottoCount = lottos.size() - manualLottoCount; + System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.\n", manualLottoCount, autoLottoCount); + lottos.stream().skip(0).limit(manualLottoCount).forEach(System.out::println); + lottos.stream().skip(manualLottoCount).limit(autoLottoCount).forEach(System.out::println); } public static void printResult(LottoResult result, int purchaseAmount) { From 9864dfdb2d43c79d4b43eb2ec1abc8f189c6a582 Mon Sep 17 00:00:00 2001 From: zhy2on Date: Tue, 7 May 2024 05:20:25 +0900 Subject: [PATCH 5/7] =?UTF-8?q?test=20=EC=BD=94=EB=93=9C=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 --- src/test/java/domain/LottoMachineTest.java | 18 +++++++ src/test/java/domain/LottoNumberTest.java | 47 ++++++++++++++++++ src/test/java/domain/LottoTest.java | 57 ++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 src/test/java/domain/LottoMachineTest.java create mode 100644 src/test/java/domain/LottoNumberTest.java create mode 100644 src/test/java/domain/LottoTest.java diff --git a/src/test/java/domain/LottoMachineTest.java b/src/test/java/domain/LottoMachineTest.java new file mode 100644 index 00000000..709bf24b --- /dev/null +++ b/src/test/java/domain/LottoMachineTest.java @@ -0,0 +1,18 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LottoMachineTest { + + @Test + void generateLottos() { + int count = 5; + List lottos = LottoMachine.generateLottos(count); + assertThat(lottos.size()).isEqualTo(count); + assertThat(lottos.stream().distinct().count()).isEqualTo(count); + } +} diff --git a/src/test/java/domain/LottoNumberTest.java b/src/test/java/domain/LottoNumberTest.java new file mode 100644 index 00000000..0f3531c4 --- /dev/null +++ b/src/test/java/domain/LottoNumberTest.java @@ -0,0 +1,47 @@ +import domain.LottoNumber; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class LottoNumberTest { + + @Test + void validateNumber() { + // 유효한 숫자인 경우 + assertThat(new LottoNumber(1)).isNotNull(); + assertThat(new LottoNumber(45)).isNotNull(); + + // 유효하지 않은 숫자인 경우 + assertThatThrownBy(() -> new LottoNumber(0)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("로또 번호는 1부터 45 사이의 값이어야 합니다."); + assertThatThrownBy(() -> new LottoNumber(46)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("로또 번호는 1부터 45 사이의 값이어야 합니다."); + } + + @Test + void generate() { + LottoNumber number = LottoNumber.generate(); + assertThat(number.number()).isBetween(1, 45); + } + + @Test + void toString_test() { + LottoNumber number = new LottoNumber(5); + assertThat(number.toString()).isEqualTo("5"); + } + + @Test + void compareTo() { + LottoNumber num1 = new LottoNumber(1); + LottoNumber num2 = new LottoNumber(2); + LottoNumber num3 = new LottoNumber(3); + + assertThat(num1.compareTo(num2)).isNegative(); + assertThat(num2.compareTo(num1)).isPositive(); + assertThat(num2.compareTo(num3)).isNegative(); + assertThat(num2.compareTo(num2)).isZero(); + } +} diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/domain/LottoTest.java new file mode 100644 index 00000000..f35e54b3 --- /dev/null +++ b/src/test/java/domain/LottoTest.java @@ -0,0 +1,57 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class LottoTest { + + @Test + void validateNumbers() { + // 로또 숫자가 6개인 경우 + List validNumbers = Arrays.asList( + new LottoNumber(1), new LottoNumber(2), new LottoNumber(3), + new LottoNumber(4), new LottoNumber(5), new LottoNumber(6) + ); + assertThat(new Lotto(validNumbers)).isNotNull(); + + // 로또 숫자가 6개가 아닌 경우 + List invalidNumbers = Arrays.asList( + new LottoNumber(1), new LottoNumber(2), new LottoNumber(3), + new LottoNumber(4), new LottoNumber(5) + ); + assertThatThrownBy(() -> new Lotto(invalidNumbers)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("로또 숫자는 6개여야 합니다."); + + // 로또 숫자에 중복이 있는 경우 + List duplicatedNumbers = Arrays.asList( + new LottoNumber(1), new LottoNumber(2), new LottoNumber(3), + new LottoNumber(4), new LottoNumber(5), new LottoNumber(5) + ); + assertThatThrownBy(() -> new Lotto(duplicatedNumbers)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("로또 숫자는 중복 되지 않아야 합니다."); + } + + @Test + void generate() { + Lotto lotto = Lotto.generate(); + assertThat(lotto.numbers().size()).isEqualTo(6); + assertThat(lotto.numbers().stream().distinct().count()).isEqualTo(6); + } + + @Test + void contains() { + Lotto lotto = new Lotto(Arrays.asList( + new LottoNumber(1), new LottoNumber(2), new LottoNumber(3), + new LottoNumber(4), new LottoNumber(5), new LottoNumber(6) + )); + assertThat(lotto.contains(new LottoNumber(1))).isTrue(); + assertThat(lotto.contains(new LottoNumber(7))).isFalse(); + } +} From 26ddc724a15b2350df9e54849127e1211c112dfe Mon Sep 17 00:00:00 2001 From: zhy2on Date: Tue, 7 May 2024 13:35:32 +0900 Subject: [PATCH 6/7] =?UTF-8?q?refactor:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20-=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=A7=A4?= =?UTF-8?q?=EA=B0=9C=EB=B3=80=EC=88=98=EC=97=90=20final=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20LottoController=EC=97=90=20auttoCount=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=EC=97=90=20=EC=9E=90=EB=8F=99=EC=B6=94?= =?UTF-8?q?=EC=B2=A8=20=EA=B0=9C=EC=88=98=20=EA=B3=84=EC=82=B0=ED=95=B4?= =?UTF-8?q?=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LottoController.java | 10 ++++++---- src/main/java/domain/Lotto.java | 4 ++-- src/main/java/domain/LottoMachine.java | 2 +- src/main/java/domain/LottoNumber.java | 2 +- src/main/java/domain/LottoPrize.java | 5 ++--- src/main/java/domain/LottoResult.java | 6 +++--- src/main/java/view/InputView.java | 2 +- src/main/java/view/OutputView.java | 6 +++--- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index dd983b41..8b0d374b 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -11,7 +11,9 @@ public void run() { int purchaseAmount = InputView.getPurchaseAmount(); int manualLottoCount = InputView.getManualLottoCount(); List lottos = InputView.getManualLottos(manualLottoCount); - lottos.addAll(LottoMachine.generateLottos(purchaseAmount / Lotto.LOTTO_PRICE - manualLottoCount)); + + int autoLottoCount = purchaseAmount / Lotto.LOTTO_PRICE - manualLottoCount; + lottos.addAll(LottoMachine.generateLottos(autoLottoCount)); OutputView.printLottos(lottos, manualLottoCount); Lotto winningLotto = InputView.getWinningLottoNumbers(); @@ -21,20 +23,20 @@ public void run() { OutputView.printResult(result, purchaseAmount); } - private LottoResult getLottoResult(List lottos, Lotto winningLotto, LottoNumber bonusNumber) { + private LottoResult getLottoResult(final List lottos, final Lotto winningLotto, final LottoNumber bonusNumber) { List prizes = lottos.stream() .map(lotto -> getLottoPrize(lotto, winningLotto, bonusNumber)) .toList(); return new LottoResult(prizes); } - private LottoPrize getLottoPrize(Lotto lotto, Lotto winningLotto, LottoNumber bonusNumber) { + private LottoPrize getLottoPrize(final Lotto lotto, final Lotto winningLotto, final LottoNumber bonusNumber) { int matchCount = countMatchingNumbers(lotto, winningLotto); boolean isMatchBonus = lotto.contains(bonusNumber); return LottoPrize.matchPrize(matchCount, isMatchBonus); } - private int countMatchingNumbers(Lotto lotto, Lotto winningLotto) { + private int countMatchingNumbers(final Lotto lotto, final Lotto winningLotto) { return (int) lotto.numbers().stream() .filter(winningLotto.numbers()::contains) .count(); diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index fbad96d7..e304e194 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -14,7 +14,7 @@ public record Lotto(List numbers) { Collections.sort(numbers); } - private void validateNumbers(List numbers) { + private void validateNumbers(final List numbers) { if (numbers.size() != LOTTO_NUMBER_COUNT) { throw new IllegalArgumentException("로또 숫자는 6개여야 합니다."); } @@ -31,7 +31,7 @@ public static Lotto generate() { return new Lotto(numbers); } - public boolean contains(LottoNumber number) { + public boolean contains(final LottoNumber number) { return numbers.contains(number); } diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java index 605d995a..da02949c 100644 --- a/src/main/java/domain/LottoMachine.java +++ b/src/main/java/domain/LottoMachine.java @@ -8,7 +8,7 @@ public class LottoMachine { - public static List generateLottos(int count) { + public static List generateLottos(final int count) { return Stream.generate(Lotto::generate) .limit(count) .collect(Collectors.toList()); diff --git a/src/main/java/domain/LottoNumber.java b/src/main/java/domain/LottoNumber.java index f64c9d4c..4358319e 100644 --- a/src/main/java/domain/LottoNumber.java +++ b/src/main/java/domain/LottoNumber.java @@ -27,7 +27,7 @@ public String toString() { } @Override - public int compareTo(LottoNumber other) { + public int compareTo(final LottoNumber other) { return Integer.compare(this.number, other.number); } } diff --git a/src/main/java/domain/LottoPrize.java b/src/main/java/domain/LottoPrize.java index 10ffd09f..e3ade005 100644 --- a/src/main/java/domain/LottoPrize.java +++ b/src/main/java/domain/LottoPrize.java @@ -20,10 +20,10 @@ public enum LottoPrize { this.isMatchBonus = isMatchBonus; } - public static LottoPrize matchPrize(final int matchCount, final boolean isWithBonus) { + public static LottoPrize matchPrize(final int matchCount, final boolean isMatchBonus) { return Arrays.stream(LottoPrize.values()) .filter(prize -> prize.matchCount == matchCount) - .filter(prize -> prize.isMatchBonus == isWithBonus) + .filter(prize -> prize.isMatchBonus == isMatchBonus) .findFirst() .orElse(MISS); } @@ -40,4 +40,3 @@ public boolean isMatchBonus() { return isMatchBonus; } } - diff --git a/src/main/java/domain/LottoResult.java b/src/main/java/domain/LottoResult.java index 99f25ecd..ad498888 100644 --- a/src/main/java/domain/LottoResult.java +++ b/src/main/java/domain/LottoResult.java @@ -5,7 +5,7 @@ public class LottoResult { private final List prizes; - public LottoResult(List prizes) { + public LottoResult(final List prizes) { this.prizes = prizes; } @@ -15,11 +15,11 @@ public int getTotalPrize() { .sum(); } - public double getEarningRate(int purchaseAmount) { + public double getEarningRate(final int purchaseAmount) { return (double) getTotalPrize() / purchaseAmount; } - public int getCountByPrize(LottoPrize prize) { + public int getCountByPrize(final LottoPrize prize) { return (int) prizes.stream() .filter(p -> p == prize) .count(); diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 7f008607..e012360e 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -23,7 +23,7 @@ public static int getManualLottoCount() { return Integer.parseInt(scanner.nextLine()); } - public static List getManualLottos(int count) { + public static List getManualLottos(final int count) { System.out.println("수동으로 구매할 번호를 입력해 주세요."); return IntStream.range(0, count) .mapToObj(i -> getLottoNumbers()) diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index ec6d3af4..12d7b8bb 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -7,14 +7,14 @@ import java.util.List; public class OutputView { - public static void printLottos(List lottos, int manualLottoCount) { + public static void printLottos(final List lottos, final int manualLottoCount) { int autoLottoCount = lottos.size() - manualLottoCount; System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.\n", manualLottoCount, autoLottoCount); lottos.stream().skip(0).limit(manualLottoCount).forEach(System.out::println); lottos.stream().skip(manualLottoCount).limit(autoLottoCount).forEach(System.out::println); } - public static void printResult(LottoResult result, int purchaseAmount) { + public static void printResult(final LottoResult result, final int purchaseAmount) { System.out.println("당첨 통계"); System.out.println("---------"); for (LottoPrize prize : LottoPrize.values()) { @@ -25,7 +25,7 @@ public static void printResult(LottoResult result, int purchaseAmount) { System.out.printf("총 수익률은 %.2f입니다.%n", earningRate); } - private static void printPrizeStatics(LottoPrize prize, int statics) { + private static void printPrizeStatics(final LottoPrize prize, final int statics) { if (prize == LottoPrize.MISS) { return; } From 5b04e8e76a7f68b0c0580d5ba35c6722a677ea2f Mon Sep 17 00:00:00 2001 From: zhy2on Date: Tue, 7 May 2024 14:09:37 +0900 Subject: [PATCH 7/7] =?UTF-8?q?refactor:=20printLottos=20=EB=A7=A4?= =?UTF-8?q?=EA=B0=9C=EB=B3=80=EC=88=98=EC=97=90=20autoLottoCount=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LottoController.java | 2 +- src/main/java/view/OutputView.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index 8b0d374b..3d43b9a3 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -14,7 +14,7 @@ public void run() { int autoLottoCount = purchaseAmount / Lotto.LOTTO_PRICE - manualLottoCount; lottos.addAll(LottoMachine.generateLottos(autoLottoCount)); - OutputView.printLottos(lottos, manualLottoCount); + OutputView.printLottos(lottos, manualLottoCount, autoLottoCount); Lotto winningLotto = InputView.getWinningLottoNumbers(); LottoNumber bonusNumber = InputView.getBonusNumber(); diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 12d7b8bb..d27f05c5 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -7,8 +7,7 @@ import java.util.List; public class OutputView { - public static void printLottos(final List lottos, final int manualLottoCount) { - int autoLottoCount = lottos.size() - manualLottoCount; + public static void printLottos(final List lottos, final int manualLottoCount, final int autoLottoCount) { System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.\n", manualLottoCount, autoLottoCount); lottos.stream().skip(0).limit(manualLottoCount).forEach(System.out::println); lottos.stream().skip(manualLottoCount).limit(autoLottoCount).forEach(System.out::println);