From 275f06100fe4f58dbcc5eb976e3eb9bf2f628d2d Mon Sep 17 00:00:00 2001 From: mia6111 Date: Thu, 5 Jul 2018 14:07:47 +0900 Subject: [PATCH 1/6] Lotto testcode --- src/test/java/TestCaseTest.java | 44 +++++++++++++++ src/test/java/lotto/LottoTest.java | 87 ++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 src/test/java/TestCaseTest.java create mode 100644 src/test/java/lotto/LottoTest.java diff --git a/src/test/java/TestCaseTest.java b/src/test/java/TestCaseTest.java new file mode 100644 index 0000000..995afe8 --- /dev/null +++ b/src/test/java/TestCaseTest.java @@ -0,0 +1,44 @@ +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.*; +public class TestCaseTest { + class TestOutput{ + private String prop1; + private int prop2; + + TestOutput(String prop1, int prop2){ + this.prop1 = prop1; + this.prop2 = prop2; + } + } + List outputList; + String[] outputArr; + TestOutput outputBean; + + String outputStr; + int outputInt; + + String nullObj; + + @Before + public void setUp(){ + nullObj = null; + outputStr = "ABC"; + outputInt = 1; + outputList = new List(); + outputList.add("A-B1"); + outputList.add("A-B2"); + outputList.add("A-B3"); + outputArr = new String[]{"A-B1", "A-B2", "A-B3"}; + outputBean = new TestOutput(outputStr, outputInt); + + } + + @Test + public void contains(){ + assertThat("A-B1").isIn(outputList).contains("A-B2", "A-B3").contains; + } +} diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java new file mode 100644 index 0000000..9ef2b07 --- /dev/null +++ b/src/test/java/lotto/LottoTest.java @@ -0,0 +1,87 @@ +package lotto; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; + +import static junit.framework.TestCase.assertEquals; + +public class LottoTest { + List lottoes; + Lotto singleLotto; + @Before + public void setUp(){ + LottoFactory lottoFactory = new LottoFactory(); + singleLotto = new Lotto(); + } + @Test + public void 로또구입금액딱맞음(){ + + lottoes = lottoFactory.createLotto(5*1000); + assertEquals(5, lottoes.size()); + } + public void 로또구입금액잔액있음(){ + + lottoes = lottoFactory.createLotto(5*1000); + assertEquals(5, lottoes.size()); + } + public void 로또구입금액음수(){ + + lottoes = lottoFactory.createLotto(5*1000); + assertEquals(5, lottoes.size()); + } + public void 로또구입금액그냥돈없음(){ + + lottoes = lottoFactory.createLotto(5*1000); + assertEquals(5, lottoes.size()); + } + @Test + public void 번호자동생성(){ + singleLotto.generateNum(); + } + @Test + public void 번호정렬Collections(){ + singleLotto.sortNum(); + } + @Test + public void 입력로또번호검증성공케이스(){ + + } + @Test + public void 입력로또번호중복(){ + + } + @Test + public void 입력로또번호갯수안맞음(){ + + } + @Test + public void 입력로또번호아님(){ + + } + @Test + public void 당첨상황확인3개당첨(){ + assertEquals(3, compareNum(sucesses, origin)); + } + @Test + public void 당첨상황확인4개당첨(){ + assertEquals(4, compareNum(sucesses, origin)); + } + @Test + public void 당첨상황확인5개당첨(){ + assertEquals(5, compareNum(sucesses, origin)); + } + @Test + public void 당첨상황확인6개당첨(){ + assertEquals(6, compareNum(sucesses, origin)); + } + @Test + public void 당첨상황확미당첨(){ + assertTrue(3 > compareNum(sucesses, origin)); + } + @Test + public void 수익률계산() { + assertEquals(exptected, calculateRate(lottoResults,money)); + } +} From 90a7ced4ace9f01e8a2a547ee50b30769cc5eb55 Mon Sep 17 00:00:00 2001 From: mia6111 Date: Thu, 5 Jul 2018 19:15:32 +0900 Subject: [PATCH 2/6] Lotto ver1 --- src/test/java/lotto/LottoTest.java | 118 ++++++++++++++++++----------- 1 file changed, 74 insertions(+), 44 deletions(-) diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 9ef2b07..a37bd89 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -1,87 +1,117 @@ package lotto; +import org.assertj.core.api.SoftAssertions; import org.junit.Before; import org.junit.Test; -import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import static junit.framework.TestCase.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; public class LottoTest { List lottoes; Lotto singleLotto; + LottoFactory lottoFactory; + @Before public void setUp(){ - LottoFactory lottoFactory = new LottoFactory(); + lottoFactory = new LottoFactory(); singleLotto = new Lotto(); } @Test + public void 로또갯수(){ + assertThat(lottoFactory.maxLottoToBuy(5*1000)).isEqualTo(5); + } + @Test public void 로또구입금액딱맞음(){ lottoes = lottoFactory.createLotto(5*1000); assertEquals(5, lottoes.size()); } + @Test public void 로또구입금액잔액있음(){ - lottoes = lottoFactory.createLotto(5*1000); + lottoes = lottoFactory.createLotto(5*1000+300); assertEquals(5, lottoes.size()); } + @Test public void 로또구입금액음수(){ - lottoes = lottoFactory.createLotto(5*1000); - assertEquals(5, lottoes.size()); + lottoes = lottoFactory.createLotto(-10); + assertEquals(0, lottoes.size()); } + @Test public void 로또구입금액그냥돈없음(){ - - lottoes = lottoFactory.createLotto(5*1000); - assertEquals(5, lottoes.size()); + lottoes = lottoFactory.createLotto(10); + assertEquals(0, lottoes.size()); } - @Test - public void 번호자동생성(){ - singleLotto.generateNum(); + @Test(expected = IllegalArgumentException.class) + public void 음수금액입력(){ + new Money(-100); } @Test - public void 번호정렬Collections(){ - singleLotto.sortNum(); + public void 번호자동생성갯수확인(){ + assertThat(LottoGenerator.generateNum()).hasSize(6); } @Test public void 입력로또번호검증성공케이스(){ - + final String expectedInput = "1, 2, 3, 4, 5, 6"; + SoftAssertions assertions = new SoftAssertions(); + assertions.assertThat(HitNumber.isValid(expectedInput)) + .as("정상 케이스").isTrue(); + assertions.assertThat(HitNumber.isValid("1, 2, 3, 4, 5, 0")) + .as("1보다 작은 애").isFalse(); + assertions.assertThat(HitNumber.isValid("1, 2, 3, 4, 5, 46")) + .as("45 넘는 애").isFalse(); + assertions.assertThat(HitNumber.isValid("1, 2, 3")) + .as("숫자 여섯 개 아닐 떄").isFalse(); + assertions.assertThat(HitNumber.isValid("1, b, 3, 4, 5, 6")) + .as("숫자 자리에 문자일 때").isFalse(); + assertions.assertAll(); } @Test - public void 입력로또번호중복(){ - + public void 당첨상황확인() { + HitNumber hitMaker = new HitNumber("1, 2, 3, 4, 5, 6"); + List hitNumbers = hitMaker.getNumbers(); + SoftAssertions assertions = new SoftAssertions(); + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,11,12,13), hitNumbers)) + .as("3개케이스").isEqualTo(3); + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,11,12), hitNumbers)) + .as("4개케이스").isEqualTo(4); + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,5,11), hitNumbers)) + .as("5개케이스").isEqualTo(5); + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,5,6), hitNumbers)) + .as("6개케이스").isEqualTo(6); + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,13,14,15,16), hitNumbers)) + .as("미당첨케이스").isLessThan(3); + assertions.assertAll(); } - @Test - public void 입력로또번호갯수안맞음(){ - } - @Test - public void 입력로또번호아님(){ - - } - @Test - public void 당첨상황확인3개당첨(){ - assertEquals(3, compareNum(sucesses, origin)); - } - @Test - public void 당첨상황확인4개당첨(){ - assertEquals(4, compareNum(sucesses, origin)); - } - @Test - public void 당첨상황확인5개당첨(){ - assertEquals(5, compareNum(sucesses, origin)); - } - @Test - public void 당첨상황확인6개당첨(){ - assertEquals(6, compareNum(sucesses, origin)); - } - @Test - public void 당첨상황확미당첨(){ - assertTrue(3 > compareNum(sucesses, origin)); - } @Test public void 수익률계산() { - assertEquals(exptected, calculateRate(lottoResults,money)); + double expected_1 = 250; + double expected_2 = 35.7; + List target_1 = Arrays.asList(3, 0); + Integer[] arr_target_2 = new Integer[14]; + for(int i=0;i target_2 = Arrays.asList(arr_target_2); + + SoftAssertions assertions = new SoftAssertions(); + + + assertions.assertThat(A.calculateTemplate(target_1)) + .as("2개 중 3 등 하나") + .isEqualTo(expected_1); + + assertions.assertThat(A.calculateTemplate(target_2)) + .as("14개 중 3 등 하나") + .isEqualTo(expected_2); + + assertions.assertAll(); } } From e0b87d57c60c737b41c88b435b5fda4c2f047cd7 Mon Sep 17 00:00:00 2001 From: mia6111 Date: Thu, 5 Jul 2018 19:20:25 +0900 Subject: [PATCH 3/6] lotto all files --- build.gradle | 1 + src/main/java/Todo.md | 19 ++++++ src/main/java/lotto/A.java | 87 +++++++++++++++++++++++++ src/main/java/lotto/HitNumber.java | 50 ++++++++++++++ src/main/java/lotto/Lotto.java | 27 ++++++++ src/main/java/lotto/LottoFactory.java | 23 +++++++ src/main/java/lotto/LottoGenerator.java | 23 +++++++ src/main/java/lotto/Money.java | 16 +++++ src/test/java/TestCaseTest.java | 5 +- 9 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Todo.md create mode 100644 src/main/java/lotto/A.java create mode 100644 src/main/java/lotto/HitNumber.java create mode 100644 src/main/java/lotto/Lotto.java create mode 100644 src/main/java/lotto/LottoFactory.java create mode 100644 src/main/java/lotto/LottoGenerator.java create mode 100644 src/main/java/lotto/Money.java diff --git a/build.gradle b/build.gradle index 531750c..6174c60 100644 --- a/build.gradle +++ b/build.gradle @@ -11,5 +11,6 @@ repositories { dependencies { compile('ch.qos.logback:logback-classic:1.2.3') testCompile('junit:junit:4.12') + //testCompile('harcrest-all:org.hamcrest.hamcrest-all:1.3') testCompile('org.assertj:assertj-core:3.9.0') } \ No newline at end of file diff --git a/src/main/java/Todo.md b/src/main/java/Todo.md new file mode 100644 index 0000000..8fd5539 --- /dev/null +++ b/src/main/java/Todo.md @@ -0,0 +1,19 @@ +## Todo List + +- 금액 입력받기 +- 금액에 맞는 로또 구입하기 + done +- 각 로또에 맞는 번호 자동생성 + - 숫자는 1 ~ 45 랜덤값 + done +- 구입한 로또번호 출력 + - 정렬하여 출력 + +- 잔액은 상점이 갖는다. 최대 구입가능한 로또만 구입함. + done + +- 당첨될 로또번호 6개 입력 +- 구매한 로또들의 당첨상황 확인 +- 수익률 계산 +- 당첨상황 및 수익률 출력 +- \ No newline at end of file diff --git a/src/main/java/lotto/A.java b/src/main/java/lotto/A.java new file mode 100644 index 0000000..c231248 --- /dev/null +++ b/src/main/java/lotto/A.java @@ -0,0 +1,87 @@ +package lotto; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class A { + static final int LOTTO_MONEY = 1000; + static Map resultAwardMap; + enum LOTTO_AWARDS{ + BASIC(5000, 50000, 1500000, 2000000000); + + private int three_correct; + private int four_correct; + private int five_correct; + private int six_correct; + LOTTO_AWARDS(int three_correct, int four_correct, int five_correct, int six_correct){ + this.three_correct = three_correct; + this.four_correct = four_correct; + this.five_correct = five_correct; + this.six_correct = six_correct; + } + + public int getThree_correct() { + return three_correct; + } + + public int getFour_correct() { + return four_correct; + } + + public int getFive_correct() { + return five_correct; + } + + public int getSix_correct() { + return six_correct; + } + } + static{ + LOTTO_AWARDS basicAwards = LOTTO_AWARDS.BASIC; + resultAwardMap = new HashMap(); + resultAwardMap.put(3, basicAwards.getThree_correct()); + resultAwardMap.put(4, basicAwards.getFour_correct()); + resultAwardMap.put(5, basicAwards.getFive_correct()); + resultAwardMap.put(6, basicAwards.getSix_correct()); + } + +// +// public static void 당첨상황호출(int money){ +// HitNumber hitNumber = new HitNumber(); +// List lottoes = new LottoFactory().createLotto(money); +// StringBuffer result = new StringBuffer(); +// for(Lotto lotto : lottoes){ +// lotto.compareLotto(hitNumber); +// } +// } + + + public static double calculateBenefitRate(List lottoes, HitNumber hitNumber){ + List lottoResults = calculateResults(lottoes, hitNumber); + return calculateTemplate(lottoResults); + } + + public static double calculateTemplate(List lottoResults){ + double sum = 0; + for(int result : lottoResults){ + if(resultAwardMap.containsKey(result)) + sum += resultAwardMap.get(result); + } + return userFloor(sum/(lottoResults.size()*LOTTO_MONEY)*100); + } + + public static double userFloor(double target){ + int intTarget = (int)(target * 10); + return intTarget/10.0; + } + + static List calculateResults(List lottoes, HitNumber hitNumber){ + List results = new ArrayList(); + for(Lotto lotto : lottoes){ + results.add( lotto.compareLotto(hitNumber) ); + } + return results; + } +} diff --git a/src/main/java/lotto/HitNumber.java b/src/main/java/lotto/HitNumber.java new file mode 100644 index 0000000..e319557 --- /dev/null +++ b/src/main/java/lotto/HitNumber.java @@ -0,0 +1,50 @@ +package lotto; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class HitNumber { + final List hitNumbers; + static final String DELIMITER = ", "; + public HitNumber(String inputNumber){ + if(!isValid(inputNumber)) + throw new IllegalArgumentException(); + hitNumbers = Collections.unmodifiableList( + toIntList(split(inputNumber, DELIMITER))); + } + public List getNumbers(){ + return hitNumbers;//Arrays.asList(new Integer[]{1,2,3,4,5,6}); + } + + public static String[] split(String input, String delimiter){ + return input.split(delimiter); + } + public static List toIntList(String[] inputStr){ + return Arrays.asList(inputStr).stream().map(e -> toInt(e)).collect(Collectors.toList()); + + } + public static boolean isValid(String answer) { + String[] numbers = split(answer, DELIMITER); + return Arrays.asList(numbers) + .stream() + .allMatch(e -> isValidLotto(e)) && numbers.length == 6; + } + + public static boolean isValidLotto(String number) { + int num = 0; + try { + num = toInt(number); + } catch (Exception e) { + return false; + } + if (num > 45 || num < 1) return false; + + return true; + } + + public static int toInt(String number) { + return Integer.parseInt(number); + } +} diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java new file mode 100644 index 0000000..ccf7780 --- /dev/null +++ b/src/main/java/lotto/Lotto.java @@ -0,0 +1,27 @@ +package lotto; + +import java.util.*; + +public class Lotto { + private List lottoNumbers; + + public Lotto() { + lottoNumbers = LottoGenerator.generateNum(); + } + + public int compareLotto(HitNumber hitNumber){ + return compareNumList(lottoNumbers, hitNumber.getNumbers()); + } + + public static int compareNumList(List lottoNumbers, List hitNumbers) { + int hitCount = 0; + for (int i = 0; i < lottoNumbers.size(); i++) { + hitCount += hitNumbers.contains(lottoNumbers.get(i)) ? 1 : 0; + } + return hitCount; + } + private List sortLottoNumbers(List lottoNumbers) { + Collections.sort(lottoNumbers); + return lottoNumbers; + } +} \ No newline at end of file diff --git a/src/main/java/lotto/LottoFactory.java b/src/main/java/lotto/LottoFactory.java new file mode 100644 index 0000000..5d8abc8 --- /dev/null +++ b/src/main/java/lotto/LottoFactory.java @@ -0,0 +1,23 @@ +package lotto; + +import java.util.ArrayList; +import java.util.List; + +public class LottoFactory { + static final int LOTTO_PRICE = 1000; + + public List createLotto(int money) { + List newLottoes = new ArrayList(); + for (int i = 0; i < maxLottoToBuy(money); i++) { + newLottoes.add(new Lotto()); + } + return newLottoes; + } + + int maxLottoToBuy(int money) { + if (money < LOTTO_PRICE) { + return 0; + } + return money / LOTTO_PRICE; + } +} diff --git a/src/main/java/lotto/LottoGenerator.java b/src/main/java/lotto/LottoGenerator.java new file mode 100644 index 0000000..0c033d5 --- /dev/null +++ b/src/main/java/lotto/LottoGenerator.java @@ -0,0 +1,23 @@ +package lotto; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class LottoGenerator { + static final int LOTTO_NUM = 6; + static List validNumberSet; + + static { + validNumberSet = new ArrayList(); + for (int i = 0; i < 45; i++) { + validNumberSet.add(i + 1); + } + } + + public static List generateNum() { + Collections.shuffle(validNumberSet); + return validNumberSet.subList(0, 6); + + } +} diff --git a/src/main/java/lotto/Money.java b/src/main/java/lotto/Money.java new file mode 100644 index 0000000..3746588 --- /dev/null +++ b/src/main/java/lotto/Money.java @@ -0,0 +1,16 @@ +package lotto; + +public class Money { + private int money; + + public Money(int money) { + if (money < 0) { + throw new IllegalArgumentException(); + } + this.money = money; + } + + public int getMoney() { + return money; + } +} diff --git a/src/test/java/TestCaseTest.java b/src/test/java/TestCaseTest.java index 995afe8..19d35a1 100644 --- a/src/test/java/TestCaseTest.java +++ b/src/test/java/TestCaseTest.java @@ -1,6 +1,7 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.*; @@ -28,7 +29,7 @@ public void setUp(){ nullObj = null; outputStr = "ABC"; outputInt = 1; - outputList = new List(); + outputList = new ArrayList(); outputList.add("A-B1"); outputList.add("A-B2"); outputList.add("A-B3"); @@ -39,6 +40,6 @@ public void setUp(){ @Test public void contains(){ - assertThat("A-B1").isIn(outputList).contains("A-B2", "A-B3").contains; + assertThat("A-B1").isIn(outputList).contains("A-B2", "A-B3"); } } From a00f1f56ac62be7ed84b7284cd91fd542dd4e5b0 Mon Sep 17 00:00:00 2001 From: mia6111 Date: Thu, 5 Jul 2018 21:41:23 +0900 Subject: [PATCH 4/6] functional done --- src/main/java/Todo.md | 11 ++- src/main/java/lotto/A.java | 87 ------------------- src/main/java/lotto/HitNumber.java | 14 +-- src/main/java/lotto/InputUI.java | 28 ++++++ src/main/java/lotto/Lotto.java | 11 ++- src/main/java/lotto/LottoClient.java | 109 ++++++++++++++++++++++++ src/main/java/lotto/LottoFactory.java | 11 +-- src/main/java/lotto/LottoGenerator.java | 8 +- src/main/java/lotto/ResultUI.java | 31 +++++++ src/test/java/TestCaseTest.java | 12 +-- src/test/java/lotto/LottoTest.java | 64 +++++++------- 11 files changed, 242 insertions(+), 144 deletions(-) delete mode 100644 src/main/java/lotto/A.java create mode 100644 src/main/java/lotto/InputUI.java create mode 100644 src/main/java/lotto/LottoClient.java create mode 100644 src/main/java/lotto/ResultUI.java diff --git a/src/main/java/Todo.md b/src/main/java/Todo.md index 8fd5539..92884f5 100644 --- a/src/main/java/Todo.md +++ b/src/main/java/Todo.md @@ -16,4 +16,13 @@ - 구매한 로또들의 당첨상황 확인 - 수익률 계산 - 당첨상황 및 수익률 출력 -- \ No newline at end of file + + +## Todo List +1. LottoClient 메소드 + +- 1) 로또결과 (로또 객체와 완전 상관없는 부분) 따로 빼고 클라이언트에서 호출 +- 2) 로또를 정하는 객체(힛넘버, 머니)와 당첨번호를 정하는 객체 분리 X +- 3) 네이밍 +- 4) 유틸 +- 5) 패키지 + 접근 제어자 \ No newline at end of file diff --git a/src/main/java/lotto/A.java b/src/main/java/lotto/A.java deleted file mode 100644 index c231248..0000000 --- a/src/main/java/lotto/A.java +++ /dev/null @@ -1,87 +0,0 @@ -package lotto; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class A { - static final int LOTTO_MONEY = 1000; - static Map resultAwardMap; - enum LOTTO_AWARDS{ - BASIC(5000, 50000, 1500000, 2000000000); - - private int three_correct; - private int four_correct; - private int five_correct; - private int six_correct; - LOTTO_AWARDS(int three_correct, int four_correct, int five_correct, int six_correct){ - this.three_correct = three_correct; - this.four_correct = four_correct; - this.five_correct = five_correct; - this.six_correct = six_correct; - } - - public int getThree_correct() { - return three_correct; - } - - public int getFour_correct() { - return four_correct; - } - - public int getFive_correct() { - return five_correct; - } - - public int getSix_correct() { - return six_correct; - } - } - static{ - LOTTO_AWARDS basicAwards = LOTTO_AWARDS.BASIC; - resultAwardMap = new HashMap(); - resultAwardMap.put(3, basicAwards.getThree_correct()); - resultAwardMap.put(4, basicAwards.getFour_correct()); - resultAwardMap.put(5, basicAwards.getFive_correct()); - resultAwardMap.put(6, basicAwards.getSix_correct()); - } - -// -// public static void 당첨상황호출(int money){ -// HitNumber hitNumber = new HitNumber(); -// List lottoes = new LottoFactory().createLotto(money); -// StringBuffer result = new StringBuffer(); -// for(Lotto lotto : lottoes){ -// lotto.compareLotto(hitNumber); -// } -// } - - - public static double calculateBenefitRate(List lottoes, HitNumber hitNumber){ - List lottoResults = calculateResults(lottoes, hitNumber); - return calculateTemplate(lottoResults); - } - - public static double calculateTemplate(List lottoResults){ - double sum = 0; - for(int result : lottoResults){ - if(resultAwardMap.containsKey(result)) - sum += resultAwardMap.get(result); - } - return userFloor(sum/(lottoResults.size()*LOTTO_MONEY)*100); - } - - public static double userFloor(double target){ - int intTarget = (int)(target * 10); - return intTarget/10.0; - } - - static List calculateResults(List lottoes, HitNumber hitNumber){ - List results = new ArrayList(); - for(Lotto lotto : lottoes){ - results.add( lotto.compareLotto(hitNumber) ); - } - return results; - } -} diff --git a/src/main/java/lotto/HitNumber.java b/src/main/java/lotto/HitNumber.java index e319557..8045de2 100644 --- a/src/main/java/lotto/HitNumber.java +++ b/src/main/java/lotto/HitNumber.java @@ -8,23 +8,27 @@ public class HitNumber { final List hitNumbers; static final String DELIMITER = ", "; - public HitNumber(String inputNumber){ - if(!isValid(inputNumber)) + + public HitNumber(String inputNumber) { + if (!isValid(inputNumber)) throw new IllegalArgumentException(); hitNumbers = Collections.unmodifiableList( toIntList(split(inputNumber, DELIMITER))); } - public List getNumbers(){ + + public List getNumbers() { return hitNumbers;//Arrays.asList(new Integer[]{1,2,3,4,5,6}); } - public static String[] split(String input, String delimiter){ + public static String[] split(String input, String delimiter) { return input.split(delimiter); } - public static List toIntList(String[] inputStr){ + + public static List toIntList(String[] inputStr) { return Arrays.asList(inputStr).stream().map(e -> toInt(e)).collect(Collectors.toList()); } + public static boolean isValid(String answer) { String[] numbers = split(answer, DELIMITER); return Arrays.asList(numbers) diff --git a/src/main/java/lotto/InputUI.java b/src/main/java/lotto/InputUI.java new file mode 100644 index 0000000..c4ea9d8 --- /dev/null +++ b/src/main/java/lotto/InputUI.java @@ -0,0 +1,28 @@ +package lotto; + +import java.util.Scanner; + +public class InputUI { + private Scanner scanner; + + public InputUI() { + scanner = new Scanner(System.in); + } + + public int getForLottoeMoney() { + System.out.println("구입금액을 입력해 주세요"); + try { +// return 10000; + return Integer.parseInt(scanner.nextLine()); + } catch (Exception e) { + throw new IllegalArgumentException(); + } + } + + public String getHitNumber() { + System.out.println("지난 주 당첨 번호를 입력해 주세요."); +// return "1, 2, 3, 4, 5, 6"; + return scanner.nextLine(); + } + +} diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index ccf7780..6d3e466 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,6 +1,7 @@ package lotto; -import java.util.*; +import java.util.Collections; +import java.util.List; public class Lotto { private List lottoNumbers; @@ -9,7 +10,7 @@ public Lotto() { lottoNumbers = LottoGenerator.generateNum(); } - public int compareLotto(HitNumber hitNumber){ + public int compareLotto(HitNumber hitNumber) { return compareNumList(lottoNumbers, hitNumber.getNumbers()); } @@ -20,8 +21,14 @@ public static int compareNumList(List lottoNumbers, List hitNu } return hitCount; } + private List sortLottoNumbers(List lottoNumbers) { Collections.sort(lottoNumbers); return lottoNumbers; } + + @Override + public String toString() { + return lottoNumbers.toString(); + } } \ No newline at end of file diff --git a/src/main/java/lotto/LottoClient.java b/src/main/java/lotto/LottoClient.java new file mode 100644 index 0000000..df77dfc --- /dev/null +++ b/src/main/java/lotto/LottoClient.java @@ -0,0 +1,109 @@ +package lotto; + +import java.util.*; +import java.util.stream.Collectors; + +public class LottoClient { + static final int LOTTO_PRICE = 1000; + static Map resultAwardMap; + + enum LOTTO_AWARDS { + BASIC(5000, 50000, 1500000, 2000000000); + + private int three_correct; + private int four_correct; + private int five_correct; + private int six_correct; + + LOTTO_AWARDS(int three_correct, int four_correct, int five_correct, int six_correct) { + this.three_correct = three_correct; + this.four_correct = four_correct; + this.five_correct = five_correct; + this.six_correct = six_correct; + } + + public int getThree_correct() { + return three_correct; + } + + public int getFour_correct() { + return four_correct; + } + + public int getFive_correct() { + return five_correct; + } + + public int getSix_correct() { + return six_correct; + } + } + + static { + LOTTO_AWARDS basicAwards = LOTTO_AWARDS.BASIC; + resultAwardMap = new TreeMap(); + resultAwardMap.put(3, basicAwards.getThree_correct()); + resultAwardMap.put(4, basicAwards.getFour_correct()); + resultAwardMap.put(5, basicAwards.getFive_correct()); + resultAwardMap.put(6, basicAwards.getSix_correct()); + } + + public static void main(String[] args) { + InputUI inputUI = new InputUI();1000 + Money money = new Money(inputUI.getForLottoeMoney()); + List lottoes = new LottoFactory().createLotto(maxLottoToBuy(money)); + + ResultUI resultUI = new ResultUI(); + + resultUI.printBuyedLottoes( + lottoes.stream() + .map(x -> x.toString()) + .collect(Collectors.toList())); + + HitNumber hitNumber = new HitNumber(inputUI.getHitNumber()); + + List results = calculateResults(lottoes, hitNumber); + + for (Integer numOfHits : resultAwardMap.keySet()) { + resultUI.printResultStatics2( + numOfHits, + resultAwardMap.get(numOfHits), + Collections.frequency(results, numOfHits) + ); + } + + resultUI.printBenefitRate(calculateBenefitRate(lottoes, hitNumber)); + } + + + public static double calculateBenefitRate(List lottoes, HitNumber hitNumber) { + List lottoResults = calculateResults(lottoes, hitNumber); + return calculateTemplate(lottoResults); + } + + public static double calculateTemplate(List lottoResults) { + double sum = 0; + for (int result : lottoResults) { + if (resultAwardMap.containsKey(result)) + sum += resultAwardMap.get(result); + } + return userFloor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); + } + + public static double userFloor(double target) { + int intTarget = (int) (target * 10); + return intTarget / 10.0; + } + + static List calculateResults(List lottoes, HitNumber hitNumber) { + List results = new ArrayList(); + for (Lotto lotto : lottoes) { + results.add(lotto.compareLotto(hitNumber)); + } + return results; + } + + public static int maxLottoToBuy(Money money) { + return money.getMoney() / LOTTO_PRICE; + } +} diff --git a/src/main/java/lotto/LottoFactory.java b/src/main/java/lotto/LottoFactory.java index 5d8abc8..5afd378 100644 --- a/src/main/java/lotto/LottoFactory.java +++ b/src/main/java/lotto/LottoFactory.java @@ -6,18 +6,11 @@ public class LottoFactory { static final int LOTTO_PRICE = 1000; - public List createLotto(int money) { + public List createLotto(int maxLottoCount) { List newLottoes = new ArrayList(); - for (int i = 0; i < maxLottoToBuy(money); i++) { + for (int i = 0; i < maxLottoCount; i++) { newLottoes.add(new Lotto()); } return newLottoes; } - - int maxLottoToBuy(int money) { - if (money < LOTTO_PRICE) { - return 0; - } - return money / LOTTO_PRICE; - } } diff --git a/src/main/java/lotto/LottoGenerator.java b/src/main/java/lotto/LottoGenerator.java index 0c033d5..e979de0 100644 --- a/src/main/java/lotto/LottoGenerator.java +++ b/src/main/java/lotto/LottoGenerator.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Random; public class LottoGenerator { static final int LOTTO_NUM = 6; @@ -16,8 +17,9 @@ public class LottoGenerator { } public static List generateNum() { - Collections.shuffle(validNumberSet); - return validNumberSet.subList(0, 6); - + Collections.shuffle(validNumberSet, new Random(System.currentTimeMillis())); + List result = new ArrayList(validNumberSet.subList(0, 6)); + Collections.sort(result); + return result; } } diff --git a/src/main/java/lotto/ResultUI.java b/src/main/java/lotto/ResultUI.java new file mode 100644 index 0000000..6e0a4ec --- /dev/null +++ b/src/main/java/lotto/ResultUI.java @@ -0,0 +1,31 @@ +package lotto; + +import java.util.List; + +public class ResultUI { + + public void printBuyedLottoes(List lottoes) { + System.out.printf("%d개를 구매했습니다.\n", lottoes.size()); + for (String lotto : lottoes) + print(lotto); + } + + public void printResultStatics(List resultList) { + print("확인 결과"); + print(resultList.toString()); + } + + public void printResultStatics2(int numOfHits, int prize, int numOfPrizes) { + System.out.printf("%d개 일치 (%d원)- %d개\n", numOfHits, prize, numOfPrizes); + } + + public void printBenefitRate(double benefitRate) { + System.out.printf("총 수익률은 %.1f%% 입니다.\n", benefitRate); + } + + private static void print(String target) { + System.out.println(target); + } + + +} diff --git a/src/test/java/TestCaseTest.java b/src/test/java/TestCaseTest.java index 19d35a1..6147e2a 100644 --- a/src/test/java/TestCaseTest.java +++ b/src/test/java/TestCaseTest.java @@ -4,17 +4,19 @@ import java.util.ArrayList; import java.util.List; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; + public class TestCaseTest { - class TestOutput{ + class TestOutput { private String prop1; private int prop2; - TestOutput(String prop1, int prop2){ + TestOutput(String prop1, int prop2) { this.prop1 = prop1; this.prop2 = prop2; } } + List outputList; String[] outputArr; TestOutput outputBean; @@ -25,7 +27,7 @@ class TestOutput{ String nullObj; @Before - public void setUp(){ + public void setUp() { nullObj = null; outputStr = "ABC"; outputInt = 1; @@ -39,7 +41,7 @@ public void setUp(){ } @Test - public void contains(){ + public void contains() { assertThat("A-B1").isIn(outputList).contains("A-B2", "A-B3"); } } diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index a37bd89..9af54ff 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -7,7 +7,6 @@ import java.util.Arrays; import java.util.List; -import static junit.framework.TestCase.assertEquals; import static org.assertj.core.api.Assertions.assertThat; public class LottoTest { @@ -16,47 +15,47 @@ public class LottoTest { LottoFactory lottoFactory; @Before - public void setUp(){ + public void setUp() { lottoFactory = new LottoFactory(); singleLotto = new Lotto(); } + @Test - public void 로또갯수(){ - assertThat(lottoFactory.maxLottoToBuy(5*1000)).isEqualTo(5); + public void 로또갯수() { + assertThat(LottoClient.maxLottoToBuy(new Money(5000))).isEqualTo(5); } - @Test - public void 로또구입금액딱맞음(){ - lottoes = lottoFactory.createLotto(5*1000); - assertEquals(5, lottoes.size()); - } @Test - public void 로또구입금액잔액있음(){ - - lottoes = lottoFactory.createLotto(5*1000+300); - assertEquals(5, lottoes.size()); + public void 로또구입금액딱맞음() { + assertThat(LottoClient.maxLottoToBuy(new Money(5000))).isEqualTo(5); +// lottoes = lottoFactory.createLotto(5*1000); +// assertEquals(5, lottoes.size()); } - @Test - public void 로또구입금액음수(){ - lottoes = lottoFactory.createLotto(-10); - assertEquals(0, lottoes.size()); - } @Test - public void 로또구입금액그냥돈없음(){ - lottoes = lottoFactory.createLotto(10); - assertEquals(0, lottoes.size()); + public void 로또구입금액잔액있음() { + assertThat(LottoClient.maxLottoToBuy(new Money(5300))).isEqualTo(5); +// lottoes = lottoFactory.createLotto(5*1000+300); +// assertEquals(5, lottoes.size()); } + @Test(expected = IllegalArgumentException.class) - public void 음수금액입력(){ + public void 로또구입금액음수() { new Money(-100); } + + @Test + public void 로또구입금액그냥돈없음() { + assertThat(LottoClient.maxLottoToBuy(new Money(999))).isEqualTo(0); + } + @Test - public void 번호자동생성갯수확인(){ + public void 번호자동생성갯수확인() { assertThat(LottoGenerator.generateNum()).hasSize(6); } + @Test - public void 입력로또번호검증성공케이스(){ + public void 입력로또번호검증성공케이스() { final String expectedInput = "1, 2, 3, 4, 5, 6"; SoftAssertions assertions = new SoftAssertions(); assertions.assertThat(HitNumber.isValid(expectedInput)) @@ -71,20 +70,21 @@ public void setUp(){ .as("숫자 자리에 문자일 때").isFalse(); assertions.assertAll(); } + @Test public void 당첨상황확인() { HitNumber hitMaker = new HitNumber("1, 2, 3, 4, 5, 6"); List hitNumbers = hitMaker.getNumbers(); SoftAssertions assertions = new SoftAssertions(); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,11,12,13), hitNumbers)) + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 11, 12, 13), hitNumbers)) .as("3개케이스").isEqualTo(3); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,11,12), hitNumbers)) + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 11, 12), hitNumbers)) .as("4개케이스").isEqualTo(4); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,5,11), hitNumbers)) + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 5, 11), hitNumbers)) .as("5개케이스").isEqualTo(5); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,3,4,5,6), hitNumbers)) + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 5, 6), hitNumbers)) .as("6개케이스").isEqualTo(6); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1,2,13,14,15,16), hitNumbers)) + assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 13, 14, 15, 16), hitNumbers)) .as("미당첨케이스").isLessThan(3); assertions.assertAll(); } @@ -95,7 +95,7 @@ public void setUp(){ double expected_2 = 35.7; List target_1 = Arrays.asList(3, 0); Integer[] arr_target_2 = new Integer[14]; - for(int i=0;i Date: Fri, 6 Jul 2018 11:54:16 +0900 Subject: [PATCH 5/6] Lotto ver1.5 --- src/main/java/Todo.md | 7 +-- src/main/java/lotto/HitNumber.java | 40 +++++++------ src/main/java/lotto/InputUI.java | 10 +--- src/main/java/lotto/Lotto.java | 38 +++++++----- src/main/java/lotto/LottoClient.java | 77 +++++++++++++++---------- src/main/java/lotto/LottoFactory.java | 5 +- src/main/java/lotto/LottoGenerator.java | 8 ++- src/main/java/lotto/ResultUI.java | 19 ++---- src/test/java/lotto/LottoTest.java | 40 +++++++------ 9 files changed, 133 insertions(+), 111 deletions(-) diff --git a/src/main/java/Todo.md b/src/main/java/Todo.md index 92884f5..ba601a0 100644 --- a/src/main/java/Todo.md +++ b/src/main/java/Todo.md @@ -22,7 +22,6 @@ 1. LottoClient 메소드 - 1) 로또결과 (로또 객체와 완전 상관없는 부분) 따로 빼고 클라이언트에서 호출 -- 2) 로또를 정하는 객체(힛넘버, 머니)와 당첨번호를 정하는 객체 분리 X -- 3) 네이밍 -- 4) 유틸 -- 5) 패키지 + 접근 제어자 \ No newline at end of file + - 2) 네이밍 + - 3) 유틸 +- 4) 접근 제어 \ No newline at end of file diff --git a/src/main/java/lotto/HitNumber.java b/src/main/java/lotto/HitNumber.java index 8045de2..59e99e1 100644 --- a/src/main/java/lotto/HitNumber.java +++ b/src/main/java/lotto/HitNumber.java @@ -16,39 +16,45 @@ public HitNumber(String inputNumber) { toIntList(split(inputNumber, DELIMITER))); } - public List getNumbers() { - return hitNumbers;//Arrays.asList(new Integer[]{1,2,3,4,5,6}); - } - - public static String[] split(String input, String delimiter) { - return input.split(delimiter); - } - - public static List toIntList(String[] inputStr) { - return Arrays.asList(inputStr).stream().map(e -> toInt(e)).collect(Collectors.toList()); - - } +// public List getNumbers() { +// return hitNumbers;//Arrays.asList(new Integer[]{1,2,3,4,5,6}); +// } public static boolean isValid(String answer) { String[] numbers = split(answer, DELIMITER); return Arrays.asList(numbers) .stream() - .allMatch(e -> isValidLotto(e)) && numbers.length == 6; + .allMatch(e -> validateNumber(e)) && numbers.length == LottoGenerator.LOTTO_NUMBER_COUNT; } - public static boolean isValidLotto(String number) { + private static boolean validateNumber(String number) { int num = 0; try { num = toInt(number); - } catch (Exception e) { + } catch (NumberFormatException e) { return false; } - if (num > 45 || num < 1) return false; + if (num > LottoGenerator.NUMBER_UPPER_BOUND || num < LottoGenerator.NUMBER_LOWER_BOUND) return false; return true; } - public static int toInt(String number) { + private static String[] split(String input, String delimiter) { + return input.split(delimiter); + } + + private static List toIntList(String[] inputStr) { + return Arrays.asList(inputStr).stream().map(e -> toInt(e)).collect(Collectors.toList()); + + } + + private static int toInt(String number) { return Integer.parseInt(number); } + + public int increment(int number){ + if(hitNumbers.contains(number)) + return 1; + return 0; + } } diff --git a/src/main/java/lotto/InputUI.java b/src/main/java/lotto/InputUI.java index c4ea9d8..3e88e14 100644 --- a/src/main/java/lotto/InputUI.java +++ b/src/main/java/lotto/InputUI.java @@ -3,13 +3,9 @@ import java.util.Scanner; public class InputUI { - private Scanner scanner; + private static Scanner scanner = new Scanner(System.in); - public InputUI() { - scanner = new Scanner(System.in); - } - - public int getForLottoeMoney() { + public static int getForLottoMoney() { System.out.println("구입금액을 입력해 주세요"); try { // return 10000; @@ -19,7 +15,7 @@ public int getForLottoeMoney() { } } - public String getHitNumber() { + public static String getHitNumber() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); // return "1, 2, 3, 4, 5, 6"; return scanner.nextLine(); diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 6d3e466..7ba8675 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,32 +1,42 @@ package lotto; -import java.util.Collections; import java.util.List; public class Lotto { private List lottoNumbers; - public Lotto() { - lottoNumbers = LottoGenerator.generateNum(); + public Lotto() + { +// lottoNumbers = LottoGenerator.generateNum(); + this(LottoGenerator.generateNum()); } - public int compareLotto(HitNumber hitNumber) { - return compareNumList(lottoNumbers, hitNumber.getNumbers()); + private Lotto(List lottoNumbers){ + this.lottoNumbers = lottoNumbers; } - public static int compareNumList(List lottoNumbers, List hitNumbers) { - int hitCount = 0; - for (int i = 0; i < lottoNumbers.size(); i++) { - hitCount += hitNumbers.contains(lottoNumbers.get(i)) ? 1 : 0; - } - return hitCount; + + public static Lotto getLottoByInput(List lottoNumbers){ + return new Lotto(lottoNumbers); } - private List sortLottoNumbers(List lottoNumbers) { - Collections.sort(lottoNumbers); - return lottoNumbers; + public int compareLotto(HitNumber hitNumber) { + int count = 0 ; + for(int number : lottoNumbers) { + count += hitNumber.increment(number); + } + return count; + // return compareNumList(lottoNumbers, hitNumber.getNumbers()); } +// public static int compareNumList(List lottoNumbers, List hitNumbers) { +// int hitCount = 0; +// for (int i = 0; i < lottoNumbers.size(); i++) { +// hitCount += hitNumbers.contains(lottoNumbers.get(i)) ? 1 : 0; +// } +// return hitCount; +// } + @Override public String toString() { return lottoNumbers.toString(); diff --git a/src/main/java/lotto/LottoClient.java b/src/main/java/lotto/LottoClient.java index df77dfc..62ce8a5 100644 --- a/src/main/java/lotto/LottoClient.java +++ b/src/main/java/lotto/LottoClient.java @@ -4,10 +4,18 @@ import java.util.stream.Collectors; public class LottoClient { - static final int LOTTO_PRICE = 1000; - static Map resultAwardMap; + private static final int LOTTO_PRICE = 1000; + private static Map resultAwardMap; + static { + LOTTO_AWARDS basicAwards = LOTTO_AWARDS.BASIC; + resultAwardMap = new TreeMap(); + resultAwardMap.put(3, basicAwards.getThree_correct()); + resultAwardMap.put(4, basicAwards.getFour_correct()); + resultAwardMap.put(5, basicAwards.getFive_correct()); + resultAwardMap.put(6, basicAwards.getSix_correct()); + } - enum LOTTO_AWARDS { + private enum LOTTO_AWARDS { BASIC(5000, 50000, 1500000, 2000000000); private int three_correct; @@ -39,63 +47,70 @@ public int getSix_correct() { } } - static { - LOTTO_AWARDS basicAwards = LOTTO_AWARDS.BASIC; - resultAwardMap = new TreeMap(); - resultAwardMap.put(3, basicAwards.getThree_correct()); - resultAwardMap.put(4, basicAwards.getFour_correct()); - resultAwardMap.put(5, basicAwards.getFive_correct()); - resultAwardMap.put(6, basicAwards.getSix_correct()); + public static void main(String[] args) { + run(); } - public static void main(String[] args) { - InputUI inputUI = new InputUI();1000 - Money money = new Money(inputUI.getForLottoeMoney()); - List lottoes = new LottoFactory().createLotto(maxLottoToBuy(money)); + private static void run() { + printResult(makeLottoes()); + } - ResultUI resultUI = new ResultUI(); + private static List makeLottoes(){ + Money money = new Money(InputUI.getForLottoMoney()); + List lottoes = new LottoFactory().createLotto(maxLottoToBuy(money)); - resultUI.printBuyedLottoes( + ResultUI.printBuyedLottoes( lottoes.stream() .map(x -> x.toString()) .collect(Collectors.toList())); + return lottoes; + } - HitNumber hitNumber = new HitNumber(inputUI.getHitNumber()); + private static void printResult(List lottoes){ + HitNumber hitNumber = new HitNumber(InputUI.getHitNumber()); List results = calculateResults(lottoes, hitNumber); for (Integer numOfHits : resultAwardMap.keySet()) { - resultUI.printResultStatics2( + ResultUI.printResultStatics( numOfHits, resultAwardMap.get(numOfHits), Collections.frequency(results, numOfHits) ); } - - resultUI.printBenefitRate(calculateBenefitRate(lottoes, hitNumber)); + ResultUI.printBenefitRate(calculateBenefitRate(lottoes, hitNumber)); } public static double calculateBenefitRate(List lottoes, HitNumber hitNumber) { List lottoResults = calculateResults(lottoes, hitNumber); - return calculateTemplate(lottoResults); + double sum = getSum(lottoResults); + return floor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); } - - public static double calculateTemplate(List lottoResults) { - double sum = 0; - for (int result : lottoResults) { - if (resultAwardMap.containsKey(result)) - sum += resultAwardMap.get(result); - } - return userFloor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); +// +// public static double calculateBenefitRate(List lottoResults) { +// double sum = 0; +// for (int result : lottoResults) { +// if (resultAwardMap.containsKey(result)) +// sum += resultAwardMap.get(result); +// +// } +// return floor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); +// } + + private static double getSum(List lottoResults) { + return (double) lottoResults.stream() + .filter(x -> resultAwardMap.containsKey(x)) + .mapToInt(x -> resultAwardMap.get(x)) + .sum(); } - public static double userFloor(double target) { + private static double floor(double target) { int intTarget = (int) (target * 10); return intTarget / 10.0; } - static List calculateResults(List lottoes, HitNumber hitNumber) { + private static List calculateResults(List lottoes, HitNumber hitNumber) { List results = new ArrayList(); for (Lotto lotto : lottoes) { results.add(lotto.compareLotto(hitNumber)); diff --git a/src/main/java/lotto/LottoFactory.java b/src/main/java/lotto/LottoFactory.java index 5afd378..51d9b4a 100644 --- a/src/main/java/lotto/LottoFactory.java +++ b/src/main/java/lotto/LottoFactory.java @@ -4,8 +4,11 @@ import java.util.List; public class LottoFactory { - static final int LOTTO_PRICE = 1000; + LottoGenerator generator; + public LottoFactory(){ + this.generator = new LottoGenerator(); + } public List createLotto(int maxLottoCount) { List newLottoes = new ArrayList(); for (int i = 0; i < maxLottoCount; i++) { diff --git a/src/main/java/lotto/LottoGenerator.java b/src/main/java/lotto/LottoGenerator.java index e979de0..9cb6ccc 100644 --- a/src/main/java/lotto/LottoGenerator.java +++ b/src/main/java/lotto/LottoGenerator.java @@ -6,19 +6,21 @@ import java.util.Random; public class LottoGenerator { - static final int LOTTO_NUM = 6; + public static final int LOTTO_NUMBER_COUNT = 6; + public static final int NUMBER_LOWER_BOUND = 1; + public static final int NUMBER_UPPER_BOUND = 45; static List validNumberSet; static { validNumberSet = new ArrayList(); - for (int i = 0; i < 45; i++) { + for (int i = NUMBER_LOWER_BOUND ; i < NUMBER_UPPER_BOUND; i++) { validNumberSet.add(i + 1); } } public static List generateNum() { Collections.shuffle(validNumberSet, new Random(System.currentTimeMillis())); - List result = new ArrayList(validNumberSet.subList(0, 6)); + List result = new ArrayList(validNumberSet.subList(0, LOTTO_NUMBER_COUNT)); Collections.sort(result); return result; } diff --git a/src/main/java/lotto/ResultUI.java b/src/main/java/lotto/ResultUI.java index 6e0a4ec..2da1481 100644 --- a/src/main/java/lotto/ResultUI.java +++ b/src/main/java/lotto/ResultUI.java @@ -4,28 +4,17 @@ public class ResultUI { - public void printBuyedLottoes(List lottoes) { + public static void printBuyedLottoes(List lottoes) { System.out.printf("%d개를 구매했습니다.\n", lottoes.size()); for (String lotto : lottoes) - print(lotto); + System.out.println(lotto); } - public void printResultStatics(List resultList) { - print("확인 결과"); - print(resultList.toString()); - } - - public void printResultStatics2(int numOfHits, int prize, int numOfPrizes) { + public static void printResultStatics(int numOfHits, int prize, int numOfPrizes) { System.out.printf("%d개 일치 (%d원)- %d개\n", numOfHits, prize, numOfPrizes); } - public void printBenefitRate(double benefitRate) { + public static void printBenefitRate(double benefitRate) { System.out.printf("총 수익률은 %.1f%% 입니다.\n", benefitRate); } - - private static void print(String target) { - System.out.println(target); - } - - } diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 9af54ff..2d446cc 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -4,13 +4,14 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class LottoTest { - List lottoes; + //List lottoes; Lotto singleLotto; LottoFactory lottoFactory; @@ -73,18 +74,18 @@ public void setUp() { @Test public void 당첨상황확인() { - HitNumber hitMaker = new HitNumber("1, 2, 3, 4, 5, 6"); - List hitNumbers = hitMaker.getNumbers(); + HitNumber hitNumbers = new HitNumber("1, 2, 3, 4, 5, 6"); + SoftAssertions assertions = new SoftAssertions(); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 11, 12, 13), hitNumbers)) + assertions.assertThat(Lotto.getLottoByInput(Arrays.asList(1, 2, 3, 11, 12, 13)).compareLotto(hitNumbers)) .as("3개케이스").isEqualTo(3); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 11, 12), hitNumbers)) + assertions.assertThat(Lotto.getLottoByInput(Arrays.asList(1, 2, 3, 4, 12, 13)).compareLotto(hitNumbers)) .as("4개케이스").isEqualTo(4); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 5, 11), hitNumbers)) + assertions.assertThat(Lotto.getLottoByInput(Arrays.asList(1, 2, 3, 4, 5, 13)).compareLotto(hitNumbers)) .as("5개케이스").isEqualTo(5); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 3, 4, 5, 6), hitNumbers)) + assertions.assertThat(Lotto.getLottoByInput(Arrays.asList(1, 2, 3, 4, 5, 6)).compareLotto(hitNumbers)) .as("6개케이스").isEqualTo(6); - assertions.assertThat(Lotto.compareNumList(Arrays.asList(1, 2, 13, 14, 15, 16), hitNumbers)) + assertions.assertThat(Lotto.getLottoByInput(Arrays.asList(1, 2, 10, 11, 12, 13)).compareLotto(hitNumbers)) .as("미당첨케이스").isLessThan(3); assertions.assertAll(); } @@ -93,22 +94,23 @@ public void setUp() { public void 수익률계산() { double expected_1 = 250; double expected_2 = 35.7; - List target_1 = Arrays.asList(3, 0); - Integer[] arr_target_2 = new Integer[14]; - for (int i = 0; i < arr_target_2.length; i++) { - arr_target_2[i] = 0; + Lotto nonHitLotto = Lotto.getLottoByInput(Arrays.asList(11, 12, 13, 14, 15, 16)); + Lotto thirdHitLotto = Lotto.getLottoByInput(Arrays.asList(1, 2 , 3, 14, 15, 16)); + HitNumber hitNumber = new HitNumber("1, 2, 3, 4, 5, 6"); + List lottoes1 = new ArrayList(); + List lottoes2 = new ArrayList(); + lottoes1.add(nonHitLotto); + lottoes1.add(thirdHitLotto); + for(int i = 0 ; i < 13 ; i++){ + lottoes2.add(nonHitLotto); } - arr_target_2[0] = 3; - List target_2 = Arrays.asList(arr_target_2); - + lottoes2.add(thirdHitLotto); SoftAssertions assertions = new SoftAssertions(); - - - assertions.assertThat(LottoClient.calculateTemplate(target_1)) + assertions.assertThat(LottoClient.calculateBenefitRate(lottoes1, hitNumber)) .as("2개 중 3 등 하나") .isEqualTo(expected_1); - assertions.assertThat(LottoClient.calculateTemplate(target_2)) + assertions.assertThat(LottoClient.calculateBenefitRate(lottoes2,hitNumber)) .as("14개 중 3 등 하나") .isEqualTo(expected_2); From 36757d9120288c444359a63d43b80c60156bf7bb Mon Sep 17 00:00:00 2001 From: mia6111 Date: Fri, 6 Jul 2018 11:55:51 +0900 Subject: [PATCH 6/6] Step1 Lotto ver2 --- src/main/java/lotto/HitNumber.java | 3 --- src/main/java/lotto/InputUI.java | 2 -- src/main/java/lotto/Lotto.java | 10 ---------- src/main/java/lotto/LottoClient.java | 10 ---------- src/test/java/lotto/LottoTest.java | 5 ----- 5 files changed, 30 deletions(-) diff --git a/src/main/java/lotto/HitNumber.java b/src/main/java/lotto/HitNumber.java index 59e99e1..1e8426c 100644 --- a/src/main/java/lotto/HitNumber.java +++ b/src/main/java/lotto/HitNumber.java @@ -16,9 +16,6 @@ public HitNumber(String inputNumber) { toIntList(split(inputNumber, DELIMITER))); } -// public List getNumbers() { -// return hitNumbers;//Arrays.asList(new Integer[]{1,2,3,4,5,6}); -// } public static boolean isValid(String answer) { String[] numbers = split(answer, DELIMITER); diff --git a/src/main/java/lotto/InputUI.java b/src/main/java/lotto/InputUI.java index 3e88e14..233e136 100644 --- a/src/main/java/lotto/InputUI.java +++ b/src/main/java/lotto/InputUI.java @@ -8,7 +8,6 @@ public class InputUI { public static int getForLottoMoney() { System.out.println("구입금액을 입력해 주세요"); try { -// return 10000; return Integer.parseInt(scanner.nextLine()); } catch (Exception e) { throw new IllegalArgumentException(); @@ -17,7 +16,6 @@ public static int getForLottoMoney() { public static String getHitNumber() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); -// return "1, 2, 3, 4, 5, 6"; return scanner.nextLine(); } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 7ba8675..f0bf735 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -7,7 +7,6 @@ public class Lotto { public Lotto() { -// lottoNumbers = LottoGenerator.generateNum(); this(LottoGenerator.generateNum()); } @@ -26,17 +25,8 @@ public int compareLotto(HitNumber hitNumber) { count += hitNumber.increment(number); } return count; - // return compareNumList(lottoNumbers, hitNumber.getNumbers()); } -// public static int compareNumList(List lottoNumbers, List hitNumbers) { -// int hitCount = 0; -// for (int i = 0; i < lottoNumbers.size(); i++) { -// hitCount += hitNumbers.contains(lottoNumbers.get(i)) ? 1 : 0; -// } -// return hitCount; -// } - @Override public String toString() { return lottoNumbers.toString(); diff --git a/src/main/java/lotto/LottoClient.java b/src/main/java/lotto/LottoClient.java index 62ce8a5..00d5170 100644 --- a/src/main/java/lotto/LottoClient.java +++ b/src/main/java/lotto/LottoClient.java @@ -87,16 +87,6 @@ public static double calculateBenefitRate(List lottoes, HitNumber hitNumb double sum = getSum(lottoResults); return floor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); } -// -// public static double calculateBenefitRate(List lottoResults) { -// double sum = 0; -// for (int result : lottoResults) { -// if (resultAwardMap.containsKey(result)) -// sum += resultAwardMap.get(result); -// -// } -// return floor(sum / (lottoResults.size() * LOTTO_PRICE) * 100); -// } private static double getSum(List lottoResults) { return (double) lottoResults.stream() diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 2d446cc..0235fa5 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -11,7 +11,6 @@ import static org.assertj.core.api.Assertions.assertThat; public class LottoTest { - //List lottoes; Lotto singleLotto; LottoFactory lottoFactory; @@ -29,15 +28,11 @@ public void setUp() { @Test public void 로또구입금액딱맞음() { assertThat(LottoClient.maxLottoToBuy(new Money(5000))).isEqualTo(5); -// lottoes = lottoFactory.createLotto(5*1000); -// assertEquals(5, lottoes.size()); } @Test public void 로또구입금액잔액있음() { assertThat(LottoClient.maxLottoToBuy(new Money(5300))).isEqualTo(5); -// lottoes = lottoFactory.createLotto(5*1000+300); -// assertEquals(5, lottoes.size()); } @Test(expected = IllegalArgumentException.class)