From d117f9f5d43acf4f70f92525dffae522936085b2 Mon Sep 17 00:00:00 2001 From: Habin Kim Date: Fri, 21 Feb 2025 20:47:10 +0900 Subject: [PATCH 1/5] docs: update readme file --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 5fa2560..c86b1a1 100644 --- a/README.md +++ b/README.md @@ -1 +1,42 @@ # java-lotto-precourse + +## 기능의 분리 + +### 1. 입력부 + +- 로또 구입 금액 입력 +- 당첨 번호 입력 +- 보너스 번호 입력 + +### 2. 연산부 + +- 로또 구입 개수 연산 +- 랜덤한 로또 발행 연산 +- 발행 로또의 당첨 내역 연산 +- 수익률 연산 + +### 3. 출력부 + +- 로또 구입 개수 출력 +- 발행 로또 출력 +- 당첨 내역 출력 +- 수익률 출력 + +### 4. 예외부 + +- 로또 구입 금액의 오류 + + - 숫자 이외의 입력 + - 1000원으로 나누어 떨어지지 않는 입력 + +- 당첨 번호의 오류 + + - 숫자 이외의 입력 + - 잘못된 구분기호의 입력 + - 6개의 숫자가 아닌 입력 + - 가능 숫자 범위를 벗어난 입력 + +- 보너스 번호의 오류 + + - 숫자 이외의 입력 + - 가능 숫자 범위를 벗어난 입력 \ No newline at end of file From 11681d7e38ffe19f6465dcbddc593642e89c708f Mon Sep 17 00:00:00 2001 From: Habin Kim Date: Fri, 21 Feb 2025 22:34:48 +0900 Subject: [PATCH 2/5] feat: implement inputview --- README.md | 22 ++++---- src/main/java/lotto/{ => model}/Lotto.java | 2 +- src/main/java/lotto/view/InputBonus.java | 41 +++++++++++++++ src/main/java/lotto/view/InputLotto.java | 58 ++++++++++++++++++++++ src/main/java/lotto/view/InputMoney.java | 37 ++++++++++++++ src/test/java/lotto/LottoTest.java | 1 + 6 files changed, 149 insertions(+), 12 deletions(-) rename src/main/java/lotto/{ => model}/Lotto.java (95%) create mode 100644 src/main/java/lotto/view/InputBonus.java create mode 100644 src/main/java/lotto/view/InputLotto.java create mode 100644 src/main/java/lotto/view/InputMoney.java diff --git a/README.md b/README.md index c86b1a1..8b57c1a 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ ### 1. 입력부 -- 로또 구입 금액 입력 -- 당첨 번호 입력 -- 보너스 번호 입력 +- 로또 구입 금액 입력 → 구현 +- 당첨 번호 입력 → 구현 +- 보너스 번호 입력 → 구현 ### 2. 연산부 @@ -26,17 +26,17 @@ - 로또 구입 금액의 오류 - - 숫자 이외의 입력 - - 1000원으로 나누어 떨어지지 않는 입력 + - 숫자 이외의 입력 → 구현 + - 1000원으로 나누어 떨어지지 않는 입력 → 구현 - 당첨 번호의 오류 - - 숫자 이외의 입력 - - 잘못된 구분기호의 입력 - - 6개의 숫자가 아닌 입력 - - 가능 숫자 범위를 벗어난 입력 + - 숫자 이외의 입력 → 구현 + - 잘못된 구분기호의 입력 → 구현 + - 6개의 숫자가 아닌 입력 → 구현 + - 가능 숫자 범위를 벗어난 입력 → 구현 - 보너스 번호의 오류 - - 숫자 이외의 입력 - - 가능 숫자 범위를 벗어난 입력 \ No newline at end of file + - 숫자 이외의 입력 → 구현 + - 가능 숫자 범위를 벗어난 입력 → 구현 \ No newline at end of file diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/model/Lotto.java similarity index 95% rename from src/main/java/lotto/Lotto.java rename to src/main/java/lotto/model/Lotto.java index 88fc5cf..da4f30b 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/model/Lotto.java @@ -1,4 +1,4 @@ -package lotto; +package lotto.model; import java.util.List; diff --git a/src/main/java/lotto/view/InputBonus.java b/src/main/java/lotto/view/InputBonus.java new file mode 100644 index 0000000..7c971b0 --- /dev/null +++ b/src/main/java/lotto/view/InputBonus.java @@ -0,0 +1,41 @@ +package lotto.view; + +import camp.nextstep.edu.missionutils.Console; + +public class InputBonus { + + // 보너스 번호 입력 + public int getBonus() { + while(true) { + try { + System.out.println("Please enter a bonus numbers."); + String strBonus = Console.readLine(); + int bonus = checkBonus(strBonus); + return bonus; + } + + catch (NumberFormatException e) { + System.out.println("[ERROR] It is not a number."); + } + + // 숫자 범위를 벗어나는 입력 + catch (IllegalArgumentException e) { + System.out.println("[ERROR] It is out of range."); + } + } + } + + // 올바른 입력 체크 합수 + public int checkBonus(String strBonus) { + + // 숫자인지 체크 + int bonus = Integer.parseInt(strBonus); + + // 숫자 범위 확인 + if(bonus < 1 || bonus > 45) { + throw new IllegalArgumentException(); + } + + return bonus; + } +} diff --git a/src/main/java/lotto/view/InputLotto.java b/src/main/java/lotto/view/InputLotto.java new file mode 100644 index 0000000..7f87bd9 --- /dev/null +++ b/src/main/java/lotto/view/InputLotto.java @@ -0,0 +1,58 @@ +package lotto.view; + +import camp.nextstep.edu.missionutils.Console; +import java.lang.String; +import java.util.ArrayList; +import java.util.Arrays; + +public class InputLotto { + + // 당첨 번호 입력 + public ArrayList getLotto() { + while(true) { // 예외 발생 시 반복적인 입력을 받기 위한 반복문 + try { + System.out.println("Please enter a lotto numbers."); + String strlotto = Console.readLine(); + ArrayList lotto = checkLotto(strlotto); + return lotto; + } + + // 숫자가 아니거나 구분자가 이상한 입력 + catch (NumberFormatException e) { + System.out.println("[ERROR] It is not a valid lotto."); + } + + // 숫자 범위를 벗어나는 입력 + catch (IllegalArgumentException e) { + System.out.println("[ERROR] It is out of range."); + } + } + } + + // 올바른 입력 체크 함수 + public ArrayList checkLotto(String lotto) { + ArrayList arrLotto = new ArrayList(); + + // 구분자(,)를 기준으로 문자열 자르기 + String[] strLotto = lotto.split(","); + + // 문자를 숫자로 변환 + for (int i = 0; i < strLotto.length; i++) { + arrLotto.add(Integer.parseInt(strLotto[i])); + } + + // 숫자 개수 확인 + if (arrLotto.size() != 6) { + throw new IllegalArgumentException(); + } + + // 숫자 범위 확인 + for (int i = 0; i < arrLotto.size(); i++) { + if(arrLotto.get(i) < 1 || arrLotto.get(i) > 45) { + throw new IllegalArgumentException(); + } + } + + return arrLotto; + } +} diff --git a/src/main/java/lotto/view/InputMoney.java b/src/main/java/lotto/view/InputMoney.java new file mode 100644 index 0000000..a8e819c --- /dev/null +++ b/src/main/java/lotto/view/InputMoney.java @@ -0,0 +1,37 @@ +package lotto.view; + +import camp.nextstep.edu.missionutils.Console; + +public class InputMoney { + + // 로또 구입 금액 입력 + public int getMoney() { + while(true) { // 예외 발생 시 반복적인 입력을 받기 위한 반복문 + try { + System.out.println("Please enter a money."); + int money = Integer.parseInt(Console.readLine()); + checkMoney(money); + return money; + } + + // 숫자 이외의 입력 + catch (NumberFormatException e) { + System.out.println("[ERROR] It is not a number."); + } + + // 1000원으로 나누어 떨어지지 않는 입력 + catch (IllegalArgumentException e) { + System.out.println("[ERROR] It is not a valid money."); + } + } + } + + // 1000원으로 나누어 떨어지지 않는 입력 체크 함수 + public int checkMoney(int money) { + int value = money % 1000; + if(value != 0) { + throw new IllegalArgumentException(); + } + return value; + } +} diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 309f4e5..c8ca9d6 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -1,5 +1,6 @@ package lotto; +import lotto.model.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From 012a2a913c9c33fe112d59ccd9f253b68f2bab2b Mon Sep 17 00:00:00 2001 From: Habin Kim Date: Fri, 21 Feb 2025 23:00:38 +0900 Subject: [PATCH 3/5] feat: implement lotto purchase function --- README.md | 2 +- src/main/java/lotto/model/Lotto.java | 15 ++++++++++++++- src/main/java/lotto/view/InputLotto.java | 12 ++++++------ src/main/java/lotto/view/InputMoney.java | 3 +-- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8b57c1a..8ee6695 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ### 2. 연산부 -- 로또 구입 개수 연산 +- 로또 구입 개수 연산 → 구현 - 랜덤한 로또 발행 연산 - 발행 로또의 당첨 내역 연산 - 수익률 연산 diff --git a/src/main/java/lotto/model/Lotto.java b/src/main/java/lotto/model/Lotto.java index da4f30b..33d31af 100644 --- a/src/main/java/lotto/model/Lotto.java +++ b/src/main/java/lotto/model/Lotto.java @@ -1,5 +1,10 @@ package lotto.model; +import lotto.view.InputMoney; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; import java.util.List; public class Lotto { @@ -16,5 +21,13 @@ private void validate(List numbers) { } } - // TODO: 추가 기능 구현 + // 로또 구입 개수 연산 + public int setPurchaseLotto() { + InputMoney tmpMoney = new InputMoney(); + + int money = tmpMoney.getMoney(); + int lotto = money % 1000; + + return lotto; + } } diff --git a/src/main/java/lotto/view/InputLotto.java b/src/main/java/lotto/view/InputLotto.java index 7f87bd9..55860ed 100644 --- a/src/main/java/lotto/view/InputLotto.java +++ b/src/main/java/lotto/view/InputLotto.java @@ -3,17 +3,17 @@ import camp.nextstep.edu.missionutils.Console; import java.lang.String; import java.util.ArrayList; -import java.util.Arrays; +import java.util.List; public class InputLotto { // 당첨 번호 입력 - public ArrayList getLotto() { + public List getLotto() { while(true) { // 예외 발생 시 반복적인 입력을 받기 위한 반복문 try { System.out.println("Please enter a lotto numbers."); - String strlotto = Console.readLine(); - ArrayList lotto = checkLotto(strlotto); + String strLotto = Console.readLine(); + List lotto = checkLotto(strLotto); return lotto; } @@ -30,8 +30,8 @@ public ArrayList getLotto() { } // 올바른 입력 체크 함수 - public ArrayList checkLotto(String lotto) { - ArrayList arrLotto = new ArrayList(); + public List checkLotto(String lotto) { + List arrLotto = new ArrayList(); // 구분자(,)를 기준으로 문자열 자르기 String[] strLotto = lotto.split(","); diff --git a/src/main/java/lotto/view/InputMoney.java b/src/main/java/lotto/view/InputMoney.java index a8e819c..32377ea 100644 --- a/src/main/java/lotto/view/InputMoney.java +++ b/src/main/java/lotto/view/InputMoney.java @@ -27,11 +27,10 @@ public int getMoney() { } // 1000원으로 나누어 떨어지지 않는 입력 체크 함수 - public int checkMoney(int money) { + public void checkMoney(int money) { int value = money % 1000; if(value != 0) { throw new IllegalArgumentException(); } - return value; } } From 057c86331628c523ce048e7333e0d25af59886fd Mon Sep 17 00:00:00 2001 From: Habin Kim Date: Fri, 21 Feb 2025 23:01:15 +0900 Subject: [PATCH 4/5] feat: implement random lotto function --- README.md | 2 +- src/main/java/lotto/model/Lotto.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ee6695..6a0bfd0 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ### 2. 연산부 - 로또 구입 개수 연산 → 구현 -- 랜덤한 로또 발행 연산 +- 랜덤한 로또 발행 연산 → 구현 - 발행 로또의 당첨 내역 연산 - 수익률 연산 diff --git a/src/main/java/lotto/model/Lotto.java b/src/main/java/lotto/model/Lotto.java index 33d31af..6c077e0 100644 --- a/src/main/java/lotto/model/Lotto.java +++ b/src/main/java/lotto/model/Lotto.java @@ -30,4 +30,10 @@ public int setPurchaseLotto() { return lotto; } + + // 랜덤한 로또 발행 연산 + public List setLotto() { + List lottoNums = Randoms.pickUniqueNumbersInRange(1,45,6); + return lottoNums; + } } From 377ba15017d7abc409bda9057ea118d04859807f Mon Sep 17 00:00:00 2001 From: Habin Kim Date: Fri, 21 Feb 2025 23:51:11 +0900 Subject: [PATCH 5/5] =?UTF-8?q?error:=20=EC=B6=9C=EB=A0=A5=20=EC=A4=91=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/lotto/Application.java | 9 ++++++++- src/main/java/lotto/model/Lotto.java | 12 ------------ src/main/java/lotto/model/LottoCount.java | 16 ++++++++++++++++ src/main/java/lotto/view/OutputView.java | 10 ++++++++++ 5 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 src/main/java/lotto/model/LottoCount.java create mode 100644 src/main/java/lotto/view/OutputView.java diff --git a/README.md b/README.md index 6a0bfd0..04ccb5f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ### 3. 출력부 -- 로또 구입 개수 출력 +- 로또 구입 개수 출력 **→ 문제 발생** - 발행 로또 출력 - 당첨 내역 출력 - 수익률 출력 diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922..62cb1a9 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,14 @@ package lotto; +import lotto.view.InputMoney; +import lotto.view.OutputView; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + InputMoney money = new InputMoney(); + OutputView output = new OutputView(); + + money.getMoney(); + output.showLottoCount(); } } diff --git a/src/main/java/lotto/model/Lotto.java b/src/main/java/lotto/model/Lotto.java index 6c077e0..8e9daf2 100644 --- a/src/main/java/lotto/model/Lotto.java +++ b/src/main/java/lotto/model/Lotto.java @@ -1,7 +1,5 @@ package lotto.model; -import lotto.view.InputMoney; - import camp.nextstep.edu.missionutils.Randoms; import java.util.ArrayList; @@ -21,16 +19,6 @@ private void validate(List numbers) { } } - // 로또 구입 개수 연산 - public int setPurchaseLotto() { - InputMoney tmpMoney = new InputMoney(); - - int money = tmpMoney.getMoney(); - int lotto = money % 1000; - - return lotto; - } - // 랜덤한 로또 발행 연산 public List setLotto() { List lottoNums = Randoms.pickUniqueNumbersInRange(1,45,6); diff --git a/src/main/java/lotto/model/LottoCount.java b/src/main/java/lotto/model/LottoCount.java new file mode 100644 index 0000000..20ff256 --- /dev/null +++ b/src/main/java/lotto/model/LottoCount.java @@ -0,0 +1,16 @@ +package lotto.model; + +import lotto.view.InputMoney; + +public class LottoCount { + + // 로또 구입 개수 연산 + public int setPurchaseLotto() { + InputMoney tmpMoney = new InputMoney(); + + int money = tmpMoney.getMoney(); + int lotto = money % 1000; + + return lotto; + } +} diff --git a/src/main/java/lotto/view/OutputView.java b/src/main/java/lotto/view/OutputView.java new file mode 100644 index 0000000..42e8c17 --- /dev/null +++ b/src/main/java/lotto/view/OutputView.java @@ -0,0 +1,10 @@ +package lotto.view; + +import lotto.model.LottoCount; + +public class OutputView { + public void showLottoCount() { + LottoCount lottoCount = new LottoCount(); + System.out.println(lottoCount.setPurchaseLotto() + " purchase lotto."); + } +}