From 4b62982227de403ee59c12f79d76a8f3d237a14b Mon Sep 17 00:00:00 2001 From: junhokim Date: Wed, 13 Mar 2024 17:27:57 +0900 Subject: [PATCH 01/29] =?UTF-8?q?sortNumbers():=20=EB=BD=91=EC=9D=80=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=ED=95=B4=EC=A4=80=EB=8A=90=20=ED=95=A8=EC=88=98=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/main/java/lotto/Lotto.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 519793d..0e8b165 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,20 +1,29 @@ package lotto; +import java.util.Collections; import java.util.List; public class Lotto { private final List numbers; + Application application = new Application(); + public Lotto(List numbers) { validate(numbers); this.numbers = numbers; } + + private void validate(List numbers) { if (numbers.size() != 6) { throw new IllegalArgumentException(); } } - // TODO: 추가 기능 구현 + + public void sortNumbers(){ + Collections.sort(this.numbers); + } + } From 9ea4892b7d80f0c80d098cfdb971677fa68a1d29 Mon Sep 17 00:00:00 2001 From: junhokim Date: Wed, 13 Mar 2024 17:29:00 +0900 Subject: [PATCH 02/29] =?UTF-8?q?sortNumbers():=20=EB=BD=91=EC=9D=80=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=ED=95=B4=EC=A4=80=EB=8A=90=20=ED=95=A8=EC=88=98=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/main/java/lotto/Lotto.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 0e8b165..3357911 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -26,4 +26,8 @@ public void sortNumbers(){ Collections.sort(this.numbers); } + public void printNumbers(){ + System.out.println(numbers); + } + } From 96eb9038942c5e2216b1b6121911994e520cdeaa Mon Sep 17 00:00:00 2001 From: junhokim Date: Wed, 13 Mar 2024 17:32:44 +0900 Subject: [PATCH 03/29] =?UTF-8?q?sortNumbers():=20=EB=BD=91=EC=9D=80=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=ED=95=B4=EC=A3=BC=EB=8A=94=20=ED=95=A8=EC=88=98=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/main/java/lotto/Lotto.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 3357911..5a0325a 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -5,7 +5,6 @@ public class Lotto { private final List numbers; - Application application = new Application(); public Lotto(List numbers) { @@ -26,8 +25,4 @@ public void sortNumbers(){ Collections.sort(this.numbers); } - public void printNumbers(){ - System.out.println(numbers); - } - } From ea710d4507d737f22acde8850257df6ee0eb1b1c Mon Sep 17 00:00:00 2001 From: junhokim Date: Wed, 13 Mar 2024 17:50:48 +0900 Subject: [PATCH 04/29] =?UTF-8?q?printNumbers():=20=EB=B0=9C=ED=96=89?= =?UTF-8?q?=ED=95=9C=20=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=B4=EC=A3=BC=EB=8A=94=20=ED=95=A8=EC=88=98=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/lotto/Lotto.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 5a0325a..26b54a7 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -25,4 +25,8 @@ public void sortNumbers(){ Collections.sort(this.numbers); } + public void printNumbers(){ + System.out.println(numbers); + } + } From dc267dd06e9f2a994667a44ea363ec94858e781b Mon Sep 17 00:00:00 2001 From: junhokim Date: Wed, 13 Mar 2024 17:59:29 +0900 Subject: [PATCH 05/29] =?UTF-8?q?sortNumbers():=20=EB=BD=91=EC=9D=80=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=ED=95=B4=EC=A3=BC=EB=8A=94=20=ED=95=A8=EC=88=98=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/main/java/lotto/Lotto.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 26b54a7..5a0325a 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -25,8 +25,4 @@ public void sortNumbers(){ Collections.sort(this.numbers); } - public void printNumbers(){ - System.out.println(numbers); - } - } From 117bb9f19b3d4ea3a435266ab445a9dfa1f16275 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:34:54 +0900 Subject: [PATCH 06/29] =?UTF-8?q?=EC=A4=91=EB=B3=B5=EB=90=9C=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EA=B2=80=EC=82=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 5a0325a..29a068f 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,28 +1,33 @@ package lotto; -import java.util.Collections; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.List; +import static lotto.SortLottoNumber.sortNumbers; + public class Lotto { private final List numbers; public Lotto(List numbers) { validate(numbers); + validateDuplicate(numbers); this.numbers = numbers; } - - private void validate(List numbers) { if (numbers.size() != 6) { + System.out.println("[ERROR] 로또 번호는 6개여야 합니다."); throw new IllegalArgumentException(); } } - - public void sortNumbers(){ - Collections.sort(this.numbers); + private void validateDuplicate(List numbers){ + if(numbers.size() != numbers.stream().distinct().count()){ + System.out.println("[ERROR] 로또 번호는 중복된 수가 있으면 안됩니다."); + throw new IllegalArgumentException(); + } } } From 00fdf98a1853e284531a819e134170666aacda02 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:35:11 +0900 Subject: [PATCH 07/29] =?UTF-8?q?=EB=B2=88=ED=98=B8=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=A8=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 29a068f..91b50d8 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -30,4 +30,9 @@ private void validateDuplicate(List numbers){ } } + public void printNumbers(){ + System.out.println(numbers); + } + + } From 6bc41b4f67aa88d3a0b8f56cdef35b65eb60bdf0 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:35:30 +0900 Subject: [PATCH 08/29] =?UTF-8?q?=EB=B2=88=ED=98=B8=EA=B2=8C=ED=84=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 91b50d8..cb35067 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -34,5 +34,7 @@ public void printNumbers(){ System.out.println(numbers); } - + public List getNumbers() { + return numbers; + } } From 5b87acbe36dc7a4a1b12a4cf8e79692a8ebc0ffc Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:44:08 +0900 Subject: [PATCH 09/29] =?UTF-8?q?=EB=A1=9C=EB=98=901=EB=93=B1=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/WinPriceNumber.java | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/lotto/WinPriceNumber.java diff --git a/src/main/java/lotto/WinPriceNumber.java b/src/main/java/lotto/WinPriceNumber.java new file mode 100644 index 0000000..31223ac --- /dev/null +++ b/src/main/java/lotto/WinPriceNumber.java @@ -0,0 +1,28 @@ +package lotto; + + +import java.util.ArrayList; +import java.util.List; + +import static camp.nextstep.edu.missionutils.Console.readLine; +import static lotto.SortLottoNumber.sortNumbers; + +public class WinPriceNumber { + + private static final String LOTTO_NUMBER_MESSAGE = "당첨 번호를 입력해 주세요."; + private static final String LOTTO_BONUS_NUMBER_MESSAGE = "보너스 번호를 입력해 주세요."; + + public static List setWinPriceNumber() { + List numbers = new ArrayList<>(); + System.out.println(LOTTO_NUMBER_MESSAGE); + String[] str = readLine().split(","); + + for (int i = 0; i < 6; i++) { + numbers.add(Integer.parseInt(str[i])); + } + + sortNumbers(numbers); + return numbers; + } + +} From ecda46937f9f90ae7465996e27e6b4e96a680467 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:44:29 +0900 Subject: [PATCH 10/29] =?UTF-8?q?=EB=B3=B4=EB=84=88=EC=8A=A4=EB=84=98?= =?UTF-8?q?=EB=B2=84=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/WinPriceNumber.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/lotto/WinPriceNumber.java b/src/main/java/lotto/WinPriceNumber.java index 31223ac..040c359 100644 --- a/src/main/java/lotto/WinPriceNumber.java +++ b/src/main/java/lotto/WinPriceNumber.java @@ -25,4 +25,8 @@ public static List setWinPriceNumber() { return numbers; } + public static int getLottoBonusNumber() { + System.out.println(LOTTO_BONUS_NUMBER_MESSAGE); + return Integer.parseInt(readLine()); + } } From 11db236e1b00df0ca16c9aa3ee6647f3c056c4de Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:46:23 +0900 Subject: [PATCH 11/29] =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EB=B0=9C=ED=96=89=EA=B3=BC=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/CreateRandomLottoNumbers.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/lotto/CreateRandomLottoNumbers.java diff --git a/src/main/java/lotto/CreateRandomLottoNumbers.java b/src/main/java/lotto/CreateRandomLottoNumbers.java new file mode 100644 index 0000000..44b7520 --- /dev/null +++ b/src/main/java/lotto/CreateRandomLottoNumbers.java @@ -0,0 +1,13 @@ +package lotto; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.List; + +import static lotto.SortLottoNumber.sortNumbers; + +public class CreateRandomLottoNumbers { + public static List createRandomLottoNumbers() { + return sortNumbers(Randoms.pickUniqueNumbersInRange(1, 45, 6)); + } +} From 9bd12c2bfc792edd754c4ac875c52fe03d4af5e1 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:46:42 +0900 Subject: [PATCH 12/29] =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/SortLottoNumber.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/lotto/SortLottoNumber.java diff --git a/src/main/java/lotto/SortLottoNumber.java b/src/main/java/lotto/SortLottoNumber.java new file mode 100644 index 0000000..640a47d --- /dev/null +++ b/src/main/java/lotto/SortLottoNumber.java @@ -0,0 +1,11 @@ +package lotto; + +import java.util.Collections; +import java.util.List; + +public class SortLottoNumber { + public static List sortNumbers(List numbers){ + Collections.sort(numbers); + return numbers; + } +} From 1ee08c461882c9ff4afc911decd36e8af4cf8aa3 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:51:39 +0900 Subject: [PATCH 13/29] =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EC=88=98=EB=9F=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/BuyLotto.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/lotto/BuyLotto.java diff --git a/src/main/java/lotto/BuyLotto.java b/src/main/java/lotto/BuyLotto.java new file mode 100644 index 0000000..cb012a6 --- /dev/null +++ b/src/main/java/lotto/BuyLotto.java @@ -0,0 +1,12 @@ +package lotto; + +import static camp.nextstep.edu.missionutils.Console.readLine; + +public class BuyLotto { + private static final String PURCHASE_AMOUNT_MESSAGE = "구입금액을 입력해 주세요."; + public static int getPurchaseAmount() { + System.out.println(PURCHASE_AMOUNT_MESSAGE); + String str = readLine(); + return Integer.parseInt(str) / 1000; + } +} From c7e4fa5608a9a6e6a81b9f9c9240beab6b12e591 Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 21:54:12 +0900 Subject: [PATCH 14/29] set->get --- src/main/java/lotto/WinPriceNumber.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/lotto/WinPriceNumber.java b/src/main/java/lotto/WinPriceNumber.java index 040c359..bc667b6 100644 --- a/src/main/java/lotto/WinPriceNumber.java +++ b/src/main/java/lotto/WinPriceNumber.java @@ -12,7 +12,7 @@ public class WinPriceNumber { private static final String LOTTO_NUMBER_MESSAGE = "당첨 번호를 입력해 주세요."; private static final String LOTTO_BONUS_NUMBER_MESSAGE = "보너스 번호를 입력해 주세요."; - public static List setWinPriceNumber() { + public static List getWinPriceNumber() { List numbers = new ArrayList<>(); System.out.println(LOTTO_NUMBER_MESSAGE); String[] str = readLine().split(","); From d7180a1720296e043c8b62c60d01894779aedf4e Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 22:21:16 +0900 Subject: [PATCH 15/29] =?UTF-8?q?=EC=B0=B8=EA=B3=A0=EB=A1=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B3=B5=EB=90=9C=20=EC=86=8C=EC=8A=A4=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B3=B5=EB=B6=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lotto/winningLotto/WinningLotto.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/main/java/lotto/winningLotto/WinningLotto.java diff --git a/src/main/java/lotto/winningLotto/WinningLotto.java b/src/main/java/lotto/winningLotto/WinningLotto.java new file mode 100644 index 0000000..217cc7b --- /dev/null +++ b/src/main/java/lotto/winningLotto/WinningLotto.java @@ -0,0 +1,74 @@ +package lotto.winningLotto; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WinningLotto { + + private static final String WINNING_NUMBERS_ARE_BETWEEN_ONE_AND_FORTY_FIVE = "[ERROR] 당첨 번호는 1부터 45 사이의 숫자여야 합니다."; + private static final String WINNING_NUMBERS_MUST_BE_SIX_DIFFERENT_NUMBERS = "[ERROR] 당첨 번호는 서로 다른 6개의 수여야 합니다."; + private static final String BONUS_NUMBER_IS_BETWEEN_ONE_AND_FORTY_FIVE = "[ERROR] 보너스 번호는 1부터 45 사이의 숫자여야 합니다."; + private static final String WINNING_NUMBERS_CONTAIN_BONUS_NUMBER = "[ERROR] 당첨 번호와 보너스 번호가 중복됩니다."; + private static final int LOTTO_NUMBER_LOWER_LIMIT = 1; + private static final int LOTTO_NUMBER_UPPER_LIMIT = 45; + private static final int LOTTO_NUMBERS_SIZE = 6; + + private final List winningNumbers; + private final int bonusNumber; + + public WinningLotto(List winningNumbers, int bonusNumber) { + validateWinningNumbers(winningNumbers); + validateBonusNumber(bonusNumber); + validateDuplicate(winningNumbers, bonusNumber); + this.winningNumbers = winningNumbers; + this.bonusNumber = bonusNumber; + } + + private void validateWinningNumbers(List winningNumbers) { + if (!isSixDifferentNumbers(winningNumbers)) { + throw new IllegalArgumentException(WINNING_NUMBERS_MUST_BE_SIX_DIFFERENT_NUMBERS); + } + if (!isBetweenOneAndFortyFive(winningNumbers)) { + throw new IllegalArgumentException(WINNING_NUMBERS_ARE_BETWEEN_ONE_AND_FORTY_FIVE); + } + } + + private boolean isBetweenOneAndFortyFive(List winningNumbers) { + for (int winningNumber : winningNumbers) { + if (winningNumber < LOTTO_NUMBER_LOWER_LIMIT || winningNumber > LOTTO_NUMBER_UPPER_LIMIT) { + return false; + } + } + return true; + } + + private boolean isSixDifferentNumbers(List winningNumbers) { + Set duplicateChecker = new HashSet<>(winningNumbers); + return duplicateChecker.size() == LOTTO_NUMBERS_SIZE; + } + + private void validateBonusNumber(int bonusNumber) { + if (!isBetweenOneAndFortyFive(bonusNumber)) { + throw new IllegalArgumentException(BONUS_NUMBER_IS_BETWEEN_ONE_AND_FORTY_FIVE); + } + } + + private boolean isBetweenOneAndFortyFive(int bonusNumber) { + return bonusNumber >= LOTTO_NUMBER_LOWER_LIMIT && bonusNumber <= LOTTO_NUMBER_UPPER_LIMIT; + } + + private void validateDuplicate(List winningNumbers, int bonusNumber) { + if (winningNumbers.contains(bonusNumber)) { + throw new IllegalArgumentException(WINNING_NUMBERS_CONTAIN_BONUS_NUMBER); + } + } + + public List getWinningNumbers() { + return winningNumbers; + } + + public int getBonusNumber() { + return bonusNumber; + } +} From f9cb740720ad90e2e5cdf60f6993b4c19a9e601e Mon Sep 17 00:00:00 2001 From: junhokim Date: Fri, 15 Mar 2024 22:36:33 +0900 Subject: [PATCH 16/29] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=ED=95=9C=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=EB=A7=8C=ED=81=BC=20=EB=A1=9C=EB=98=90=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=83=9D=EC=84=B1=ED=95=98=EA=B3=A0=20=EB=8B=B9?= =?UTF-8?q?=EC=B2=A8=EB=B2=88=ED=98=B8=EC=99=80=20=EB=B3=B4=EB=84=88?= =?UTF-8?q?=EC=8A=A4=EB=84=98=EB=B2=84=20=EC=9E=85=EB=A0=A5=EA=B9=8C?= =?UTF-8?q?=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922..3c260be 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,27 @@ package lotto; +import lotto.winningLotto.WinningLotto; +import lotto.WinPriceNumber; + +import static lotto.WinPriceNumber.getLottoBonusNumber; +import static lotto.WinPriceNumber.getWinPriceNumber; + public class Application { + public static void main(String[] args) { - // TODO: 프로그램 구현 + + final int purchaseAmount = BuyLotto.getPurchaseAmount(); + Lotto[] lotto = new Lotto[purchaseAmount]; + + System.out.println(purchaseAmount + "개 구매했습니다."); + + for (int i = 0; i < purchaseAmount; i++) { + lotto[i] = new Lotto(CreateRandomLottoNumbers.createRandomLottoNumbers()); + lotto[i].printNumbers(); + } + + WinningLotto winningLotto = new WinningLotto(getWinPriceNumber(), getLottoBonusNumber()); + + } } From de119968e8c4732c83706837805589955b124715 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:10:29 +0900 Subject: [PATCH 17/29] =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD(Input=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InputWinPriceNumber.java} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename src/main/java/lotto/{WinPriceNumber.java => winningLotto/InputWinPriceNumber.java} (93%) diff --git a/src/main/java/lotto/WinPriceNumber.java b/src/main/java/lotto/winningLotto/InputWinPriceNumber.java similarity index 93% rename from src/main/java/lotto/WinPriceNumber.java rename to src/main/java/lotto/winningLotto/InputWinPriceNumber.java index bc667b6..b637027 100644 --- a/src/main/java/lotto/WinPriceNumber.java +++ b/src/main/java/lotto/winningLotto/InputWinPriceNumber.java @@ -1,4 +1,4 @@ -package lotto; +package lotto.winningLotto; import java.util.ArrayList; @@ -7,11 +7,12 @@ import static camp.nextstep.edu.missionutils.Console.readLine; import static lotto.SortLottoNumber.sortNumbers; -public class WinPriceNumber { +public class InputWinPriceNumber { private static final String LOTTO_NUMBER_MESSAGE = "당첨 번호를 입력해 주세요."; private static final String LOTTO_BONUS_NUMBER_MESSAGE = "보너스 번호를 입력해 주세요."; + public static List getWinPriceNumber() { List numbers = new ArrayList<>(); System.out.println(LOTTO_NUMBER_MESSAGE); From e5949e8645a747145869766c9f6040e0dd34779a Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:10:39 +0900 Subject: [PATCH 18/29] =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD(Input=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 3c260be..578bbf6 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,16 +1,14 @@ package lotto; import lotto.winningLotto.WinningLotto; -import lotto.WinPriceNumber; +import lotto.winningLotto.InputWinPriceNumber; -import static lotto.WinPriceNumber.getLottoBonusNumber; -import static lotto.WinPriceNumber.getWinPriceNumber; public class Application { public static void main(String[] args) { - final int purchaseAmount = BuyLotto.getPurchaseAmount(); + final int purchaseAmount = BuyLotto.getPurchaseAmount(); Lotto[] lotto = new Lotto[purchaseAmount]; System.out.println(purchaseAmount + "개 구매했습니다."); @@ -20,8 +18,8 @@ public static void main(String[] args) { lotto[i].printNumbers(); } - WinningLotto winningLotto = new WinningLotto(getWinPriceNumber(), getLottoBonusNumber()); + WinningLotto winningLotto = new WinningLotto(InputWinPriceNumber.getWinPriceNumber(), InputWinPriceNumber.getLottoBonusNumber()); } -} +} \ No newline at end of file From 9c67cca025ca3d0a16909fdba193d65a264caa3d Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:13:02 +0900 Subject: [PATCH 19/29] =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20import=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/BuyLotto.java | 4 ++-- src/main/java/lotto/Lotto.java | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/lotto/BuyLotto.java b/src/main/java/lotto/BuyLotto.java index cb012a6..e79917b 100644 --- a/src/main/java/lotto/BuyLotto.java +++ b/src/main/java/lotto/BuyLotto.java @@ -1,12 +1,12 @@ package lotto; -import static camp.nextstep.edu.missionutils.Console.readLine; +import camp.nextstep.edu.missionutils.Console; public class BuyLotto { private static final String PURCHASE_AMOUNT_MESSAGE = "구입금액을 입력해 주세요."; public static int getPurchaseAmount() { System.out.println(PURCHASE_AMOUNT_MESSAGE); - String str = readLine(); + String str = Console.readLine(); return Integer.parseInt(str) / 1000; } } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index cb35067..532d585 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,11 +1,7 @@ package lotto; -import camp.nextstep.edu.missionutils.Randoms; - import java.util.List; -import static lotto.SortLottoNumber.sortNumbers; - public class Lotto { private final List numbers; From b251404b8c56d8bff8a1e70c3aa1be0fa27d73f4 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:20:47 +0900 Subject: [PATCH 20/29] =?UTF-8?q?=EC=97=90=EB=9F=AC=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 532d585..9393d5b 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -4,7 +4,8 @@ public class Lotto { private final List numbers; - + private static final String LOTTO_NUMBERS_MUST_BE_SIX_DIFFERENT_NUMBERS = "[ERROR] 로 번호는 서로 다른 6개의 수여야 합니다."; + private static final String LOTTO_NUMBERS_MUST_BE_SIX_UNIQUE_NUMBERS = "[ERROR] 로또 번호는 중복된 수가 있으면 안됩니다."; public Lotto(List numbers) { validate(numbers); @@ -14,14 +15,14 @@ public Lotto(List numbers) { private void validate(List numbers) { if (numbers.size() != 6) { - System.out.println("[ERROR] 로또 번호는 6개여야 합니다."); + System.out.println(LOTTO_NUMBERS_MUST_BE_SIX_DIFFERENT_NUMBERS); throw new IllegalArgumentException(); } } private void validateDuplicate(List numbers){ if(numbers.size() != numbers.stream().distinct().count()){ - System.out.println("[ERROR] 로또 번호는 중복된 수가 있으면 안됩니다."); + System.out.println(LOTTO_NUMBERS_MUST_BE_SIX_UNIQUE_NUMBERS); throw new IllegalArgumentException(); } } From 4d524a8c49d810fc56e9a0a3f911291656bef7f8 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:21:11 +0900 Subject: [PATCH 21/29] =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20im?= =?UTF-8?q?port=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/CreateRandomLottoNumbers.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/lotto/CreateRandomLottoNumbers.java b/src/main/java/lotto/CreateRandomLottoNumbers.java index 44b7520..1d5625e 100644 --- a/src/main/java/lotto/CreateRandomLottoNumbers.java +++ b/src/main/java/lotto/CreateRandomLottoNumbers.java @@ -4,10 +4,8 @@ import java.util.List; -import static lotto.SortLottoNumber.sortNumbers; - public class CreateRandomLottoNumbers { public static List createRandomLottoNumbers() { - return sortNumbers(Randoms.pickUniqueNumbersInRange(1, 45, 6)); + return SortLottoNumber.sortNumbers(Randoms.pickUniqueNumbersInRange(1, 45, 6)); } } From 1d0c8eb5c1980ea11115616fa539efe1b18dfed7 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:25:19 +0900 Subject: [PATCH 22/29] =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=83=81?= =?UTF-8?q?=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 578bbf6..13ecce5 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -6,12 +6,14 @@ public class Application { + private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; + public static void main(String[] args) { final int purchaseAmount = BuyLotto.getPurchaseAmount(); Lotto[] lotto = new Lotto[purchaseAmount]; - System.out.println(purchaseAmount + "개 구매했습니다."); + System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE,purchaseAmount); for (int i = 0; i < purchaseAmount; i++) { lotto[i] = new Lotto(CreateRandomLottoNumbers.createRandomLottoNumbers()); From b1dc15a56655d5c0649015dc3ca3aa3dd193dbf5 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:25:53 +0900 Subject: [PATCH 23/29] =?UTF-8?q?ENUM=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=B0=B8=EA=B3=A0=EC=9E=90=EB=A3=8C=20=EB=B3=B5=EB=B6=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lotto/winningLotto/WinningRank.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/lotto/winningLotto/WinningRank.java diff --git a/src/main/java/lotto/winningLotto/WinningRank.java b/src/main/java/lotto/winningLotto/WinningRank.java new file mode 100644 index 0000000..51446ed --- /dev/null +++ b/src/main/java/lotto/winningLotto/WinningRank.java @@ -0,0 +1,39 @@ +package lotto.winningLotto; + +import java.util.Arrays; + +public enum WinningRank { + + LAST_PLACE(0, false, 0), + FIFTH_PLACE(3, false, 5_000), + FOURTH_PLACE(4, false, 50_000), + THIRD_PLACE(5, false, 1_500_000), + SECOND_PLACE(5, true, 30_000_000), + FIRST_PLACE(6, false, 2_000_000_000); + + private final int matchingCount; + private final boolean containsBonusNumber; + private final int winningPrice; + + WinningRank(int matchingCount, boolean containsBonusNumber, int winningPrice) { + this.matchingCount = matchingCount; + this.containsBonusNumber = containsBonusNumber; + this.winningPrice = winningPrice; + } + + public static WinningRank findWinningRank(int matchingCount, boolean containsBonusNumber) { + return Arrays.stream(values()) + .filter(winningRank -> winningRank.matchingCount == matchingCount) + .filter(winningRank -> winningRank.containsBonusNumber == containsBonusNumber) + .findFirst() + .orElse(WinningRank.LAST_PLACE); + } + + public int getMatchingCount() { + return matchingCount; + } + + public int getWinningPrice() { + return winningPrice; + } +} \ No newline at end of file From 9e3b7dcbeb49d6e0dcb88db34a4c559b9c587f99 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:39:30 +0900 Subject: [PATCH 24/29] =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC?= =?UTF-8?q?=EB=A1=9C=20=EB=A9=94=EC=9D=B8=EC=97=90=20=EC=9E=88=EB=8D=98=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=EC=9D=84=20=EC=98=AE=EA=B2=A8=EC=84=9C=20?= =?UTF-8?q?=EA=B0=80=EB=8F=85=EC=84=B1=20=EB=86=92=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Application.java | 21 +++------------- .../lotto/controller/LottoController.java | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 src/main/java/lotto/controller/LottoController.java diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 13ecce5..0010013 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,27 +1,12 @@ package lotto; -import lotto.winningLotto.WinningLotto; -import lotto.winningLotto.InputWinPriceNumber; - +import lotto.controller.LottoController; public class Application { - private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; - public static void main(String[] args) { - final int purchaseAmount = BuyLotto.getPurchaseAmount(); - Lotto[] lotto = new Lotto[purchaseAmount]; - - System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE,purchaseAmount); - - for (int i = 0; i < purchaseAmount; i++) { - lotto[i] = new Lotto(CreateRandomLottoNumbers.createRandomLottoNumbers()); - lotto[i].printNumbers(); - } - - WinningLotto winningLotto = new WinningLotto(InputWinPriceNumber.getWinPriceNumber(), InputWinPriceNumber.getLottoBonusNumber()); - - + LottoController lottoController = new LottoController(); + lottoController.lottoStart(); } } \ No newline at end of file diff --git a/src/main/java/lotto/controller/LottoController.java b/src/main/java/lotto/controller/LottoController.java new file mode 100644 index 0000000..7e7e116 --- /dev/null +++ b/src/main/java/lotto/controller/LottoController.java @@ -0,0 +1,25 @@ +package lotto.controller; + +import lotto.domain.CreateRandomLottoNumbers; +import lotto.domain.InputPurchaseAmount; +import lotto.domain.Lotto; +import lotto.domain.InputWinPriceNumber; +import lotto.domain.WinningLotto; + +public class LottoController { + private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; + public void lottoStart(){ + final int purchaseAmount = InputPurchaseAmount.getPurchaseAmount(); + Lotto[] lotto = new Lotto[purchaseAmount]; + + System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE,purchaseAmount); + + for (int i = 0; i < purchaseAmount; i++) { + lotto[i] = new Lotto(CreateRandomLottoNumbers.createRandomLottoNumbers()); + lotto[i].printNumbers(); + } + + WinningLotto winningLotto = new WinningLotto(InputWinPriceNumber.getWinPriceNumber(), InputWinPriceNumber.getLottoBonusNumber()); + + } +} From 438e57e1529bfe45fcbdddcd9bce9db258be4f3a Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:40:01 +0900 Subject: [PATCH 25/29] =?UTF-8?q?=EB=B9=84=EC=A6=88=EB=8B=88=EC=8A=A4=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EB=93=A4=EC=9D=84=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80=EB=A1=9C=20=EC=98=AE?= =?UTF-8?q?=EA=B2=A8=EC=84=9C=20=EB=B6=84=EB=A5=98=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lotto/{ => domain}/CreateRandomLottoNumbers.java | 2 +- .../lotto/{BuyLotto.java => domain/InputPurchaseAmount.java} | 4 ++-- .../lotto/{winningLotto => domain}/InputWinPriceNumber.java | 4 ++-- src/main/java/lotto/{ => domain}/Lotto.java | 2 +- src/main/java/lotto/{ => domain}/SortLottoNumber.java | 2 +- .../java/lotto/{winningLotto => domain}/WinningLotto.java | 2 +- src/main/java/lotto/{winningLotto => domain}/WinningRank.java | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename src/main/java/lotto/{ => domain}/CreateRandomLottoNumbers.java (92%) rename src/main/java/lotto/{BuyLotto.java => domain/InputPurchaseAmount.java} (85%) rename src/main/java/lotto/{winningLotto => domain}/InputWinPriceNumber.java (91%) rename src/main/java/lotto/{ => domain}/Lotto.java (98%) rename src/main/java/lotto/{ => domain}/SortLottoNumber.java (90%) rename src/main/java/lotto/{winningLotto => domain}/WinningLotto.java (99%) rename src/main/java/lotto/{winningLotto => domain}/WinningRank.java (97%) diff --git a/src/main/java/lotto/CreateRandomLottoNumbers.java b/src/main/java/lotto/domain/CreateRandomLottoNumbers.java similarity index 92% rename from src/main/java/lotto/CreateRandomLottoNumbers.java rename to src/main/java/lotto/domain/CreateRandomLottoNumbers.java index 1d5625e..7b5b1b4 100644 --- a/src/main/java/lotto/CreateRandomLottoNumbers.java +++ b/src/main/java/lotto/domain/CreateRandomLottoNumbers.java @@ -1,4 +1,4 @@ -package lotto; +package lotto.domain; import camp.nextstep.edu.missionutils.Randoms; diff --git a/src/main/java/lotto/BuyLotto.java b/src/main/java/lotto/domain/InputPurchaseAmount.java similarity index 85% rename from src/main/java/lotto/BuyLotto.java rename to src/main/java/lotto/domain/InputPurchaseAmount.java index e79917b..7f767bb 100644 --- a/src/main/java/lotto/BuyLotto.java +++ b/src/main/java/lotto/domain/InputPurchaseAmount.java @@ -1,8 +1,8 @@ -package lotto; +package lotto.domain; import camp.nextstep.edu.missionutils.Console; -public class BuyLotto { +public class InputPurchaseAmount { private static final String PURCHASE_AMOUNT_MESSAGE = "구입금액을 입력해 주세요."; public static int getPurchaseAmount() { System.out.println(PURCHASE_AMOUNT_MESSAGE); diff --git a/src/main/java/lotto/winningLotto/InputWinPriceNumber.java b/src/main/java/lotto/domain/InputWinPriceNumber.java similarity index 91% rename from src/main/java/lotto/winningLotto/InputWinPriceNumber.java rename to src/main/java/lotto/domain/InputWinPriceNumber.java index b637027..70d36b5 100644 --- a/src/main/java/lotto/winningLotto/InputWinPriceNumber.java +++ b/src/main/java/lotto/domain/InputWinPriceNumber.java @@ -1,11 +1,11 @@ -package lotto.winningLotto; +package lotto.domain; import java.util.ArrayList; import java.util.List; import static camp.nextstep.edu.missionutils.Console.readLine; -import static lotto.SortLottoNumber.sortNumbers; +import static lotto.domain.SortLottoNumber.sortNumbers; public class InputWinPriceNumber { diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/domain/Lotto.java similarity index 98% rename from src/main/java/lotto/Lotto.java rename to src/main/java/lotto/domain/Lotto.java index 9393d5b..71c8eb5 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/domain/Lotto.java @@ -1,4 +1,4 @@ -package lotto; +package lotto.domain; import java.util.List; diff --git a/src/main/java/lotto/SortLottoNumber.java b/src/main/java/lotto/domain/SortLottoNumber.java similarity index 90% rename from src/main/java/lotto/SortLottoNumber.java rename to src/main/java/lotto/domain/SortLottoNumber.java index 640a47d..f18dedf 100644 --- a/src/main/java/lotto/SortLottoNumber.java +++ b/src/main/java/lotto/domain/SortLottoNumber.java @@ -1,4 +1,4 @@ -package lotto; +package lotto.domain; import java.util.Collections; import java.util.List; diff --git a/src/main/java/lotto/winningLotto/WinningLotto.java b/src/main/java/lotto/domain/WinningLotto.java similarity index 99% rename from src/main/java/lotto/winningLotto/WinningLotto.java rename to src/main/java/lotto/domain/WinningLotto.java index 217cc7b..0374045 100644 --- a/src/main/java/lotto/winningLotto/WinningLotto.java +++ b/src/main/java/lotto/domain/WinningLotto.java @@ -1,4 +1,4 @@ -package lotto.winningLotto; +package lotto.domain; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/lotto/winningLotto/WinningRank.java b/src/main/java/lotto/domain/WinningRank.java similarity index 97% rename from src/main/java/lotto/winningLotto/WinningRank.java rename to src/main/java/lotto/domain/WinningRank.java index 51446ed..bc6b77e 100644 --- a/src/main/java/lotto/winningLotto/WinningRank.java +++ b/src/main/java/lotto/domain/WinningRank.java @@ -1,4 +1,4 @@ -package lotto.winningLotto; +package lotto.domain; import java.util.Arrays; From ad2e9ba43f1086444e9f3a2098174081bc01f133 Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 14:40:19 +0900 Subject: [PATCH 26/29] =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=9E=84=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/lotto/LottoTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 0f3af0f..d2bca39 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -1,5 +1,6 @@ package lotto; +import lotto.domain.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From f97d88e4bcff9d0b1c8dc7794b8871548ff0a7af Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 15:11:12 +0900 Subject: [PATCH 27/29] =?UTF-8?q?Lotto=EC=9D=98=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EB=8B=B4=EC=9D=84=20Lottos=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/domain/Lottos.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/lotto/domain/Lottos.java diff --git a/src/main/java/lotto/domain/Lottos.java b/src/main/java/lotto/domain/Lottos.java new file mode 100644 index 0000000..741d461 --- /dev/null +++ b/src/main/java/lotto/domain/Lottos.java @@ -0,0 +1,21 @@ +package lotto.domain; + +import java.util.List; + +public class Lottos { + + private List lottos; + + public Lottos(List lottos) { + this.lottos = lottos; + } + + public List getLottos() { + return lottos; + } + + public static void printLottos(Lottos lottos) { + lottos.getLottos().stream() + .forEach(lotto -> System.out.println(lotto.getNumbers().toString())); + } +} \ No newline at end of file From 05a54cf87bfac7f0a5478bb5da6f421427d87afb Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 15:33:51 +0900 Subject: [PATCH 28/29] =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC?= =?UTF-8?q?=EC=9D=98=20=EA=B5=AC=EB=A7=A4=EB=9F=89=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=B1=85=EC=9E=84=EC=9D=84=20InputPurchaseAmount=EB=A1=9C=20?= =?UTF-8?q?=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lotto/controller/LottoController.java | 33 +++++++++++++------ .../lotto/domain/InputPurchaseAmount.java | 5 +++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/java/lotto/controller/LottoController.java b/src/main/java/lotto/controller/LottoController.java index 7e7e116..a2b87a1 100644 --- a/src/main/java/lotto/controller/LottoController.java +++ b/src/main/java/lotto/controller/LottoController.java @@ -1,25 +1,38 @@ package lotto.controller; -import lotto.domain.CreateRandomLottoNumbers; -import lotto.domain.InputPurchaseAmount; -import lotto.domain.Lotto; -import lotto.domain.InputWinPriceNumber; -import lotto.domain.WinningLotto; +import lotto.domain.*; +import lotto.view.OutputView; + +import java.util.Arrays; +import java.util.Map; public class LottoController { - private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; + private static final int LOTTO_PRICE = 1000; + public void lottoStart(){ + final int purchaseAmount = InputPurchaseAmount.getPurchaseAmount(); Lotto[] lotto = new Lotto[purchaseAmount]; - - System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE,purchaseAmount); - for (int i = 0; i < purchaseAmount; i++) { lotto[i] = new Lotto(CreateRandomLottoNumbers.createRandomLottoNumbers()); - lotto[i].printNumbers(); } + Lottos lottos = new Lottos(Arrays.stream(lotto).toList()); + printLottoInformation(purchaseAmount,lottos); WinningLotto winningLotto = new WinningLotto(InputWinPriceNumber.getWinPriceNumber(), InputWinPriceNumber.getLottoBonusNumber()); + Map winningDetails = WinningStatistics.getWinningDetails(lottos, winningLotto); + printWinningInformation(winningDetails, purchaseAmount); + } + + private void printLottoInformation(int purchaseAmount, Lottos lottos){ + InputPurchaseAmount.printPurchaseAmount(purchaseAmount); + Lottos.printLottos(lottos); + } + private void printWinningInformation(Map winningDetails, int purchaseAmount) { + OutputView.printWinningStatistics(); + OutputView.printWinningDetails(winningDetails); + long winningAmount = WinningStatistics.getWinningAmount(winningDetails); + OutputView.printLottoYield(WinningStatistics.getLottoYield(winningAmount, purchaseAmount*LOTTO_PRICE)); } } diff --git a/src/main/java/lotto/domain/InputPurchaseAmount.java b/src/main/java/lotto/domain/InputPurchaseAmount.java index 7f767bb..b705ab3 100644 --- a/src/main/java/lotto/domain/InputPurchaseAmount.java +++ b/src/main/java/lotto/domain/InputPurchaseAmount.java @@ -3,10 +3,15 @@ import camp.nextstep.edu.missionutils.Console; public class InputPurchaseAmount { + private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; private static final String PURCHASE_AMOUNT_MESSAGE = "구입금액을 입력해 주세요."; public static int getPurchaseAmount() { System.out.println(PURCHASE_AMOUNT_MESSAGE); String str = Console.readLine(); return Integer.parseInt(str) / 1000; } + + public static void printPurchaseAmount(int purchaseAmount){ + System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE, purchaseAmount); + } } From 0ac64932b1554e47b040e6f2ca321985d58903ad Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 16 Mar 2024 15:34:37 +0900 Subject: [PATCH 29/29] =?UTF-8?q?=EC=98=88=EC=8B=9C=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EC=9D=98=20=EB=A1=9C=EB=98=90=EB=8B=B9=EC=B2=A8=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=99=80=20=EB=8B=B9?= =?UTF-8?q?=EC=B2=A8=ED=86=B5=EA=B3=84=20=EC=B6=9C=EB=A0=A5=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=B3=B5=EB=B6=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lotto/domain/WinningStatistics.java | 58 +++++++++++++++++ src/main/java/lotto/view/OutputView.java | 64 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src/main/java/lotto/domain/WinningStatistics.java create mode 100644 src/main/java/lotto/view/OutputView.java diff --git a/src/main/java/lotto/domain/WinningStatistics.java b/src/main/java/lotto/domain/WinningStatistics.java new file mode 100644 index 0000000..b6c0285 --- /dev/null +++ b/src/main/java/lotto/domain/WinningStatistics.java @@ -0,0 +1,58 @@ +package lotto.domain; + +import java.util.Arrays; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; + +public class WinningStatistics { + + private static final int AT_LEAST_THIRD_PLACE = 5; + private static final int PERCENTAGE = 100; + private static final int INITIAL_VALUE = 0; + + public static Map getWinningDetails(Lottos lottos, WinningLotto winningLotto) { + Map winningDetails = generateWinningDetails(); + for (Lotto lotto : lottos.getLottos()) { + int matchingCount = compareNumbersWithWinningNumbers(lotto, winningLotto); + boolean containsBonusNumber = compareNumbersWithBonusNumber(lotto, winningLotto, matchingCount); + WinningRank winningRank = WinningRank.findWinningRank(matchingCount, containsBonusNumber); + winningDetails.replace(winningRank, winningDetails.get(winningRank) + 1); + } + return winningDetails; + } + + public static Map generateWinningDetails() { + Map winningDetails = new EnumMap<>(WinningRank.class); + Arrays.stream(WinningRank.values()).forEach(winningRank -> winningDetails.put(winningRank, INITIAL_VALUE)); + return winningDetails; + } + + private static int compareNumbersWithWinningNumbers(Lotto lotto, WinningLotto winningLotto) { + List numbers = lotto.getNumbers(); + List winningNumbers = winningLotto.getWinningNumbers(); + return (int) numbers.stream() + .filter(winningNumbers::contains) + .count(); + } + + private static boolean compareNumbersWithBonusNumber(Lotto lotto, WinningLotto winningLotto, int matchingCount) { + if (matchingCount != AT_LEAST_THIRD_PLACE) { + return false; + } + List numbers = lotto.getNumbers(); + int bonusNumber = winningLotto.getBonusNumber(); + return numbers.contains(bonusNumber); + } + + public static long getWinningAmount(Map winningDetails) { + return winningDetails.entrySet().stream() + .mapToLong(entry -> (long) entry.getKey().getWinningPrice() * entry.getValue()) + .sum(); + } + + public static double getLottoYield(long winningAmount, int money) { + double lottoYield = PERCENTAGE + (double) (winningAmount - money) / money * PERCENTAGE; + return Math.round(lottoYield * 10) / 10.0; + } +} \ No newline at end of file diff --git a/src/main/java/lotto/view/OutputView.java b/src/main/java/lotto/view/OutputView.java new file mode 100644 index 0000000..697e2dc --- /dev/null +++ b/src/main/java/lotto/view/OutputView.java @@ -0,0 +1,64 @@ +package lotto.view; + +import java.text.DecimalFormat; +import java.util.Map; +import lotto.domain.Lottos; +import lotto.domain.WinningRank; + +public class OutputView { + + private static final String HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE = "%d개를 구매했습니다.\n"; + private static final String WINNING_STATISTICS_MESSAGE = "당첨 통계\n---"; + private static final String WINNING_DETAILS_MESSAGE = "%d개 일치 (%s원) - %d개\n"; + private static final String WINNING_DETAILS_WITH_BONUS_MESSAGE = "%d개 일치, 보너스 볼 일치 (%s원) - %d개\n"; + private static final String LOTTO_YIELD_MESSAGE = "총 수익률은 %.1f%%입니다.\n"; + private static final String SEPARATOR_PATTERN = "###,###"; + + public static void printHowManyLottoUserPurchased(int lottoQuantity) { + System.out.printf(HOW_MANY_LOTTO_USER_PURCHASED_MESSAGE, lottoQuantity); + } + + public static void printLottos(Lottos lottos) { + lottos.getLottos().stream() + .forEach(lotto -> System.out.println(lotto.getNumbers().toString())); + } + + public static void printWinningStatistics() { + System.out.println(WINNING_STATISTICS_MESSAGE); + } + + public static void printWinningDetails(Map winningDetails) { + winningDetails.entrySet().stream() + .filter(entry -> entry.getKey() != WinningRank.LAST_PLACE) + .forEach(entry -> { + if (entry.getKey() == WinningRank.SECOND_PLACE) { + printWinningDetailsWithBonus(entry); + return; + } + printWinningDetailsWithoutBonus(entry); + }); + } + + private static void printWinningDetailsWithBonus(Map.Entry entry) { + System.out.printf(WINNING_DETAILS_WITH_BONUS_MESSAGE, + entry.getKey().getMatchingCount(), + getFormattingPrice(entry.getKey().getWinningPrice()), + entry.getValue()); + } + + private static void printWinningDetailsWithoutBonus(Map.Entry entry) { + System.out.printf(WINNING_DETAILS_MESSAGE, + entry.getKey().getMatchingCount(), + getFormattingPrice(entry.getKey().getWinningPrice()), + entry.getValue()); + } + + private static String getFormattingPrice(int winningPrice) { + DecimalFormat df = new DecimalFormat(SEPARATOR_PATTERN); + return df.format(winningPrice); + } + + public static void printLottoYield(double lottoYield) { + System.out.printf(LOTTO_YIELD_MESSAGE, lottoYield); + } +} \ No newline at end of file