From 36ecf4cc60a26ead8cc99bd1501a90f34ec48212 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Wed, 2 Sep 2020 16:16:07 +0900 Subject: [PATCH 1/9] =?UTF-8?q?Rank=20=ED=94=84=EB=A1=9C=EB=8D=95=EC=85=98?= =?UTF-8?q?,=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Rank.java | 44 +++++++++++++++++++++++++++++++++++++ src/test/java/RankTest.java | 17 ++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/Rank.java create mode 100644 src/test/java/RankTest.java diff --git a/src/main/java/Rank.java b/src/main/java/Rank.java new file mode 100644 index 0000000..c161203 --- /dev/null +++ b/src/main/java/Rank.java @@ -0,0 +1,44 @@ +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum Rank { + FIRST(6, 2000000000), + SECOND(5, 30000000), + THIRD(5, 1500000), + FOURTH(4, 50000), + FIFTH(3, 5000), + MISS(0, 0); + + private int countOfMatch; + private int winningMoney; + + private Rank(int countOfMatch, int winningMoney) { + this.countOfMatch = countOfMatch; + this.winningMoney = winningMoney; + } + + public int getCountOfMatch() { + return countOfMatch; + } + + public int getWinningMoney() { + return winningMoney; + } + + public static Rank valueOf(int countOfMatch, boolean matchBonus) { + if (countOfMatch == 5 && matchBonus) { + return SECOND; + } + + Map countOfMatchRankMapWithoutSecond = Stream.of(values()).filter(rank -> rank != SECOND) + .collect(Collectors.toMap(Rank::getCountOfMatch, Function.identity())); + Rank result = countOfMatchRankMapWithoutSecond.get(countOfMatch); + + if (result == null) { + result = MISS; + } + return result; + } +} diff --git a/src/test/java/RankTest.java b/src/test/java/RankTest.java new file mode 100644 index 0000000..f2f2017 --- /dev/null +++ b/src/test/java/RankTest.java @@ -0,0 +1,17 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class RankTest { + @Test + public void valueOf() { + assertEquals(Rank.FIRST, Rank.valueOf(6, false)); + assertEquals(Rank.SECOND, Rank.valueOf(5, true)); + assertEquals(Rank.THIRD, Rank.valueOf(5, false)); + assertEquals(Rank.FOURTH, Rank.valueOf(4, false)); + assertEquals(Rank.FIFTH, Rank.valueOf(3, false)); + assertEquals(Rank.MISS, Rank.valueOf(1, false)); + } +} \ No newline at end of file From ec882359dd2a23d2a41a6146fc8141e0859428bb Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Wed, 2 Sep 2020 16:16:54 +0900 Subject: [PATCH 2/9] =?UTF-8?q?LottoNo,=20Lotto,=20LottoGame,=20LottoGener?= =?UTF-8?q?ator=20=EA=B8=B0=EB=B3=B8=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/InputView.java | 2 ++ src/main/java/Lotto.java | 13 +++++++ src/main/java/LottoGame.java | 39 +++++++++++++++++++++ src/main/java/LottoGenerator.java | 25 ++++++++++++++ src/main/java/LottoNo.java | 10 ++++++ src/main/java/Main.java | 14 ++++++-- src/main/java/WinningLotto.java | 2 ++ src/test/java/LottoGameTest.java | 50 +++++++++++++++++++++++++++ src/test/java/LottoGeneratorTest.java | 30 ++++++++++++++++ 9 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 src/main/java/InputView.java create mode 100644 src/main/java/Lotto.java create mode 100644 src/main/java/LottoGame.java create mode 100644 src/main/java/LottoGenerator.java create mode 100644 src/main/java/LottoNo.java create mode 100644 src/main/java/WinningLotto.java create mode 100644 src/test/java/LottoGameTest.java create mode 100644 src/test/java/LottoGeneratorTest.java diff --git a/src/main/java/InputView.java b/src/main/java/InputView.java new file mode 100644 index 0000000..e66dc5a --- /dev/null +++ b/src/main/java/InputView.java @@ -0,0 +1,2 @@ +public class InputView { +} diff --git a/src/main/java/Lotto.java b/src/main/java/Lotto.java new file mode 100644 index 0000000..282f131 --- /dev/null +++ b/src/main/java/Lotto.java @@ -0,0 +1,13 @@ +import java.util.List; +import java.util.stream.Collectors; + +public class Lotto { + private List lottoNos; + public Lotto(List lottoNos) { + this.lottoNos = lottoNos.stream().map(number -> {return new LottoNo(number);}).collect(Collectors.toList()); + } + + public List getLottoNos() { + return lottoNos; + } +} diff --git a/src/main/java/LottoGame.java b/src/main/java/LottoGame.java new file mode 100644 index 0000000..cf43650 --- /dev/null +++ b/src/main/java/LottoGame.java @@ -0,0 +1,39 @@ +import java.util.ArrayList; +import java.util.List; + +public class LottoGame { + static final int PRICE_PER_LOTTO = 1000; + + private List allLottos; + private int numberOfManualLotto; + private int inputMoney; + + public LottoGame(int inputMoney) { + allLottos = new ArrayList<>(); + this.inputMoney = inputMoney; + numberOfManualLotto = 0; + } + + public void setManualLottos(int numberOfManualLotto, List> manualLottoNumbers) { + this.numberOfManualLotto = numberOfManualLotto; + // TODO numberOfManualLotto와 manualLottoNumbers의 길이가 일치하지 않는 상황에 대한 예외처리 + for (int i = 0; i < numberOfManualLotto ; i++) { + allLottos.add(LottoGenerator.generateLottoWithNos(manualLottoNumbers.get(i))); + } + } + + public List issueAutoLottos() { + int numberOfAutoLottos = inputMoney / PRICE_PER_LOTTO - numberOfManualLotto; + List autoLottos = new ArrayList<>(); + for (int i = 0; i < numberOfAutoLottos ; i++) { + autoLottos.add(LottoGenerator.generateAutoLotto()); + } + allLottos.addAll(autoLottos); + return autoLottos; + } + + public List getAllLottos() { + return allLottos; + } + +} diff --git a/src/main/java/LottoGenerator.java b/src/main/java/LottoGenerator.java new file mode 100644 index 0000000..afc60bb --- /dev/null +++ b/src/main/java/LottoGenerator.java @@ -0,0 +1,25 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +public class LottoGenerator { + private static List lottoNoPool; + + public static Lotto generateLottoWithNos(List lottoNos) { + return new Lotto(lottoNos); + } + + public static Lotto generateAutoLotto() { + return generateLottoWithNos(getRandomLottoNos()); + } + + private static List getRandomLottoNos() { + lottoNoPool = IntStream.rangeClosed(1, 45).boxed().collect(Collectors.toList()); + Collections.shuffle(lottoNoPool); + return lottoNoPool.subList(0, 6); + } +} diff --git a/src/main/java/LottoNo.java b/src/main/java/LottoNo.java new file mode 100644 index 0000000..9a574f2 --- /dev/null +++ b/src/main/java/LottoNo.java @@ -0,0 +1,10 @@ +public class LottoNo { + private int value; + public LottoNo(int number) { + value = number; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 6408411..b0eddc3 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,7 +1,17 @@ public class Main { public static void main(String[] args) { - System.out.println("hello, world"); +// Rank[] ranks = Rank.values(); +// for (Rank rank: ranks) { +// System.out.println(rank); +// System.out.println(rank.getCountOfMatch()); +// System.out.println(rank.getWinningMoney()); +// } +// Rank rank = Rank.valueOf("SECOND"); +// System.out.println(rank); +// System.out.println(rank.getCountOfMatch()); +// System.out.println(rank.getWinningMoney()); + Rank temp = Rank.valueOf(3, false); + System.out.println(temp); } - } diff --git a/src/main/java/WinningLotto.java b/src/main/java/WinningLotto.java new file mode 100644 index 0000000..6eff079 --- /dev/null +++ b/src/main/java/WinningLotto.java @@ -0,0 +1,2 @@ +public class WinningLotto { +} diff --git a/src/test/java/LottoGameTest.java b/src/test/java/LottoGameTest.java new file mode 100644 index 0000000..52469c0 --- /dev/null +++ b/src/test/java/LottoGameTest.java @@ -0,0 +1,50 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.*; + +public class LottoGameTest { + private LottoGame lottoGame; + List> manualLottoNumbers; + + @Before + public void setUp() throws Exception { + manualLottoNumbers = new ArrayList<>(); + manualLottoNumbers.add(Arrays.asList(1, 2, 3, 4, 5, 6)); + manualLottoNumbers.add(Arrays.asList(1, 4, 11, 15, 19, 23)); + manualLottoNumbers.add(Arrays.asList(4, 10, 17, 25, 34, 42)); + } + + @Test + public void setManualLottos() { + lottoGame = new LottoGame(10000); + lottoGame.setManualLottos(3, manualLottoNumbers); + assertEquals(3, lottoGame.getAllLottos().size()); + } + + @Test + public void issueAllAutoLottos() { + lottoGame = new LottoGame(10000); + assertEquals(10, lottoGame.issueAutoLottos().size()); + assertEquals(10, lottoGame.getAllLottos().size()); + } + + @Test + public void issueAutoLottos() { + lottoGame = new LottoGame(10000); + lottoGame.setManualLottos(3, manualLottoNumbers); + assertEquals(7, lottoGame.issueAutoLottos().size()); + assertEquals(10, lottoGame.getAllLottos().size()); + } + + @After + public void tearDown() throws Exception { + lottoGame = null; + manualLottoNumbers = null; + } +} \ No newline at end of file diff --git a/src/test/java/LottoGeneratorTest.java b/src/test/java/LottoGeneratorTest.java new file mode 100644 index 0000000..94c8fc1 --- /dev/null +++ b/src/test/java/LottoGeneratorTest.java @@ -0,0 +1,30 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.*; +import static org.hamcrest.CoreMatchers.instanceOf; + +public class LottoGeneratorTest { + private List numbers; + + @Before + public void setUp() throws Exception { + numbers = Arrays.asList(1,2,3,4,5,6); + } + + @Test + public void generateLottoWithNos() { + assertThat(LottoGenerator.generateLottoWithNos(numbers), instanceOf(Lotto.class)); + Lotto lotto = LottoGenerator.generateLottoWithNos(numbers); + assertEquals(6, lotto.getLottoNos().size()); + } + + @After + public void tearDown() throws Exception { + numbers = null; + } +} \ No newline at end of file From 1b2f32b4587ccbacb9d076ea7e5e0732e5c4abec Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Thu, 3 Sep 2020 03:17:54 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/InputView.java | 54 ++++++++++++++++++++++++ src/main/java/Lotto.java | 9 +++- src/main/java/LottoAnalyzer.java | 47 +++++++++++++++++++++ src/main/java/LottoGame.java | 24 ++++++----- src/main/java/LottoGenerator.java | 3 -- src/main/java/LottoNo.java | 13 +++++- src/main/java/Main.java | 31 ++++++++------ src/main/java/OutputView.java | 42 +++++++++++++++++++ src/main/java/Rank.java | 2 - src/main/java/WinningLotto.java | 17 ++++++++ src/main/java/WinningNumbers.java | 20 +++++++++ src/test/java/LottoAnalyzerTest.java | 61 ++++++++++++++++++++++++++++ src/test/java/LottoGameTest.java | 6 +-- 13 files changed, 296 insertions(+), 33 deletions(-) create mode 100644 src/main/java/LottoAnalyzer.java create mode 100644 src/main/java/OutputView.java create mode 100644 src/main/java/WinningNumbers.java create mode 100644 src/test/java/LottoAnalyzerTest.java diff --git a/src/main/java/InputView.java b/src/main/java/InputView.java index e66dc5a..bebff90 100644 --- a/src/main/java/InputView.java +++ b/src/main/java/InputView.java @@ -1,2 +1,56 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class InputView { + public static int askPayment(Scanner scanner) { + System.out.println("구입금액을 입력해 주세요."); + int payment = scanner.nextInt(); + // TODO payment가 1000원단위가 아닐 때 예외 처리 + scanner.nextLine(); + System.out.println(); + return payment; + } + + public static int askNumberOfManualLottos(Scanner scanner) { + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + int NumberOfManualLottos = scanner.nextInt(); + // TODO 음수일 경우 예외처리 + scanner.nextLine(); + System.out.println(); + return NumberOfManualLottos; + } + + public static List> askManualLottoNumbers(Scanner scanner, int manualCount) { + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + List> manualLottoNumbers = new ArrayList<>(); + for (int i = 0; i < manualCount; i++) { + String numberText = scanner.nextLine(); + // TODO 숫자가 아닌 입력이 들어온 경우 예외처리 + manualLottoNumbers.add(parseNumber(numberText)); + } + System.out.println(); + return manualLottoNumbers; + } + + public static List askWinningNumbers(Scanner scanner) { + System.out.println("지난 주 당첨 번호를 입력해 주세요."); + String numberText = scanner.nextLine(); + // TODO 숫자가 아닌 입력이 들어온 경우 예외처리 + return parseNumber(numberText); + } + + public static int askBonusNumber(Scanner scanner) { + System.out.println("보너스 볼을 입력해 주세요."); + int bonusNumber = scanner.nextInt(); + scanner.nextLine(); + return bonusNumber; + } + + private static List parseNumber(String numberText) { + return Stream.of(numberText.split(",")) + .map(number -> Integer.parseInt(number.trim())).collect(Collectors.toList()); + } } diff --git a/src/main/java/Lotto.java b/src/main/java/Lotto.java index 282f131..e738679 100644 --- a/src/main/java/Lotto.java +++ b/src/main/java/Lotto.java @@ -1,13 +1,20 @@ +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Lotto { private List lottoNos; public Lotto(List lottoNos) { - this.lottoNos = lottoNos.stream().map(number -> {return new LottoNo(number);}).collect(Collectors.toList()); + this.lottoNos = lottoNos.stream().map(number -> {return new LottoNo(number);}) + .collect(Collectors.toList()); } public List getLottoNos() { return lottoNos; } + + public boolean contains(LottoNo lottoNo) { + return lottoNos.contains(lottoNo); + } } + diff --git a/src/main/java/LottoAnalyzer.java b/src/main/java/LottoAnalyzer.java new file mode 100644 index 0000000..016d5bf --- /dev/null +++ b/src/main/java/LottoAnalyzer.java @@ -0,0 +1,47 @@ +import java.util.List; +import java.util.stream.Collectors; + +public class LottoAnalyzer { + private static final int PRICE_PER_LOTTO = 1000; + private static final int PERCENTAGE = 100; + + private List lottos; + private List winningLottos; + + public LottoAnalyzer(List lottos, WinningNumbers winningNumbers) { + this.lottos = lottos; + winningLottos = lottos.stream().map(lotto -> new WinningLotto(lotto, getRankOfLotto(lotto, winningNumbers))) + .collect(Collectors.toList()); + } + + public List getWinningLotto() { + return winningLottos; + } + + public Rank getRankOfLotto(Lotto lotto, WinningNumbers winningNumbers) { + int countOfMatch = winningNumbers.getWinningNumbers().stream() + .filter(lotto::contains).collect(Collectors.toList()).size(); + boolean matchBonus = lotto.contains(winningNumbers.getBonusNumber()); + return Rank.valueOf(countOfMatch, matchBonus); + } + + public double calculateEarningRate() { + // TODO winningLottos가 null인 경우 에러처리 + int inputMoney = lottos.size() * PRICE_PER_LOTTO; + double earnedMoney = calculateEarnedMoney(); + return Math.round(earnedMoney / inputMoney * PERCENTAGE * 10) / 10.0; + } + + public int calculateEarnedMoney() { + // TODO winningLottos가 null인 경우 에러처리 + List winningMoneys = winningLottos.stream() + .map(winningLotto -> winningLotto.getLottoPrize().getWinningMoney()) + .collect(Collectors.toList()); + return winningMoneys.stream().reduce(0, (accumalation, current) -> accumalation + current); + } + + public int countRank(Rank findingRank) { + return (int) winningLottos.stream().map(WinningLotto::getLottoPrize) + .filter(rank -> rank.equals(findingRank)).count(); + } +} diff --git a/src/main/java/LottoGame.java b/src/main/java/LottoGame.java index cf43650..db162bb 100644 --- a/src/main/java/LottoGame.java +++ b/src/main/java/LottoGame.java @@ -2,15 +2,15 @@ import java.util.List; public class LottoGame { - static final int PRICE_PER_LOTTO = 1000; + private static final int PRICE_PER_LOTTO = 1000; - private List allLottos; + private List allLotto; + private int numberOfAllLotto; private int numberOfManualLotto; - private int inputMoney; public LottoGame(int inputMoney) { - allLottos = new ArrayList<>(); - this.inputMoney = inputMoney; + allLotto = new ArrayList<>(); + numberOfAllLotto = inputMoney / PRICE_PER_LOTTO; numberOfManualLotto = 0; } @@ -18,22 +18,26 @@ public void setManualLottos(int numberOfManualLotto, List> manualL this.numberOfManualLotto = numberOfManualLotto; // TODO numberOfManualLotto와 manualLottoNumbers의 길이가 일치하지 않는 상황에 대한 예외처리 for (int i = 0; i < numberOfManualLotto ; i++) { - allLottos.add(LottoGenerator.generateLottoWithNos(manualLottoNumbers.get(i))); + allLotto.add(LottoGenerator.generateLottoWithNos(manualLottoNumbers.get(i))); } } public List issueAutoLottos() { - int numberOfAutoLottos = inputMoney / PRICE_PER_LOTTO - numberOfManualLotto; + int numberOfAutoLottos = numberOfAllLotto - numberOfManualLotto; List autoLottos = new ArrayList<>(); for (int i = 0; i < numberOfAutoLottos ; i++) { autoLottos.add(LottoGenerator.generateAutoLotto()); } - allLottos.addAll(autoLottos); + allLotto.addAll(autoLottos); return autoLottos; } - public List getAllLottos() { - return allLottos; + public LottoAnalyzer getLottoAnalyzer(WinningNumbers winningNumbers) { + return new LottoAnalyzer(allLotto, winningNumbers); + } + + public List getAllLotto() { + return allLotto; } } diff --git a/src/main/java/LottoGenerator.java b/src/main/java/LottoGenerator.java index afc60bb..0dedff1 100644 --- a/src/main/java/LottoGenerator.java +++ b/src/main/java/LottoGenerator.java @@ -1,10 +1,7 @@ -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; -import java.util.stream.Stream; public class LottoGenerator { private static List lottoNoPool; diff --git a/src/main/java/LottoNo.java b/src/main/java/LottoNo.java index 9a574f2..b93d026 100644 --- a/src/main/java/LottoNo.java +++ b/src/main/java/LottoNo.java @@ -1,5 +1,8 @@ +import java.util.Objects; + public class LottoNo { - private int value; + private Integer value; + public LottoNo(int number) { value = number; } @@ -7,4 +10,12 @@ public LottoNo(int number) { public int getValue() { return value; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LottoNo lottoNo = (LottoNo) o; + return value == lottoNo.value; + } } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index b0eddc3..ca8166d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,17 +1,22 @@ -public class Main { +import java.util.List; +import java.util.Scanner; +public class Main { public static void main(String[] args) { -// Rank[] ranks = Rank.values(); -// for (Rank rank: ranks) { -// System.out.println(rank); -// System.out.println(rank.getCountOfMatch()); -// System.out.println(rank.getWinningMoney()); -// } -// Rank rank = Rank.valueOf("SECOND"); -// System.out.println(rank); -// System.out.println(rank.getCountOfMatch()); -// System.out.println(rank.getWinningMoney()); - Rank temp = Rank.valueOf(3, false); - System.out.println(temp); + Scanner scanner = new Scanner(System.in); + int payment = InputView.askPayment(scanner); + int numberOfManualLottos = InputView.askNumberOfManualLottos(scanner); + List> manualNumbers = InputView.askManualLottoNumbers(scanner, numberOfManualLottos); + + LottoGame lottoGame = new LottoGame(payment); + lottoGame.setManualLottos(numberOfManualLottos, manualNumbers); + lottoGame.issueAutoLottos(); + OutputView.showAllLottos(lottoGame.getAllLotto(), numberOfManualLottos); + + WinningNumbers winningNumbers = new WinningNumbers( + InputView.askWinningNumbers(scanner), InputView.askBonusNumber(scanner) + ); + LottoAnalyzer lottoAnalyzer = lottoGame.getLottoAnalyzer(winningNumbers); + OutputView.showAnalysis(lottoAnalyzer); } } diff --git a/src/main/java/OutputView.java b/src/main/java/OutputView.java new file mode 100644 index 0000000..4490530 --- /dev/null +++ b/src/main/java/OutputView.java @@ -0,0 +1,42 @@ +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class OutputView { + public static void showAllLottos(List allLotto, int numberOfManualLottos) { + int numberOfAutoLottos = allLotto.size() - numberOfManualLottos; + System.out.printf("수동으로 %d장, 자동으로 %d장을 구매했습니다.\n", numberOfManualLottos, numberOfAutoLottos); + for (Lotto lotto : allLotto) { + System.out.println(showLotto(lotto)); + } + } + + public static String showLotto(Lotto lotto) { + return lotto.getLottoNos().stream().map(LottoNo::getValue).map(number -> number.toString()) + .collect(Collectors.joining(", ", "[", "]")); + } + + public static void showAnalysis(LottoAnalyzer lottoAnalyzer) { + showWRanks(lottoAnalyzer); + showEarningRate(lottoAnalyzer.calculateEarningRate()); + } + + public static void showRankCount(Rank rank, int count) { + System.out.printf("%d개 일치 (%d원)- %d개\n", rank.getCountOfMatch(), rank.getWinningMoney(), count); + } + + public static void showEarningRate(double earningRate) { + System.out.printf("총 수익률은 %f%%입니다.\n", earningRate); + } + + private static void showWRanks(LottoAnalyzer lottoAnalyzer) { + System.out.println("당첨 통계"); + System.out.println("---------"); + List prize = Stream.of(Rank.values()).collect(Collectors.toList()); + prize.remove(Rank.MISS); + for (int i = prize.size() - 1; i >= 0 ; i--) { + int count = lottoAnalyzer.countRank(prize.get(i)); + showRankCount(prize.get(i), count); + } + } +} diff --git a/src/main/java/Rank.java b/src/main/java/Rank.java index c161203..6a5e63a 100644 --- a/src/main/java/Rank.java +++ b/src/main/java/Rank.java @@ -31,11 +31,9 @@ public static Rank valueOf(int countOfMatch, boolean matchBonus) { if (countOfMatch == 5 && matchBonus) { return SECOND; } - Map countOfMatchRankMapWithoutSecond = Stream.of(values()).filter(rank -> rank != SECOND) .collect(Collectors.toMap(Rank::getCountOfMatch, Function.identity())); Rank result = countOfMatchRankMapWithoutSecond.get(countOfMatch); - if (result == null) { result = MISS; } diff --git a/src/main/java/WinningLotto.java b/src/main/java/WinningLotto.java index 6eff079..37708b6 100644 --- a/src/main/java/WinningLotto.java +++ b/src/main/java/WinningLotto.java @@ -1,2 +1,19 @@ +import java.util.List; + public class WinningLotto { + private List lottoNos; + private Rank lottoPrize; + + public WinningLotto(Lotto lotto, Rank lottoPrize) { + lottoNos = lotto.getLottoNos(); + this.lottoPrize = lottoPrize; + } + + public List getLottoNos() { + return lottoNos; + } + + public Rank getLottoPrize() { + return lottoPrize; + } } diff --git a/src/main/java/WinningNumbers.java b/src/main/java/WinningNumbers.java new file mode 100644 index 0000000..d1f00c0 --- /dev/null +++ b/src/main/java/WinningNumbers.java @@ -0,0 +1,20 @@ +import java.util.List; +import java.util.stream.Collectors; + +public class WinningNumbers { + private List winningNumbers; + private LottoNo bonusNumber; + public WinningNumbers(List winningNumbers, int bonusNumber) { + this.winningNumbers = winningNumbers.stream().map(number -> new LottoNo(number)) + .collect(Collectors.toList()); + this.bonusNumber = new LottoNo(bonusNumber); + } + + public List getWinningNumbers() { + return winningNumbers; + } + + public LottoNo getBonusNumber() { + return bonusNumber; + } +} diff --git a/src/test/java/LottoAnalyzerTest.java b/src/test/java/LottoAnalyzerTest.java new file mode 100644 index 0000000..934df68 --- /dev/null +++ b/src/test/java/LottoAnalyzerTest.java @@ -0,0 +1,61 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.*; + +public class LottoAnalyzerTest { + private static final double DELTA = 1e-15; + + private List lottos; + private LottoAnalyzer lottoAnalyzer; + private WinningNumbers winningNumbers; + + @Before + public void setUp() throws Exception { + lottos = new ArrayList<>(); + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6))); // FIRST + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 5, 7))); // SECOND + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 5, 8))); // THIRD + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 7, 8))); // FOURTH + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 7, 8, 9))); // FIFTH + lottos.add(new Lotto(Arrays.asList(1, 2, 7, 8, 9, 10))); // MISS + winningNumbers = new WinningNumbers(Arrays.asList(1,2,3,4,5,6), 7); + lottoAnalyzer = new LottoAnalyzer(lottos, winningNumbers); + } + + @Test + public void getRankOfLotto() { + List ranks = Arrays.asList(Rank.values()); + for (int i = 0; i < lottos.size() ; i++) { + assertEquals(ranks.get(i), lottoAnalyzer.getRankOfLotto(lottos.get(i), winningNumbers)); + } + } + + @Test + public void calculateEarnedMoney() { + assertEquals(2031555000, lottoAnalyzer.calculateEarnedMoney()); + } + + @Test + public void calculateEarningRate() { + assertEquals(33859250.0, lottoAnalyzer.calculateEarningRate(), DELTA); + } + + @Test + public void countRank() { + List ranks = Arrays.asList(Rank.values()); + for (int i = 0; i < ranks.size(); i++) { + assertEquals(1, lottoAnalyzer.countRank(ranks.get(i))); + } + } + + @After + public void tearDown() throws Exception { + lottos = null; + } +} \ No newline at end of file diff --git a/src/test/java/LottoGameTest.java b/src/test/java/LottoGameTest.java index 52469c0..456fcb5 100644 --- a/src/test/java/LottoGameTest.java +++ b/src/test/java/LottoGameTest.java @@ -24,14 +24,14 @@ public void setUp() throws Exception { public void setManualLottos() { lottoGame = new LottoGame(10000); lottoGame.setManualLottos(3, manualLottoNumbers); - assertEquals(3, lottoGame.getAllLottos().size()); + assertEquals(3, lottoGame.getAllLotto().size()); } @Test public void issueAllAutoLottos() { lottoGame = new LottoGame(10000); assertEquals(10, lottoGame.issueAutoLottos().size()); - assertEquals(10, lottoGame.getAllLottos().size()); + assertEquals(10, lottoGame.getAllLotto().size()); } @Test @@ -39,7 +39,7 @@ public void issueAutoLottos() { lottoGame = new LottoGame(10000); lottoGame.setManualLottos(3, manualLottoNumbers); assertEquals(7, lottoGame.issueAutoLottos().size()); - assertEquals(10, lottoGame.getAllLottos().size()); + assertEquals(10, lottoGame.getAllLotto().size()); } @After From 1cd1b8b50eaadb638b96840c83ec27530bb56495 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 01:22:47 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=ED=94=84=EB=A1=9C=EB=8D=95=EC=85=98?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81,=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=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/main/java/Lotto.java | 20 ------- src/main/java/LottoGame.java | 43 --------------- src/main/java/LottoGenerator.java | 22 -------- src/main/java/WinningNumbers.java | 20 ------- src/main/java/domain/Lotto.java | 34 ++++++++++++ src/main/java/{ => domain}/LottoAnalyzer.java | 21 +++----- src/main/java/domain/LottoGame.java | 46 ++++++++++++++++ src/main/java/domain/LottoGenerator.java | 25 +++++++++ src/main/java/{ => domain}/LottoNo.java | 12 +++-- src/main/java/{ => domain}/Main.java | 13 +++-- src/main/java/{ => domain}/Rank.java | 2 + src/main/java/{ => domain}/WinningLotto.java | 2 + src/main/java/domain/WinningNos.java | 22 ++++++++ src/main/java/{ => view}/InputView.java | 2 + src/main/java/{ => view}/OutputView.java | 19 ++++--- .../java/{ => domain}/LottoAnalyzerTest.java | 14 ++--- src/test/java/{ => domain}/LottoGameTest.java | 29 +++++----- .../java/{ => domain}/LottoGeneratorTest.java | 4 +- src/test/java/domain/LottoTest.java | 54 +++++++++++++++++++ src/test/java/{ => domain}/RankTest.java | 4 +- src/test/java/domain/WinningNosTest.java | 50 +++++++++++++++++ 21 files changed, 299 insertions(+), 159 deletions(-) delete mode 100644 src/main/java/Lotto.java delete mode 100644 src/main/java/LottoGame.java delete mode 100644 src/main/java/LottoGenerator.java delete mode 100644 src/main/java/WinningNumbers.java create mode 100644 src/main/java/domain/Lotto.java rename src/main/java/{ => domain}/LottoAnalyzer.java (60%) create mode 100644 src/main/java/domain/LottoGame.java create mode 100644 src/main/java/domain/LottoGenerator.java rename src/main/java/{ => domain}/LottoNo.java (58%) rename src/main/java/{ => domain}/Main.java (74%) rename src/main/java/{ => domain}/Rank.java (98%) rename src/main/java/{ => domain}/WinningLotto.java (95%) create mode 100644 src/main/java/domain/WinningNos.java rename src/main/java/{ => view}/InputView.java (99%) rename src/main/java/{ => view}/OutputView.java (73%) rename src/test/java/{ => domain}/LottoAnalyzerTest.java (80%) rename src/test/java/{ => domain}/LottoGameTest.java (59%) rename src/test/java/{ => domain}/LottoGeneratorTest.java (91%) create mode 100644 src/test/java/domain/LottoTest.java rename src/test/java/{ => domain}/RankTest.java (90%) create mode 100644 src/test/java/domain/WinningNosTest.java diff --git a/src/main/java/Lotto.java b/src/main/java/Lotto.java deleted file mode 100644 index e738679..0000000 --- a/src/main/java/Lotto.java +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class Lotto { - private List lottoNos; - public Lotto(List lottoNos) { - this.lottoNos = lottoNos.stream().map(number -> {return new LottoNo(number);}) - .collect(Collectors.toList()); - } - - public List getLottoNos() { - return lottoNos; - } - - public boolean contains(LottoNo lottoNo) { - return lottoNos.contains(lottoNo); - } -} - diff --git a/src/main/java/LottoGame.java b/src/main/java/LottoGame.java deleted file mode 100644 index db162bb..0000000 --- a/src/main/java/LottoGame.java +++ /dev/null @@ -1,43 +0,0 @@ -import java.util.ArrayList; -import java.util.List; - -public class LottoGame { - private static final int PRICE_PER_LOTTO = 1000; - - private List allLotto; - private int numberOfAllLotto; - private int numberOfManualLotto; - - public LottoGame(int inputMoney) { - allLotto = new ArrayList<>(); - numberOfAllLotto = inputMoney / PRICE_PER_LOTTO; - numberOfManualLotto = 0; - } - - public void setManualLottos(int numberOfManualLotto, List> manualLottoNumbers) { - this.numberOfManualLotto = numberOfManualLotto; - // TODO numberOfManualLotto와 manualLottoNumbers의 길이가 일치하지 않는 상황에 대한 예외처리 - for (int i = 0; i < numberOfManualLotto ; i++) { - allLotto.add(LottoGenerator.generateLottoWithNos(manualLottoNumbers.get(i))); - } - } - - public List issueAutoLottos() { - int numberOfAutoLottos = numberOfAllLotto - numberOfManualLotto; - List autoLottos = new ArrayList<>(); - for (int i = 0; i < numberOfAutoLottos ; i++) { - autoLottos.add(LottoGenerator.generateAutoLotto()); - } - allLotto.addAll(autoLottos); - return autoLottos; - } - - public LottoAnalyzer getLottoAnalyzer(WinningNumbers winningNumbers) { - return new LottoAnalyzer(allLotto, winningNumbers); - } - - public List getAllLotto() { - return allLotto; - } - -} diff --git a/src/main/java/LottoGenerator.java b/src/main/java/LottoGenerator.java deleted file mode 100644 index 0dedff1..0000000 --- a/src/main/java/LottoGenerator.java +++ /dev/null @@ -1,22 +0,0 @@ -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class LottoGenerator { - private static List lottoNoPool; - - public static Lotto generateLottoWithNos(List lottoNos) { - return new Lotto(lottoNos); - } - - public static Lotto generateAutoLotto() { - return generateLottoWithNos(getRandomLottoNos()); - } - - private static List getRandomLottoNos() { - lottoNoPool = IntStream.rangeClosed(1, 45).boxed().collect(Collectors.toList()); - Collections.shuffle(lottoNoPool); - return lottoNoPool.subList(0, 6); - } -} diff --git a/src/main/java/WinningNumbers.java b/src/main/java/WinningNumbers.java deleted file mode 100644 index d1f00c0..0000000 --- a/src/main/java/WinningNumbers.java +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.List; -import java.util.stream.Collectors; - -public class WinningNumbers { - private List winningNumbers; - private LottoNo bonusNumber; - public WinningNumbers(List winningNumbers, int bonusNumber) { - this.winningNumbers = winningNumbers.stream().map(number -> new LottoNo(number)) - .collect(Collectors.toList()); - this.bonusNumber = new LottoNo(bonusNumber); - } - - public List getWinningNumbers() { - return winningNumbers; - } - - public LottoNo getBonusNumber() { - return bonusNumber; - } -} diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java new file mode 100644 index 0000000..0074002 --- /dev/null +++ b/src/main/java/domain/Lotto.java @@ -0,0 +1,34 @@ +package domain; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class Lotto { + private List lottoNos; + + public Lotto(List lottoNos) { + this.lottoNos = lottoNos.stream().map(number -> new LottoNo(number)).collect(Collectors.toList()); + } + + public List getLottoNos() { + return lottoNos; + } + + public boolean contains(LottoNo lottoNo) { + return lottoNos.contains(lottoNo); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Lotto lotto = (Lotto) o; + return Objects.equals(lottoNos, lotto.lottoNos); + } +} + diff --git a/src/main/java/LottoAnalyzer.java b/src/main/java/domain/LottoAnalyzer.java similarity index 60% rename from src/main/java/LottoAnalyzer.java rename to src/main/java/domain/LottoAnalyzer.java index 016d5bf..e59b552 100644 --- a/src/main/java/LottoAnalyzer.java +++ b/src/main/java/domain/LottoAnalyzer.java @@ -1,3 +1,5 @@ +package domain; + import java.util.List; import java.util.stream.Collectors; @@ -8,36 +10,29 @@ public class LottoAnalyzer { private List lottos; private List winningLottos; - public LottoAnalyzer(List lottos, WinningNumbers winningNumbers) { + public LottoAnalyzer(List lottos, WinningNos winningNos) { this.lottos = lottos; - winningLottos = lottos.stream().map(lotto -> new WinningLotto(lotto, getRankOfLotto(lotto, winningNumbers))) + winningLottos = lottos.stream().map(lotto -> new WinningLotto(lotto, calculateRankOfLotto(lotto, winningNos))) .collect(Collectors.toList()); } - public List getWinningLotto() { - return winningLottos; - } - - public Rank getRankOfLotto(Lotto lotto, WinningNumbers winningNumbers) { - int countOfMatch = winningNumbers.getWinningNumbers().stream() - .filter(lotto::contains).collect(Collectors.toList()).size(); - boolean matchBonus = lotto.contains(winningNumbers.getBonusNumber()); + public Rank calculateRankOfLotto(Lotto lotto, WinningNos winningNos) { + int countOfMatch = winningNos.countMatchOf(lotto); + boolean matchBonus = winningNos.isBonus(lotto); return Rank.valueOf(countOfMatch, matchBonus); } public double calculateEarningRate() { - // TODO winningLottos가 null인 경우 에러처리 int inputMoney = lottos.size() * PRICE_PER_LOTTO; double earnedMoney = calculateEarnedMoney(); return Math.round(earnedMoney / inputMoney * PERCENTAGE * 10) / 10.0; } public int calculateEarnedMoney() { - // TODO winningLottos가 null인 경우 에러처리 List winningMoneys = winningLottos.stream() .map(winningLotto -> winningLotto.getLottoPrize().getWinningMoney()) .collect(Collectors.toList()); - return winningMoneys.stream().reduce(0, (accumalation, current) -> accumalation + current); + return winningMoneys.stream().reduce(0, (accumulation, current) -> accumulation + current); } public int countRank(Rank findingRank) { diff --git a/src/main/java/domain/LottoGame.java b/src/main/java/domain/LottoGame.java new file mode 100644 index 0000000..cedd2ee --- /dev/null +++ b/src/main/java/domain/LottoGame.java @@ -0,0 +1,46 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class LottoGame { + private static final int PRICE_PER_LOTTO = 1000; + + private List allLotto; + private int numberOfAllLotto; + + public LottoGame(int inputMoney, List> manualLottoNos) { + numberOfAllLotto = inputMoney / PRICE_PER_LOTTO; + allLotto = issueLottos(manualLottoNos); + } + + public LottoAnalyzer getLottoAnalyzer(WinningNos winningNos) { + return new LottoAnalyzer(allLotto, winningNos); + } + + public List getAllLotto() { + return allLotto; + } + + private List issueLottos(List> manualLottoNos) { + List lottos = issueManualLottos(manualLottoNos); + lottos.addAll(issueAutoLottos(numberOfAllLotto - lottos.size())); + return lottos; + } + + private List issueManualLottos(List> manualLottoNos) { + List ManualLottos = new ArrayList<>(); + for (int i = 0; i < manualLottoNos.size() ; i++) { + ManualLottos.add(LottoGenerator.generateLottoWithNos(manualLottoNos.get(i))); + } + return ManualLottos; + } + + private List issueAutoLottos(int numberOfAutoLottos) { + List autoLottos = new ArrayList<>(); + for (int i = 0; i < numberOfAutoLottos ; i++) { + autoLottos.add(LottoGenerator.generateAutoLotto()); + } + return autoLottos; + } +} diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/domain/LottoGenerator.java new file mode 100644 index 0000000..620dd68 --- /dev/null +++ b/src/main/java/domain/LottoGenerator.java @@ -0,0 +1,25 @@ +package domain; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LottoGenerator { + private static final List LOTTO_NO_POOLS = IntStream.rangeClosed(1, 45).boxed().collect(Collectors.toList());; + + public static Lotto generateLottoWithNos(List lottoNos) { + // TODO 숫자가 1 ~ 45 범위에 있지 않으면 에러 + return new Lotto(lottoNos); + } + + public static Lotto generateAutoLotto() { + return generateLottoWithNos(getRandomNos()); + } + + + private static List getRandomNos() { + Collections.shuffle(LOTTO_NO_POOLS); + return LOTTO_NO_POOLS.subList(0, 6); + } +} diff --git a/src/main/java/LottoNo.java b/src/main/java/domain/LottoNo.java similarity index 58% rename from src/main/java/LottoNo.java rename to src/main/java/domain/LottoNo.java index b93d026..5a8318d 100644 --- a/src/main/java/LottoNo.java +++ b/src/main/java/domain/LottoNo.java @@ -1,4 +1,4 @@ -import java.util.Objects; +package domain; public class LottoNo { private Integer value; @@ -7,14 +7,18 @@ public LottoNo(int number) { value = number; } - public int getValue() { + public Integer getValue() { return value; } @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } LottoNo lottoNo = (LottoNo) o; return value == lottoNo.value; } diff --git a/src/main/java/Main.java b/src/main/java/domain/Main.java similarity index 74% rename from src/main/java/Main.java rename to src/main/java/domain/Main.java index ca8166d..b17588d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/domain/Main.java @@ -1,3 +1,8 @@ +package domain; + +import view.InputView; +import view.OutputView; + import java.util.List; import java.util.Scanner; @@ -8,15 +13,13 @@ public static void main(String[] args) { int numberOfManualLottos = InputView.askNumberOfManualLottos(scanner); List> manualNumbers = InputView.askManualLottoNumbers(scanner, numberOfManualLottos); - LottoGame lottoGame = new LottoGame(payment); - lottoGame.setManualLottos(numberOfManualLottos, manualNumbers); - lottoGame.issueAutoLottos(); + LottoGame lottoGame = new LottoGame(payment, manualNumbers); OutputView.showAllLottos(lottoGame.getAllLotto(), numberOfManualLottos); - WinningNumbers winningNumbers = new WinningNumbers( + WinningNos winningNos = new WinningNos( InputView.askWinningNumbers(scanner), InputView.askBonusNumber(scanner) ); - LottoAnalyzer lottoAnalyzer = lottoGame.getLottoAnalyzer(winningNumbers); + LottoAnalyzer lottoAnalyzer = lottoGame.getLottoAnalyzer(winningNos); OutputView.showAnalysis(lottoAnalyzer); } } diff --git a/src/main/java/Rank.java b/src/main/java/domain/Rank.java similarity index 98% rename from src/main/java/Rank.java rename to src/main/java/domain/Rank.java index 6a5e63a..3957fc0 100644 --- a/src/main/java/Rank.java +++ b/src/main/java/domain/Rank.java @@ -1,3 +1,5 @@ +package domain; + import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; diff --git a/src/main/java/WinningLotto.java b/src/main/java/domain/WinningLotto.java similarity index 95% rename from src/main/java/WinningLotto.java rename to src/main/java/domain/WinningLotto.java index 37708b6..60a50df 100644 --- a/src/main/java/WinningLotto.java +++ b/src/main/java/domain/WinningLotto.java @@ -1,3 +1,5 @@ +package domain; + import java.util.List; public class WinningLotto { diff --git a/src/main/java/domain/WinningNos.java b/src/main/java/domain/WinningNos.java new file mode 100644 index 0000000..35a5670 --- /dev/null +++ b/src/main/java/domain/WinningNos.java @@ -0,0 +1,22 @@ +package domain; + +import java.util.List; +import java.util.stream.Collectors; + +public class WinningNos { + private List winningNos; + private LottoNo bonusNo; + public WinningNos(List winningNos, int bonusNo) { + this.winningNos = winningNos.stream().map(number -> new LottoNo(number)) + .collect(Collectors.toList()); + this.bonusNo = new LottoNo(bonusNo); + } + + public int countMatchOf(Lotto lotto) { + return winningNos.stream().filter(lotto::contains).collect(Collectors.toList()).size(); + } + + public boolean isBonus(Lotto lotto) { + return lotto.contains(bonusNo); + } +} diff --git a/src/main/java/InputView.java b/src/main/java/view/InputView.java similarity index 99% rename from src/main/java/InputView.java rename to src/main/java/view/InputView.java index bebff90..0814468 100644 --- a/src/main/java/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,3 +1,5 @@ +package view; + import java.util.ArrayList; import java.util.List; import java.util.Scanner; diff --git a/src/main/java/OutputView.java b/src/main/java/view/OutputView.java similarity index 73% rename from src/main/java/OutputView.java rename to src/main/java/view/OutputView.java index 4490530..41c4b4d 100644 --- a/src/main/java/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,3 +1,10 @@ +package view; + +import domain.Lotto; +import domain.LottoAnalyzer; +import domain.LottoNo; +import domain.Rank; + import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -6,14 +13,12 @@ public class OutputView { public static void showAllLottos(List allLotto, int numberOfManualLottos) { int numberOfAutoLottos = allLotto.size() - numberOfManualLottos; System.out.printf("수동으로 %d장, 자동으로 %d장을 구매했습니다.\n", numberOfManualLottos, numberOfAutoLottos); - for (Lotto lotto : allLotto) { - System.out.println(showLotto(lotto)); - } + allLotto.stream().forEach(lotto -> showLotto(lotto)); } - public static String showLotto(Lotto lotto) { - return lotto.getLottoNos().stream().map(LottoNo::getValue).map(number -> number.toString()) - .collect(Collectors.joining(", ", "[", "]")); + public static void showLotto(Lotto lotto) { + System.out.println(lotto.getLottoNos().stream().map(LottoNo::getValue).map(number -> number.toString()) + .collect(Collectors.joining(", ", "[", "]"))); } public static void showAnalysis(LottoAnalyzer lottoAnalyzer) { @@ -26,7 +31,7 @@ public static void showRankCount(Rank rank, int count) { } public static void showEarningRate(double earningRate) { - System.out.printf("총 수익률은 %f%%입니다.\n", earningRate); + System.out.printf("총 수익률은 %.1f%%입니다.\n", earningRate); } private static void showWRanks(LottoAnalyzer lottoAnalyzer) { diff --git a/src/test/java/LottoAnalyzerTest.java b/src/test/java/domain/LottoAnalyzerTest.java similarity index 80% rename from src/test/java/LottoAnalyzerTest.java rename to src/test/java/domain/LottoAnalyzerTest.java index 934df68..824ca8c 100644 --- a/src/test/java/LottoAnalyzerTest.java +++ b/src/test/java/domain/LottoAnalyzerTest.java @@ -1,3 +1,5 @@ +package domain; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -13,7 +15,7 @@ public class LottoAnalyzerTest { private List lottos; private LottoAnalyzer lottoAnalyzer; - private WinningNumbers winningNumbers; + private WinningNos winningNos; @Before public void setUp() throws Exception { @@ -24,15 +26,15 @@ public void setUp() throws Exception { lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 7, 8))); // FOURTH lottos.add(new Lotto(Arrays.asList(1, 2, 3, 7, 8, 9))); // FIFTH lottos.add(new Lotto(Arrays.asList(1, 2, 7, 8, 9, 10))); // MISS - winningNumbers = new WinningNumbers(Arrays.asList(1,2,3,4,5,6), 7); - lottoAnalyzer = new LottoAnalyzer(lottos, winningNumbers); + winningNos = new WinningNos(Arrays.asList(1, 2, 3, 4, 5, 6), 7); + lottoAnalyzer = new LottoAnalyzer(lottos, winningNos); } @Test - public void getRankOfLotto() { + public void calculateRankOfLotto() { List ranks = Arrays.asList(Rank.values()); - for (int i = 0; i < lottos.size() ; i++) { - assertEquals(ranks.get(i), lottoAnalyzer.getRankOfLotto(lottos.get(i), winningNumbers)); + for (int i = 0; i < lottos.size(); i++) { + assertEquals(ranks.get(i), lottoAnalyzer.calculateRankOfLotto(lottos.get(i), winningNos)); } } diff --git a/src/test/java/LottoGameTest.java b/src/test/java/domain/LottoGameTest.java similarity index 59% rename from src/test/java/LottoGameTest.java rename to src/test/java/domain/LottoGameTest.java index 456fcb5..0603767 100644 --- a/src/test/java/LottoGameTest.java +++ b/src/test/java/domain/LottoGameTest.java @@ -1,3 +1,5 @@ +package domain; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -5,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static org.junit.Assert.*; @@ -12,6 +15,12 @@ public class LottoGameTest { private LottoGame lottoGame; List> manualLottoNumbers; + private void assertArrayEquals(List expectedLottos, List subList) { + for (int i = 0; i < expectedLottos.size(); i++) { + assertEquals(expectedLottos.get(i), subList.get(i)); + } + } + @Before public void setUp() throws Exception { manualLottoNumbers = new ArrayList<>(); @@ -22,24 +31,12 @@ public void setUp() throws Exception { @Test public void setManualLottos() { - lottoGame = new LottoGame(10000); - lottoGame.setManualLottos(3, manualLottoNumbers); - assertEquals(3, lottoGame.getAllLotto().size()); - } - - @Test - public void issueAllAutoLottos() { - lottoGame = new LottoGame(10000); - assertEquals(10, lottoGame.issueAutoLottos().size()); + lottoGame = new LottoGame(10000, manualLottoNumbers); assertEquals(10, lottoGame.getAllLotto().size()); - } - @Test - public void issueAutoLottos() { - lottoGame = new LottoGame(10000); - lottoGame.setManualLottos(3, manualLottoNumbers); - assertEquals(7, lottoGame.issueAutoLottos().size()); - assertEquals(10, lottoGame.getAllLotto().size()); + List expectedLottos = manualLottoNumbers.stream().map(numbers -> LottoGenerator.generateLottoWithNos(numbers)) + .collect(Collectors.toList()); + assertArrayEquals(expectedLottos, lottoGame.getAllLotto().subList(0, 3)); } @After diff --git a/src/test/java/LottoGeneratorTest.java b/src/test/java/domain/LottoGeneratorTest.java similarity index 91% rename from src/test/java/LottoGeneratorTest.java rename to src/test/java/domain/LottoGeneratorTest.java index 94c8fc1..266028e 100644 --- a/src/test/java/LottoGeneratorTest.java +++ b/src/test/java/domain/LottoGeneratorTest.java @@ -1,3 +1,5 @@ +package domain; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -13,7 +15,7 @@ public class LottoGeneratorTest { @Before public void setUp() throws Exception { - numbers = Arrays.asList(1,2,3,4,5,6); + numbers = Arrays.asList(1, 2, 3, 4, 5, 6); } @Test diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/domain/LottoTest.java new file mode 100644 index 0000000..10c5a2d --- /dev/null +++ b/src/test/java/domain/LottoTest.java @@ -0,0 +1,54 @@ +package domain; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.*; + +public class LottoTest { + private Lotto lotto; + private List lottoNos = Arrays.asList(1, 2, 3, 4, 5, 6); + + @Before + public void setUp() throws Exception { + lotto = new Lotto(lottoNos); + } + + @Test + public void getLottoNos() { + lotto.getLottoNos().stream().forEach(lottoNo -> assertThat(lottoNo, instanceOf(LottoNo.class))); + assertEquals(6, lotto.getLottoNos().size()); + } + + @Test + public void contains() { + assertTrue(lotto.contains(new LottoNo(1))); + assertTrue(lotto.contains(new LottoNo(2))); + assertTrue(lotto.contains(new LottoNo(3))); + assertTrue(lotto.contains(new LottoNo(4))); + assertTrue(lotto.contains(new LottoNo(5))); + assertTrue(lotto.contains(new LottoNo(6))); + assertFalse(lotto.contains(new LottoNo(0))); + assertFalse(lotto.contains(new LottoNo(7))); + } + + @Test + public void testEquals() { + Lotto sameLotto = new Lotto(lottoNos); + Lotto otherLotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 7)); + + assertTrue(lotto.equals(sameLotto)); + assertFalse(lotto.equals(otherLotto)); + } + + @After + public void tearDown() throws Exception { + lotto = null; + lottoNos = null; + } +} \ No newline at end of file diff --git a/src/test/java/RankTest.java b/src/test/java/domain/RankTest.java similarity index 90% rename from src/test/java/RankTest.java rename to src/test/java/domain/RankTest.java index f2f2017..98ba528 100644 --- a/src/test/java/RankTest.java +++ b/src/test/java/domain/RankTest.java @@ -1,5 +1,5 @@ -import org.junit.After; -import org.junit.Before; +package domain; + import org.junit.Test; import static org.junit.Assert.*; diff --git a/src/test/java/domain/WinningNosTest.java b/src/test/java/domain/WinningNosTest.java new file mode 100644 index 0000000..ab400b8 --- /dev/null +++ b/src/test/java/domain/WinningNosTest.java @@ -0,0 +1,50 @@ +package domain; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.*; + +public class WinningNosTest { + private WinningNos winningNos; + + @Before + public void setUp() throws Exception { + winningNos = new WinningNos(Arrays.asList(1, 2, 3, 4, 5, 6), 7); + } + + @Test + public void countMatchOf() { + List lottos = new ArrayList<>(); + lottos.add(new Lotto(Arrays.asList(8, 9, 10, 11, 12, 13))); + lottos.add(new Lotto(Arrays.asList(1, 8, 9, 10, 11, 12))); + lottos.add(new Lotto(Arrays.asList(1, 2, 9, 10, 11, 12))); + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 10, 11, 12))); + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 11, 12))); + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 5, 12))); + lottos.add(new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6))); + + for (int i = 0; i < lottos.size(); i++) { + assertEquals(i, winningNos.countMatchOf(lottos.get(i))); + } + } + + @Test + public void isBonus() { + Lotto trueLotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + Lotto falseLotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6, 8)); + + assertTrue(winningNos.isBonus(trueLotto)); + assertFalse(winningNos.isBonus(falseLotto)); + } + + @After + public void tearDown() throws Exception { + winningNos = null; + } +} \ No newline at end of file From 2d543acec6e4b0e0313f97be1b2892f406612720 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 02:48:40 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=EC=97=90=EB=9F=AC=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Main.java | 28 +++++++++------- src/main/java/view/InputValidation.java | 43 +++++++++++++++++++++++++ src/main/java/view/InputView.java | 42 +++++++++++++----------- src/main/java/view/ViewException.java | 11 +++++++ 4 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 src/main/java/view/InputValidation.java create mode 100644 src/main/java/view/ViewException.java diff --git a/src/main/java/domain/Main.java b/src/main/java/domain/Main.java index b17588d..89d57c6 100644 --- a/src/main/java/domain/Main.java +++ b/src/main/java/domain/Main.java @@ -2,24 +2,30 @@ import view.InputView; import view.OutputView; +import view.ViewException; +import java.util.InputMismatchException; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - int payment = InputView.askPayment(scanner); - int numberOfManualLottos = InputView.askNumberOfManualLottos(scanner); - List> manualNumbers = InputView.askManualLottoNumbers(scanner, numberOfManualLottos); + try { + Scanner scanner = new Scanner(System.in); + int payment = InputView.askPayment(scanner); + int numberOfManualLottos = InputView.askNumberOfManualLottos(scanner); + List> manualNumbers = InputView.askManualLottoNos(scanner, numberOfManualLottos); - LottoGame lottoGame = new LottoGame(payment, manualNumbers); - OutputView.showAllLottos(lottoGame.getAllLotto(), numberOfManualLottos); + LottoGame lottoGame = new LottoGame(payment, manualNumbers); + OutputView.showAllLottos(lottoGame.getAllLotto(), numberOfManualLottos); - WinningNos winningNos = new WinningNos( - InputView.askWinningNumbers(scanner), InputView.askBonusNumber(scanner) - ); - LottoAnalyzer lottoAnalyzer = lottoGame.getLottoAnalyzer(winningNos); - OutputView.showAnalysis(lottoAnalyzer); + WinningNos winningNos = new WinningNos( + InputView.askWinningNos(scanner), InputView.askBonusNo(scanner) + ); + LottoAnalyzer lottoAnalyzer = lottoGame.getLottoAnalyzer(winningNos); + OutputView.showAnalysis(lottoAnalyzer); + } catch (Exception e) { + e.printStackTrace(); + } } } diff --git a/src/main/java/view/InputValidation.java b/src/main/java/view/InputValidation.java new file mode 100644 index 0000000..6b5a121 --- /dev/null +++ b/src/main/java/view/InputValidation.java @@ -0,0 +1,43 @@ +package view; + +import java.util.List; + +public class InputValidation { + private final static int NUMBER_OF_LOTTO_NOS = 6; + + public static void validatePayment(int payment) throws ViewException { +// if (payment < 1000) { +// throw new ViewException("[ViewException] 구입금액은 1000원 이상이어야 합니다"); +// } + if (payment % 1000 != 0) { + throw new ViewException("[ViewException] 구입금액은 1000원단위로 입력해주세요"); + } + } + + public static void validateNumberOfLottos(int numberOfLottos) throws ViewException { + if (numberOfLottos < 0) { + throw new ViewException("[ViewException] 로또의 수는 0이상이어야 합니다"); + } + } + + public static void validateAllLottoNos(List> lottoNos) throws ViewException { + for (List lottoNo : lottoNos) { + validateLottoNos(lottoNo); + } + } + + public static void validateLottoNos(List lottoNos) throws ViewException { + if (lottoNos.size() != NUMBER_OF_LOTTO_NOS) { + throw new ViewException("[ViewException] 로또 번호는 6자리 입니다"); + } + for (int number : lottoNos) { + validateNoRange(number); + } + } + + public static void validateNoRange(int number) throws ViewException { + if (number <= 0 || number > 45) { + throw new ViewException("[ViewException] 로또 번호는 1 ~ 45 범위 내의 숫자입니다"); + } + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 0814468..1845378 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -7,51 +7,57 @@ import java.util.stream.Stream; public class InputView { - public static int askPayment(Scanner scanner) { + public static int askPayment(Scanner scanner) throws ViewException{ System.out.println("구입금액을 입력해 주세요."); int payment = scanner.nextInt(); - // TODO payment가 1000원단위가 아닐 때 예외 처리 + InputValidation.validatePayment(payment); + scanner.nextLine(); System.out.println(); return payment; } - public static int askNumberOfManualLottos(Scanner scanner) { + public static int askNumberOfManualLottos(Scanner scanner) throws ViewException { System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); - int NumberOfManualLottos = scanner.nextInt(); - // TODO 음수일 경우 예외처리 + int numberOfManualLottos = scanner.nextInt(); + InputValidation.validateNumberOfLottos(numberOfManualLottos); + scanner.nextLine(); System.out.println(); - return NumberOfManualLottos; + return numberOfManualLottos; } - public static List> askManualLottoNumbers(Scanner scanner, int manualCount) { + public static List> askManualLottoNos(Scanner scanner, int manualCount) throws ViewException { System.out.println("수동으로 구매할 번호를 입력해 주세요."); - List> manualLottoNumbers = new ArrayList<>(); + List> manualLottoNos = new ArrayList<>(); for (int i = 0; i < manualCount; i++) { String numberText = scanner.nextLine(); - // TODO 숫자가 아닌 입력이 들어온 경우 예외처리 - manualLottoNumbers.add(parseNumber(numberText)); + manualLottoNos.add(parseNos(numberText)); } + InputValidation.validateAllLottoNos(manualLottoNos); + System.out.println(); - return manualLottoNumbers; + return manualLottoNos; } - public static List askWinningNumbers(Scanner scanner) { + public static List askWinningNos(Scanner scanner) throws ViewException { System.out.println("지난 주 당첨 번호를 입력해 주세요."); String numberText = scanner.nextLine(); - // TODO 숫자가 아닌 입력이 들어온 경우 예외처리 - return parseNumber(numberText); + + List winningNos = parseNos(numberText); + InputValidation.validateLottoNos(winningNos); + return winningNos; } - public static int askBonusNumber(Scanner scanner) { + public static int askBonusNo(Scanner scanner) throws ViewException{ System.out.println("보너스 볼을 입력해 주세요."); - int bonusNumber = scanner.nextInt(); + int bonusNo = scanner.nextInt(); + InputValidation.validateNoRange(bonusNo); scanner.nextLine(); - return bonusNumber; + return bonusNo; } - private static List parseNumber(String numberText) { + private static List parseNos(String numberText) { return Stream.of(numberText.split(",")) .map(number -> Integer.parseInt(number.trim())).collect(Collectors.toList()); } diff --git a/src/main/java/view/ViewException.java b/src/main/java/view/ViewException.java new file mode 100644 index 0000000..2922714 --- /dev/null +++ b/src/main/java/view/ViewException.java @@ -0,0 +1,11 @@ +package view; + +public class ViewException extends Exception { + ViewException() { + super("[ViewException]"); + } + + ViewException(String message) { + super(message); + } +} From d554f8ba8d40b5f0943eeff7da77a80a40d327a8 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 02:51:22 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=8F=AC=EB=A7=B7?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LottoGame.java | 4 ++-- src/main/java/domain/LottoGenerator.java | 4 ++-- src/main/java/domain/Main.java | 3 --- src/main/java/domain/WinningNos.java | 1 + src/main/java/view/InputView.java | 4 ++-- src/main/java/view/OutputView.java | 2 +- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/domain/LottoGame.java b/src/main/java/domain/LottoGame.java index cedd2ee..c35d0cc 100644 --- a/src/main/java/domain/LottoGame.java +++ b/src/main/java/domain/LottoGame.java @@ -30,7 +30,7 @@ private List issueLottos(List> manualLottoNos) { private List issueManualLottos(List> manualLottoNos) { List ManualLottos = new ArrayList<>(); - for (int i = 0; i < manualLottoNos.size() ; i++) { + for (int i = 0; i < manualLottoNos.size(); i++) { ManualLottos.add(LottoGenerator.generateLottoWithNos(manualLottoNos.get(i))); } return ManualLottos; @@ -38,7 +38,7 @@ private List issueManualLottos(List> manualLottoNos) { private List issueAutoLottos(int numberOfAutoLottos) { List autoLottos = new ArrayList<>(); - for (int i = 0; i < numberOfAutoLottos ; i++) { + for (int i = 0; i < numberOfAutoLottos; i++) { autoLottos.add(LottoGenerator.generateAutoLotto()); } return autoLottos; diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/domain/LottoGenerator.java index 620dd68..4c12047 100644 --- a/src/main/java/domain/LottoGenerator.java +++ b/src/main/java/domain/LottoGenerator.java @@ -6,10 +6,10 @@ import java.util.stream.IntStream; public class LottoGenerator { - private static final List LOTTO_NO_POOLS = IntStream.rangeClosed(1, 45).boxed().collect(Collectors.toList());; + private static final List LOTTO_NO_POOLS = IntStream.rangeClosed(1, 45).boxed().collect(Collectors.toList()); + ; public static Lotto generateLottoWithNos(List lottoNos) { - // TODO 숫자가 1 ~ 45 범위에 있지 않으면 에러 return new Lotto(lottoNos); } diff --git a/src/main/java/domain/Main.java b/src/main/java/domain/Main.java index 89d57c6..c6963e2 100644 --- a/src/main/java/domain/Main.java +++ b/src/main/java/domain/Main.java @@ -2,9 +2,6 @@ import view.InputView; import view.OutputView; -import view.ViewException; - -import java.util.InputMismatchException; import java.util.List; import java.util.Scanner; diff --git a/src/main/java/domain/WinningNos.java b/src/main/java/domain/WinningNos.java index 35a5670..e56f5b4 100644 --- a/src/main/java/domain/WinningNos.java +++ b/src/main/java/domain/WinningNos.java @@ -6,6 +6,7 @@ public class WinningNos { private List winningNos; private LottoNo bonusNo; + public WinningNos(List winningNos, int bonusNo) { this.winningNos = winningNos.stream().map(number -> new LottoNo(number)) .collect(Collectors.toList()); diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 1845378..073bd06 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -7,7 +7,7 @@ import java.util.stream.Stream; public class InputView { - public static int askPayment(Scanner scanner) throws ViewException{ + public static int askPayment(Scanner scanner) throws ViewException { System.out.println("구입금액을 입력해 주세요."); int payment = scanner.nextInt(); InputValidation.validatePayment(payment); @@ -49,7 +49,7 @@ public static List askWinningNos(Scanner scanner) throws ViewException return winningNos; } - public static int askBonusNo(Scanner scanner) throws ViewException{ + public static int askBonusNo(Scanner scanner) throws ViewException { System.out.println("보너스 볼을 입력해 주세요."); int bonusNo = scanner.nextInt(); InputValidation.validateNoRange(bonusNo); diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 41c4b4d..a349649 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -39,7 +39,7 @@ private static void showWRanks(LottoAnalyzer lottoAnalyzer) { System.out.println("---------"); List prize = Stream.of(Rank.values()).collect(Collectors.toList()); prize.remove(Rank.MISS); - for (int i = prize.size() - 1; i >= 0 ; i--) { + for (int i = prize.size() - 1; i >= 0; i--) { int count = lottoAnalyzer.countRank(prize.get(i)); showRankCount(prize.get(i), count); } From d3f38c2b988728ad3b570e5dfaf31c8f773e598f Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 02:56:30 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/{domain => lottodomain}/Lotto.java | 2 +- .../java/{domain => lottodomain}/LottoAnalyzer.java | 2 +- src/main/java/{domain => lottodomain}/LottoGame.java | 2 +- .../java/{domain => lottodomain}/LottoGenerator.java | 2 +- src/main/java/{domain => lottodomain}/LottoNo.java | 2 +- src/main/java/{domain => lottodomain}/Main.java | 6 +++--- src/main/java/{domain => lottodomain}/Rank.java | 2 +- .../java/{domain => lottodomain}/WinningLotto.java | 2 +- src/main/java/{domain => lottodomain}/WinningNos.java | 2 +- src/main/java/{view => lottoview}/InputValidation.java | 2 +- src/main/java/{view => lottoview}/InputView.java | 2 +- src/main/java/{view => lottoview}/OutputView.java | 10 +++++----- src/main/java/{view => lottoview}/ViewException.java | 2 +- .../{domain => lottodomain}/LottoAnalyzerTest.java | 2 +- .../java/{domain => lottodomain}/LottoGameTest.java | 2 +- .../{domain => lottodomain}/LottoGeneratorTest.java | 2 +- src/test/java/{domain => lottodomain}/LottoTest.java | 2 +- src/test/java/{domain => lottodomain}/RankTest.java | 2 +- .../java/{domain => lottodomain}/WinningNosTest.java | 2 +- 19 files changed, 25 insertions(+), 25 deletions(-) rename src/main/java/{domain => lottodomain}/Lotto.java (97%) rename src/main/java/{domain => lottodomain}/LottoAnalyzer.java (98%) rename src/main/java/{domain => lottodomain}/LottoGame.java (98%) rename src/main/java/{domain => lottodomain}/LottoGenerator.java (96%) rename src/main/java/{domain => lottodomain}/LottoNo.java (95%) rename src/main/java/{domain => lottodomain}/Main.java (92%) rename src/main/java/{domain => lottodomain}/Rank.java (98%) rename src/main/java/{domain => lottodomain}/WinningLotto.java (95%) rename src/main/java/{domain => lottodomain}/WinningNos.java (96%) rename src/main/java/{view => lottoview}/InputValidation.java (98%) rename src/main/java/{view => lottoview}/InputView.java (99%) rename src/main/java/{view => lottoview}/OutputView.java (92%) rename src/main/java/{view => lottoview}/ViewException.java (90%) rename src/test/java/{domain => lottodomain}/LottoAnalyzerTest.java (98%) rename src/test/java/{domain => lottodomain}/LottoGameTest.java (98%) rename src/test/java/{domain => lottodomain}/LottoGeneratorTest.java (97%) rename src/test/java/{domain => lottodomain}/LottoTest.java (98%) rename src/test/java/{domain => lottodomain}/RankTest.java (95%) rename src/test/java/{domain => lottodomain}/WinningNosTest.java (98%) diff --git a/src/main/java/domain/Lotto.java b/src/main/java/lottodomain/Lotto.java similarity index 97% rename from src/main/java/domain/Lotto.java rename to src/main/java/lottodomain/Lotto.java index 0074002..0fdac74 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/lottodomain/Lotto.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.List; import java.util.Objects; diff --git a/src/main/java/domain/LottoAnalyzer.java b/src/main/java/lottodomain/LottoAnalyzer.java similarity index 98% rename from src/main/java/domain/LottoAnalyzer.java rename to src/main/java/lottodomain/LottoAnalyzer.java index e59b552..2130f92 100644 --- a/src/main/java/domain/LottoAnalyzer.java +++ b/src/main/java/lottodomain/LottoAnalyzer.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/domain/LottoGame.java b/src/main/java/lottodomain/LottoGame.java similarity index 98% rename from src/main/java/domain/LottoGame.java rename to src/main/java/lottodomain/LottoGame.java index c35d0cc..9c15648 100644 --- a/src/main/java/domain/LottoGame.java +++ b/src/main/java/lottodomain/LottoGame.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/lottodomain/LottoGenerator.java similarity index 96% rename from src/main/java/domain/LottoGenerator.java rename to src/main/java/lottodomain/LottoGenerator.java index 4c12047..e28d837 100644 --- a/src/main/java/domain/LottoGenerator.java +++ b/src/main/java/lottodomain/LottoGenerator.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.Collections; import java.util.List; diff --git a/src/main/java/domain/LottoNo.java b/src/main/java/lottodomain/LottoNo.java similarity index 95% rename from src/main/java/domain/LottoNo.java rename to src/main/java/lottodomain/LottoNo.java index 5a8318d..30bc5a8 100644 --- a/src/main/java/domain/LottoNo.java +++ b/src/main/java/lottodomain/LottoNo.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; public class LottoNo { private Integer value; diff --git a/src/main/java/domain/Main.java b/src/main/java/lottodomain/Main.java similarity index 92% rename from src/main/java/domain/Main.java rename to src/main/java/lottodomain/Main.java index c6963e2..3e496b9 100644 --- a/src/main/java/domain/Main.java +++ b/src/main/java/lottodomain/Main.java @@ -1,7 +1,7 @@ -package domain; +package lottodomain; -import view.InputView; -import view.OutputView; +import lottoview.InputView; +import lottoview.OutputView; import java.util.List; import java.util.Scanner; diff --git a/src/main/java/domain/Rank.java b/src/main/java/lottodomain/Rank.java similarity index 98% rename from src/main/java/domain/Rank.java rename to src/main/java/lottodomain/Rank.java index 3957fc0..0d9437b 100644 --- a/src/main/java/domain/Rank.java +++ b/src/main/java/lottodomain/Rank.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.*; import java.util.function.Function; diff --git a/src/main/java/domain/WinningLotto.java b/src/main/java/lottodomain/WinningLotto.java similarity index 95% rename from src/main/java/domain/WinningLotto.java rename to src/main/java/lottodomain/WinningLotto.java index 60a50df..0932994 100644 --- a/src/main/java/domain/WinningLotto.java +++ b/src/main/java/lottodomain/WinningLotto.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.List; diff --git a/src/main/java/domain/WinningNos.java b/src/main/java/lottodomain/WinningNos.java similarity index 96% rename from src/main/java/domain/WinningNos.java rename to src/main/java/lottodomain/WinningNos.java index e56f5b4..0bf18ee 100644 --- a/src/main/java/domain/WinningNos.java +++ b/src/main/java/lottodomain/WinningNos.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/view/InputValidation.java b/src/main/java/lottoview/InputValidation.java similarity index 98% rename from src/main/java/view/InputValidation.java rename to src/main/java/lottoview/InputValidation.java index 6b5a121..66a6a1a 100644 --- a/src/main/java/view/InputValidation.java +++ b/src/main/java/lottoview/InputValidation.java @@ -1,4 +1,4 @@ -package view; +package lottoview; import java.util.List; diff --git a/src/main/java/view/InputView.java b/src/main/java/lottoview/InputView.java similarity index 99% rename from src/main/java/view/InputView.java rename to src/main/java/lottoview/InputView.java index 073bd06..7db0e62 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/lottoview/InputView.java @@ -1,4 +1,4 @@ -package view; +package lottoview; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/view/OutputView.java b/src/main/java/lottoview/OutputView.java similarity index 92% rename from src/main/java/view/OutputView.java rename to src/main/java/lottoview/OutputView.java index a349649..00126f9 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/lottoview/OutputView.java @@ -1,9 +1,9 @@ -package view; +package lottoview; -import domain.Lotto; -import domain.LottoAnalyzer; -import domain.LottoNo; -import domain.Rank; +import lottodomain.Lotto; +import lottodomain.LottoAnalyzer; +import lottodomain.LottoNo; +import lottodomain.Rank; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/view/ViewException.java b/src/main/java/lottoview/ViewException.java similarity index 90% rename from src/main/java/view/ViewException.java rename to src/main/java/lottoview/ViewException.java index 2922714..f46bacb 100644 --- a/src/main/java/view/ViewException.java +++ b/src/main/java/lottoview/ViewException.java @@ -1,4 +1,4 @@ -package view; +package lottoview; public class ViewException extends Exception { ViewException() { diff --git a/src/test/java/domain/LottoAnalyzerTest.java b/src/test/java/lottodomain/LottoAnalyzerTest.java similarity index 98% rename from src/test/java/domain/LottoAnalyzerTest.java rename to src/test/java/lottodomain/LottoAnalyzerTest.java index 824ca8c..e1b8186 100644 --- a/src/test/java/domain/LottoAnalyzerTest.java +++ b/src/test/java/lottodomain/LottoAnalyzerTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.After; import org.junit.Before; diff --git a/src/test/java/domain/LottoGameTest.java b/src/test/java/lottodomain/LottoGameTest.java similarity index 98% rename from src/test/java/domain/LottoGameTest.java rename to src/test/java/lottodomain/LottoGameTest.java index 0603767..1c8977a 100644 --- a/src/test/java/domain/LottoGameTest.java +++ b/src/test/java/lottodomain/LottoGameTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.After; import org.junit.Before; diff --git a/src/test/java/domain/LottoGeneratorTest.java b/src/test/java/lottodomain/LottoGeneratorTest.java similarity index 97% rename from src/test/java/domain/LottoGeneratorTest.java rename to src/test/java/lottodomain/LottoGeneratorTest.java index 266028e..d8d55d1 100644 --- a/src/test/java/domain/LottoGeneratorTest.java +++ b/src/test/java/lottodomain/LottoGeneratorTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.After; import org.junit.Before; diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/lottodomain/LottoTest.java similarity index 98% rename from src/test/java/domain/LottoTest.java rename to src/test/java/lottodomain/LottoTest.java index 10c5a2d..8e90bbf 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/lottodomain/LottoTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.After; import org.junit.Before; diff --git a/src/test/java/domain/RankTest.java b/src/test/java/lottodomain/RankTest.java similarity index 95% rename from src/test/java/domain/RankTest.java rename to src/test/java/lottodomain/RankTest.java index 98ba528..1185432 100644 --- a/src/test/java/domain/RankTest.java +++ b/src/test/java/lottodomain/RankTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.Test; diff --git a/src/test/java/domain/WinningNosTest.java b/src/test/java/lottodomain/WinningNosTest.java similarity index 98% rename from src/test/java/domain/WinningNosTest.java rename to src/test/java/lottodomain/WinningNosTest.java index ab400b8..7a8a4eb 100644 --- a/src/test/java/domain/WinningNosTest.java +++ b/src/test/java/lottodomain/WinningNosTest.java @@ -1,4 +1,4 @@ -package domain; +package lottodomain; import org.junit.After; import org.junit.Before; From 6ff70bb931182d4d0005bb82ce3cc00df96e19e6 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 03:16:27 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=A0=9C=EA=B1=B0,=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=B2=88=ED=98=B8=20sort=ED=95=98=EC=97=AC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lottodomain/Lotto.java | 2 ++ src/main/java/lottoview/InputValidation.java | 6 +++--- src/main/java/lottoview/OutputView.java | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/lottodomain/Lotto.java b/src/main/java/lottodomain/Lotto.java index 0fdac74..aeb1ff7 100644 --- a/src/main/java/lottodomain/Lotto.java +++ b/src/main/java/lottodomain/Lotto.java @@ -1,5 +1,6 @@ package lottodomain; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -8,6 +9,7 @@ public class Lotto { private List lottoNos; public Lotto(List lottoNos) { + Collections.sort(lottoNos); this.lottoNos = lottoNos.stream().map(number -> new LottoNo(number)).collect(Collectors.toList()); } diff --git a/src/main/java/lottoview/InputValidation.java b/src/main/java/lottoview/InputValidation.java index 66a6a1a..fb57c76 100644 --- a/src/main/java/lottoview/InputValidation.java +++ b/src/main/java/lottoview/InputValidation.java @@ -6,9 +6,9 @@ public class InputValidation { private final static int NUMBER_OF_LOTTO_NOS = 6; public static void validatePayment(int payment) throws ViewException { -// if (payment < 1000) { -// throw new ViewException("[ViewException] 구입금액은 1000원 이상이어야 합니다"); -// } + if (payment < 1000) { + throw new ViewException("[ViewException] 구입금액은 1000원 이상이어야 합니다"); + } if (payment % 1000 != 0) { throw new ViewException("[ViewException] 구입금액은 1000원단위로 입력해주세요"); } diff --git a/src/main/java/lottoview/OutputView.java b/src/main/java/lottoview/OutputView.java index 00126f9..5bde91c 100644 --- a/src/main/java/lottoview/OutputView.java +++ b/src/main/java/lottoview/OutputView.java @@ -5,6 +5,7 @@ import lottodomain.LottoNo; import lottodomain.Rank; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -17,7 +18,8 @@ public static void showAllLottos(List allLotto, int numberOfManualLottos) } public static void showLotto(Lotto lotto) { - System.out.println(lotto.getLottoNos().stream().map(LottoNo::getValue).map(number -> number.toString()) + List lottoNos = lotto.getLottoNos(); + System.out.println(lottoNos.stream().map(LottoNo::getValue).map(number -> number.toString()) .collect(Collectors.joining(", ", "[", "]"))); } From 30881402f63059e8e5f2eabff1b7b6755d1a8872 Mon Sep 17 00:00:00 2001 From: Seoyoung Kim <48192106+vvvpiano@users.noreply.github.com> Date: Fri, 4 Sep 2020 21:38:26 +0900 Subject: [PATCH 9/9] =?UTF-8?q?InputValidation=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lottoview/InputValidation.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/lottoview/InputValidation.java b/src/main/java/lottoview/InputValidation.java index fb57c76..00dc04d 100644 --- a/src/main/java/lottoview/InputValidation.java +++ b/src/main/java/lottoview/InputValidation.java @@ -4,12 +4,13 @@ public class InputValidation { private final static int NUMBER_OF_LOTTO_NOS = 6; + private final static int PRICE_PER_LOTTO = 1000; public static void validatePayment(int payment) throws ViewException { - if (payment < 1000) { + if (payment < PRICE_PER_LOTTO) { throw new ViewException("[ViewException] 구입금액은 1000원 이상이어야 합니다"); } - if (payment % 1000 != 0) { + if (payment % PRICE_PER_LOTTO != 0) { throw new ViewException("[ViewException] 구입금액은 1000원단위로 입력해주세요"); } }