Skip to content

Commit 5e29f83

Browse files
고생하셨습니다.
🎉 PR 머지 완료! 🎉
1 parent b3ba83a commit 5e29f83

File tree

7 files changed

+170
-0
lines changed

7 files changed

+170
-0
lines changed

src/main/java/Application.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import controller.LottoController;
2+
3+
public class Application {
4+
5+
public static void main(String[] args) {
6+
LottoController lottoController = new LottoController();
7+
lottoController.run();
8+
}
9+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package controller;
2+
3+
import model.Lotto;
4+
import model.LottoTickets;
5+
import view.ErrorView;
6+
import view.InputView;
7+
import view.ResultView;
8+
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
12+
public class LottoController {
13+
14+
public void run() {
15+
try {
16+
int purchaseAmount = InputView.getPurchaseAmount();
17+
18+
validatePurchaseAmount(purchaseAmount);
19+
20+
int ticketCount = LottoTickets.getTicketCount(purchaseAmount);
21+
22+
LottoTickets lottoTickets = new LottoTickets(ticketCount);
23+
24+
ResultView.printOrderTickets(ticketCount);
25+
26+
ResultView.printPurchasedLottoTickets(formatTickets(lottoTickets.getTickets()));
27+
28+
} catch (IllegalArgumentException e) {
29+
ErrorView.printErrorMessage(e.getMessage());
30+
}
31+
}
32+
33+
private List<String> formatTickets(List<Lotto> tickets) {
34+
return tickets.stream()
35+
.map(this::convertLottoToString)
36+
.toList();
37+
}
38+
39+
private String convertLottoToString(Lotto lotto) {
40+
return lotto.getSortedNumbers().stream()
41+
.map(String::valueOf)
42+
.collect(Collectors.joining(",", "[", "]"));
43+
}
44+
45+
private void validatePurchaseAmount(int purchaseAmount) {
46+
if (purchaseAmount < LottoTickets.LOTTO_PRICE) {
47+
throw new IllegalArgumentException("구매 금액은 1000원 이상이어야 합니다.");
48+
}
49+
50+
if (purchaseAmount % LottoTickets.LOTTO_PRICE != 0) {
51+
throw new IllegalArgumentException("구매 금액은 1000원 단위여야 합니다.");
52+
}
53+
}
54+
}

src/main/java/model/Lotto.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package model;
2+
3+
import java.util.*;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.IntStream;
6+
7+
public class Lotto {
8+
9+
// 로또 번호 관련 상수 선언
10+
public static final int LOTTO_MIN_NUMBER = 1;
11+
public static final int LOTTO_MAX_NUMBER = 45;
12+
public static final int LOTTO_CREATE_SIZE = 6;
13+
public static final List<Integer> LOTTO_NUMBER_POOL =
14+
IntStream.rangeClosed(LOTTO_MIN_NUMBER,LOTTO_MAX_NUMBER)
15+
.boxed()
16+
.collect(Collectors.toList());
17+
18+
private List<Integer> numbers;
19+
20+
public Lotto(){
21+
this.numbers = createLottoNumbers();
22+
}
23+
24+
private List<Integer> createLottoNumbers(){
25+
List<Integer> shuffledNumbers = new ArrayList<>(LOTTO_NUMBER_POOL);
26+
Collections.shuffle(shuffledNumbers);
27+
numbers = shuffledNumbers.subList(0, LOTTO_CREATE_SIZE);
28+
29+
return numbers;
30+
}
31+
32+
public List<Integer> getSortedNumbers() {
33+
List<Integer> sortedNumbers = new ArrayList<>(numbers);
34+
Collections.sort(sortedNumbers);
35+
36+
return sortedNumbers;
37+
}
38+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package model;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class LottoTickets {
7+
8+
private final List<Lotto> tickets;
9+
public static final int LOTTO_PRICE = 1000;
10+
11+
public LottoTickets(int ticketCount) {
12+
this.tickets = generateLottoTickets(ticketCount);
13+
}
14+
15+
private List<Lotto> generateLottoTickets(int ticketCount) {
16+
List<Lotto> tickets = new ArrayList<>();
17+
for (int i = 0; i < ticketCount; i++) {
18+
tickets.add(new Lotto());
19+
}
20+
return tickets;
21+
}
22+
23+
public List<Lotto> getTickets() {
24+
return new ArrayList<>(tickets);
25+
}
26+
27+
public static int getTicketCount(int purchaseAmount){
28+
return purchaseAmount / LOTTO_PRICE;
29+
}
30+
}

src/main/java/view/ErrorView.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package view;
2+
3+
public class ErrorView {
4+
public static void printErrorMessage(String message) {
5+
System.out.println(message);
6+
}
7+
}

src/main/java/view/InputView.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package view;
2+
3+
import java.util.Scanner;
4+
5+
public class InputView {
6+
7+
private static final Scanner scanner = new Scanner(System.in);
8+
9+
public static int getPurchaseAmount(){
10+
System.out.println("구입금액을 입력해 주세요.");
11+
int purchaseAmount = scanner.nextInt();
12+
scanner.close();
13+
14+
return purchaseAmount;
15+
}
16+
}

src/main/java/view/ResultView.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package view;
2+
import java.util.List;
3+
4+
public class ResultView {
5+
6+
public static void printOrderTickets(int ticketCount){
7+
System.out.println();
8+
System.out.println(ticketCount + "개를 구매했습니다.");
9+
}
10+
11+
public static void printPurchasedLottoTickets(List<String> formattedTickets){
12+
for (String ticket : formattedTickets) {
13+
System.out.println(ticket);
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)