diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922..f4d5c6e 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,13 @@ package lotto; +import lotto.Controller.Start; + public class Application { + public static void main(String[] args) { // TODO: 프로그램 구현 + Start start = new Start(); + start.run(); + } } diff --git a/src/main/java/lotto/Controller/Start.java b/src/main/java/lotto/Controller/Start.java new file mode 100644 index 0000000..1badfb6 --- /dev/null +++ b/src/main/java/lotto/Controller/Start.java @@ -0,0 +1,81 @@ +package lotto.Controller; + +import lotto.View.InOut; +import lotto.Domain.Lotto; +import lotto.Domain.LottoResult; +import lotto.Domain.RandomLotto; + +import java.util.*; + +public class Start { + public Start(){} + + public int FIRST = 0; //6개 - 2,000,000,000 + public int SECOND = 0; //5개 + 보너스 - 50,000,000 + public int THIRD = 0; //5개 - 1,500,000 + public int FORTH = 0; //4개 - 50,000 + public int FIVTH = 0; //3개 - 5,000 + + + public void run(){ + InOut inOut = new InOut(); + LottoResult lottoResult = new LottoResult(); + RandomLotto randomLotto = new RandomLotto(); + + int LottoAmount =inOut.InLottoMoney()/1000; //로또 개수 확인 + + List myRandomLottoList = randomLotto.setRandomLottoList(LottoAmount); //LottoAmount 개의 랜덤 로또 번호 생성 + + + inOut.OutLottoAmount(LottoAmount); //로또 개수 출력 + inOut.OutLottoList(myRandomLottoList); //랜덤으로 생성된 로또 출력 + + List WinningLotto = inOut.InWinningLotto(); //로또 당첨 번호 입력 + int BonusNum = inOut.InBonusNum(); //보너스 번호 입력 + + for(List LottoList : myRandomLottoList){ //로또 당첨 결과 설정 + int Count = lottoResult.getResult(LottoList,WinningLotto); + setResult(Count,WinningLotto,BonusNum); } + + double RateOfReturn = lottoResult.getRateOfReturn(getResultMoney(),LottoAmount*1000); //수익률 + + inOut.OutResultStatistics(FIRST,SECOND,THIRD,FORTH,FIVTH,RateOfReturn); //결과 출력 + + + + + } + + private void setResult(Integer Count,List WinningLotto , Integer BonusNum){ //등수에 해당하는 로또 개수 업데이트 + LottoResult lottoResult = new LottoResult(); + switch (Count){ + case 3: + FIVTH++; + break; + case 4: + FORTH++; + break; + case 5: + if(lottoResult.getBounsResult(BonusNum,WinningLotto) == Boolean.TRUE){ + //System.out.println("보너스 o"); + SECOND++; + break; + } + else if(lottoResult.getBounsResult(BonusNum,WinningLotto) == Boolean.FALSE) { + //System.out.println("보너스 x"); + THIRD++; + break; + } + case 6: + FIRST++; + break; + } + } + + private double getResultMoney(){ + return FIRST*2000000000 + SECOND*30000000 + THIRD*1500000 + FORTH*50000 + FIVTH*5000; + } + + + +} diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Domain/Lotto.java similarity index 73% rename from src/main/java/lotto/Lotto.java rename to src/main/java/lotto/Domain/Lotto.java index 519793d..f4b1547 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Domain/Lotto.java @@ -1,4 +1,6 @@ -package lotto; +package lotto.Domain; + +import camp.nextstep.edu.missionutils.Randoms; import java.util.List; @@ -16,5 +18,12 @@ private void validate(List numbers) { } } + public List getLotto(){ + return numbers; + } // TODO: 추가 기능 구현 } + + + + diff --git a/src/main/java/lotto/Domain/LottoResult.java b/src/main/java/lotto/Domain/LottoResult.java new file mode 100644 index 0000000..366e789 --- /dev/null +++ b/src/main/java/lotto/Domain/LottoResult.java @@ -0,0 +1,28 @@ +package lotto.Domain; + +import java.util.List; + +public class LottoResult { + public LottoResult(){} + + public long getLottoResult(List LottoList,List WinningLotto){ + return LottoList.stream() + .filter(WinningLotto::contains) + .count(); + + } + public Boolean getBounsResult(Integer BounNum,List WinningLotto){ + return WinningLotto.contains(BounNum); + } + + public double getRateOfReturn(double ResultMoney,double LottoMoney){ //수익률 계산 + double a = (ResultMoney/LottoMoney)*100; + return Math.round(a*10.0)/10.0; + } + + public Integer getResult(List LottoList,List WinningLotto){ //개별 로또의 결과 확인 + LottoResult lottoResult = new LottoResult(); + return (int)lottoResult.getLottoResult(LottoList,WinningLotto); + } + +} diff --git a/src/main/java/lotto/Domain/RandomLotto.java b/src/main/java/lotto/Domain/RandomLotto.java new file mode 100644 index 0000000..734507d --- /dev/null +++ b/src/main/java/lotto/Domain/RandomLotto.java @@ -0,0 +1,30 @@ +package lotto.Domain; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RandomLotto { + public RandomLotto(){} + + public List getRandomlotto(){ + return Randoms.pickUniqueNumbersInRange(1,45,6); + } + + public static List setRandomLotto(){ //단일 로또 생성 + RandomLotto randomLotto = new RandomLotto(); + Lotto lotto = new Lotto(randomLotto.getRandomlotto()); + return lotto.getLotto(); + } + + public static List setRandomLottoList(Integer Amount){ //Amount개의 로또 생성 + List RandomLottoList = new ArrayList<>(); + for(int i=0;i InWinningLotto(){ + + System.out.println("당첨 번호를 입력해 주세요 "); + String[] input = Console.readLine().split(","); + List WinningLotto = new ArrayList<>(); + for(int i=0;i<6;i++){ + WinningLotto.add(Integer.parseInt(input[i])); + } + + return new Lotto(WinningLotto).getLotto(); + } + public Integer InLottoMoney(){ + System.out.println("구입 금액을 입력해 주세요 "); + return Integer.parseInt(Console.readLine()); + } + public Integer InBonusNum(){ + System.out.println("보너스 번호를 입력해 주세요"); + return Integer.parseInt(Console.readLine()); + } + + public void OutResultStatistics(int FIRST,int SECOND,int THIRD,int FORTH,int FIVTH,double RateOfReturn){ //로또 최종 통계 출력 + System.out.println("당첨 통계"); + System.out.println("---"); + System.out.println("3개 일치 (5,000원) - "+FIVTH+"개"); + System.out.println("4개 일치 (50,000원) - "+FORTH+"개"); + System.out.println("5개 일치 (1,500,000원) - "+THIRD+"개"); + System.out.println("5개 일치, 보너스 볼 일치(30,000,000원) - "+SECOND+"개"); + System.out.println("6개 일치 (2,000,000,000원) - "+FIRST+"개"); + System.out.println("총 수익률은 "+RateOfReturn+"% 입니다"); + } + + public void OutLottoList(List MyRandomLottoList){ //랜덤으로 생성된 로또 출력 + for(List myList : MyRandomLottoList){ + System.out.println(myList); + } + } + + public void OutLottoAmount(int LottoAmount){ + System.out.println(LottoAmount+"개를 구매하셨습니다"); + } + +} diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index 0f3af0f..9eb00e6 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -1,5 +1,6 @@ package lotto; +import lotto.Domain.Lotto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;