diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java new file mode 100644 index 00000000..1226a47f --- /dev/null +++ b/src/main/java/controller/Controller.java @@ -0,0 +1,80 @@ +package controller; + +import random.ConvertToString; +import random.ReturnAutoLotto; +import util.CheckWinningResult; +import util.ConvertToIntegerList; +import util.Input; +import util.TotalLotto; +import view.OutputView; + +import java.math.BigInteger; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +public class Controller { + public static void main(String[] args) { + OutputView.inputMessage(); + int inputMoney = Input.inputMoney(); + + OutputView.inputManualMessage(); + int manualCount = Input.inputManualCount(); + + OutputView.printInputinfo(); + + List> resultArray = new ArrayList<>(); + resultArray = TotalLotto.createResultArray(); + + + for (int i = 0; i < manualCount; i++) { + String manualNumbers = Input.inputManualNumbers(); + + List manulLottoList = new ArrayList<>(); + manulLottoList = ConvertToIntegerList.removeCommasAndSpaces(manualNumbers); + TotalLotto.createAddLotto(manulLottoList, resultArray); + + } + + OutputView.printLottoCountInfo(manualCount, Input.inputAutoCount(inputMoney / 1000, manualCount)); + + + for (int i = 0; i < Input.inputAutoCount(inputMoney / 1000, manualCount); i++) { + List autoLottoList = new ArrayList<>(); + autoLottoList = ReturnAutoLotto.randomLotto(); + TotalLotto.createAddLotto(autoLottoList, resultArray); + //OutputView.printAutoNumbers(ConvertToString.convertToString(autoLottoList)); + } + + OutputView.printTotalNumbers(resultArray); + + OutputView.inputAnswerMessage(); + List answerNumbers = new ArrayList<>(); + answerNumbers = ConvertToIntegerList.removeCommasAndSpaces(Input.answerNumber()); + + OutputView.inputBonusMessage(); + int bonusNumber = Input.bonusNumber(); + + List resultList = CheckWinningResult.resultCount(resultArray, answerNumbers, bonusNumber); + + + OutputView.resultsMessage(); + List winnerCount = List.of(0, 6, 5, 5, 4, 3); + List winnerPrice = List.of(0, 2000000000, 30000000, 1500000, 50000, 5000); + long sum = 0; + for (int i = 5; i >= 1; i--) { + sum += ((long) winnerPrice.get(i) * resultList.get(i)); + + if (i == 2) { + System.out.println(winnerCount.get(i) + "개 일치, 보너스 볼 일치(" + winnerPrice.get(i) + "원)- " + resultList.get(i) + "개"); + continue; + } + System.out.println(winnerCount.get(i) + "개 일치 (" + winnerPrice.get(i) + "원)- " + resultList.get(i) + "개"); + } + + DecimalFormat df = new DecimalFormat("#.##"); + System.out.println("총 수익률은 " + df.format((double) sum / (double) inputMoney) + "입니다."); + } +} + + diff --git a/src/main/java/model/CheckWinningResult.java b/src/main/java/model/CheckWinningResult.java new file mode 100644 index 00000000..388e4df7 --- /dev/null +++ b/src/main/java/model/CheckWinningResult.java @@ -0,0 +1,56 @@ +package model; + +import java.util.ArrayList; +import java.util.List; + +public class CheckWinningResult { + public static List initResultList() { + List newResultList = new ArrayList<>(); + for(int i=0; i<6; i++){ + newResultList.add(0); + } + return newResultList; + } + + //불러와서 하면 더 좋을듯 + public static List resultCount(List> resultArray, List answerNumbers, int bonusNumber) { + List resultWinningList = initResultList(); + + for (List innerList : resultArray) { + boolean flag = false; + int answerCount; + if (innerList.contains(bonusNumber)) flag = true; +// System.out.println("innerList = " + innerList); + + innerList.retainAll(answerNumbers); + answerCount = innerList.size(); + + if (answerCount == 3) { + int currentValue = resultWinningList.get(5); // 5번째 값 + resultWinningList.set(5, currentValue + 1); // 1 증가된 값으로 설정 + } + + if (answerCount == 4) { + int currentValue = resultWinningList.get(4); + resultWinningList.set(4, currentValue + 1); + } + + if (answerCount == 5 && !flag) { + int currentValue = resultWinningList.get(3); + resultWinningList.set(3, currentValue + 1); + } + + if (answerCount == 5 && flag) { + int currentValue = resultWinningList.get(2); + resultWinningList.set(2, currentValue + 1); + } + + if (answerCount == 6) { + int currentValue = resultWinningList.get(1); + resultWinningList.set(1, currentValue + 1); + } + + } + return resultWinningList; + } +} \ No newline at end of file diff --git a/src/main/java/model/TotalLotto.java b/src/main/java/model/TotalLotto.java new file mode 100644 index 00000000..bcee0395 --- /dev/null +++ b/src/main/java/model/TotalLotto.java @@ -0,0 +1,16 @@ +package model; + +import java.util.ArrayList; +import java.util.List; + +public class TotalLotto { + public static List> createResultArray () { + List> resultArray = new ArrayList<>(); + return resultArray; + } + + public static List> createAddLotto (List singleLotto, List> resultArray) { + resultArray.add(singleLotto); // ? + return resultArray; //void? + } +} diff --git a/src/main/java/random/ConvertToString.java b/src/main/java/random/ConvertToString.java new file mode 100644 index 00000000..866164d3 --- /dev/null +++ b/src/main/java/random/ConvertToString.java @@ -0,0 +1,22 @@ +package random; + +import java.util.ArrayList; +import java.util.List; + +public class ConvertToString { //출력을 위해..? + + public static String convertToString(List integerList) { + StringBuilder sb = new StringBuilder(); + + for (Integer num : integerList) { + sb.append(num).append(", "); + } + + // 마지막 쉼표와 공백 제거 + if (sb.length() > 0) { + sb.setLength(sb.length() - 2); + } + + return sb.toString(); + } +} diff --git a/src/main/java/random/ReturnAutoLotto.java b/src/main/java/random/ReturnAutoLotto.java new file mode 100644 index 00000000..e9768eb3 --- /dev/null +++ b/src/main/java/random/ReturnAutoLotto.java @@ -0,0 +1,23 @@ +package random; +import java.util.Collections; +import java.util.Random; +import java.util.ArrayList; +import java.util.List; + +public class ReturnAutoLotto { //랜덤로또리스트를 반환 + public static List randomLotto(){ + List list = new ArrayList<>(); + Random random = new Random(); + + while (list.size() < 6) { + int randomNumber = random.nextInt(45) + 1; + + if (list.contains(randomNumber)) { + continue; + } + list.add(randomNumber); + } + Collections.sort(list); + return list; + } +} diff --git a/src/main/java/util/ConvertToIntegerList.java b/src/main/java/util/ConvertToIntegerList.java new file mode 100644 index 00000000..4f98f57e --- /dev/null +++ b/src/main/java/util/ConvertToIntegerList.java @@ -0,0 +1,25 @@ +package util; + +import java.util.ArrayList; +import java.util.List; + +public class ConvertToIntegerList { + public static List removeCommasAndSpaces(String inputStringLotto) { + // 쉼표와 공백을 기준으로 문자열을 분할하여 문자열 배열을 생성 + String[] tokens = inputStringLotto.split("[,\\s]+"); + + List numbers = new ArrayList<>(); + + // 분할된 각 문자열을 정수로 변환하여 리스트에 추가 + for (String token : tokens) { + try { + int number = Integer.parseInt(token); + numbers.add(number); + } catch (NumberFormatException e) { + // 정수로 변환할 수 없는 문자열은 무시 + } + } + + return numbers; + } +} \ No newline at end of file diff --git a/src/main/java/util/Input.java b/src/main/java/util/Input.java new file mode 100644 index 00000000..c0f980b7 --- /dev/null +++ b/src/main/java/util/Input.java @@ -0,0 +1,40 @@ +package util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Input { + public static int inputMoney() { //입력금액 + return Integer.parseInt(userInput()); + } + + // public static int lottoTotalCount(int inputMoney){ + // return inputMoney/1000; + // } + public static int inputManualCount() { + return Integer.parseInt(userInput()); + } + + public static int inputAutoCount(int totalCount, int manualCount){ + return totalCount - manualCount; + }// + + public static String inputManualNumbers() { + Scanner sc = new Scanner(System.in); + return sc.nextLine(); + }// + + public static String answerNumber() { + return userInput(); + } + + public static int bonusNumber() { + return Integer.parseInt(userInput()); + } + + private static String userInput() {//입력도 따로 빼야하나? + Scanner scanner = new Scanner(System.in); + return (scanner.nextLine()); + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..0e0db9ed --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,51 @@ +package view; + +import java.util.List; + +public class OutputView { + + public static void inputMessage() { + System.out.println("구입금액을 입력해 주세요."); + } + + + public static void inputManualMessage() { + System.out.println(); + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + } + + + public static void printInputinfo() { + System.out.println(); + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + } + + public static void printLottoCountInfo(int manualCount, int autoCount) { + System.out.println(); + System.out.println("수동으로" + manualCount + "장, 자동으로" + autoCount + "개를 구매했습니다."); + } + + + public static void printTotalNumbers(List> resultArrays) { + for (List resultArray : resultArrays) { + System.out.println(resultArray); + } + } + + public static void inputAnswerMessage() { + System.out.println(); + System.out.println("지난 주 당첨 번호를 입력해 주세요."); + } + + + public static void inputBonusMessage() { + System.out.println(); + System.out.println("보너스 볼을 입력해 주세요."); + } + + public static void resultsMessage() { + System.out.println(); + System.out.println("당첨 통계\n" + + "---------"); + } +}