Skip to content
Open

Hello #2137

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/lotto/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package lotto;



public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
Game game = LottoGame.getInstance();
game.play();
}
}
8 changes: 8 additions & 0 deletions src/main/java/lotto/Game.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package lotto;

public interface Game {

void play();

void test();
}
15 changes: 15 additions & 0 deletions src/main/java/lotto/GameStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package lotto;

public enum GameStatus {
MIN_PRICE(1000);

int value;

GameStatus(int val) {
this.value = val;
}

public int getValue() {
return this.value;
}
}
41 changes: 41 additions & 0 deletions src/main/java/lotto/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package lotto;

import java.util.List;

public class Item {
private static List<List<Integer>> challengeTicket;

private static List<Integer> winnerTicket;

private static Integer bonusNumber;

// protected current instance
private Item() {

}

public static void setChallengeTicket(List<List<Integer>> cTicket) {
challengeTicket = cTicket;
}

public static void setWinnerTicket(List<Integer> wTicket) {
winnerTicket = wTicket;
}

public static void setBonusNumber(Integer bNum) {
bonusNumber = bNum;
}

public static List<List<Integer>> getChallengeTicket() {
return challengeTicket;
}

public static List<Integer> getWinnerTicket() {
return winnerTicket;
}

public static Integer getBonusNumber() {
return bonusNumber;
}

}
124 changes: 124 additions & 0 deletions src/main/java/lotto/LotteryDrawing.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package lotto;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LotteryDrawing {

private static LotteryDrawing instance;

private Map<String, Integer> lottoDrawingResult;

private Map<String, Integer> lottoPrizeMoney;

private Map<String, String> strPrizeMoney;

private LotteryDrawing() {

}

public static LotteryDrawing getInstance() {
if (instance == null) {
instance = new LotteryDrawing();
return instance;
}
return instance;
}


public void lottoDrawing(List<List<Integer>> challengeTicket, List<Integer> winnerTicket, Integer bonusNum) {
setLottoGrade();

for (int i = 0; i < challengeTicket.size(); i++) {
List<Integer> userTicket = challengeTicket.get(i);
int cnt = checkLotto(userTicket, winnerTicket);

if (cnt > 2) {
checkPrize(cnt, userTicket, bonusNum);
}
}

}

private int checkLotto(List<Integer> userTicket, List<Integer> winnerTicket) {
int cnt = 0;
for (int i = 0; i < winnerTicket.size(); i++) {
for (int j = 0; j < userTicket.size(); j++) {
if (winnerTicket.get(i).equals(userTicket.get(j))) {
cnt += 1;
}
}
}

return cnt;
}

private void checkPrize(Integer cnt, List<Integer> userTicket, Integer bonusNum) {
String grade = "E";

switch(cnt) {
case 6:
grade = "A";
break;
case 5:
if(checkBonusNum(userTicket, bonusNum)) {
grade = "B";
break;
}
grade = "C";
break;
case 4:
grade = "D";
break;
}

// 자바 8이상에서는 이렇게 굳이 꺼내지 않고 MAP에서 업데이트 가능
lottoDrawingResult.merge(grade, 1, Integer::sum);
}

private boolean checkBonusNum(List<Integer> userTicket, Integer bonusNum) {
for (int i = 0; i < userTicket.size(); i++) {
if (userTicket.get(i).equals(bonusNum)) {
return true;
}
}
return false;
}

private void setLottoGrade() {
lottoDrawingResult = new HashMap<>();
lottoPrizeMoney = new HashMap<>();
strPrizeMoney = new HashMap<>();

lottoDrawingResult.put("A", 0);
lottoDrawingResult.put("B", 0);
lottoDrawingResult.put("C", 0);
lottoDrawingResult.put("D", 0);
lottoDrawingResult.put("E", 0);

lottoPrizeMoney.put("A", 2000000000);
lottoPrizeMoney.put("B", 30000000);
lottoPrizeMoney.put("C", 1500000);
lottoPrizeMoney.put("D", 50000);
lottoPrizeMoney.put("E", 5000);

strPrizeMoney.put("A", "2,000,000,000");
strPrizeMoney.put("B", "30,000,000");
strPrizeMoney.put("C", "1,500,000");
strPrizeMoney.put("D", "50,000");
strPrizeMoney.put("E", "5,000");
}

public Map<String, Integer> getLottoDrawingResult() {
return lottoDrawingResult;
}

public Map<String, Integer> getLottoPrizeMoney() {
return lottoPrizeMoney;
}

public Map<String, String> getStrPrizeMoney() {
return strPrizeMoney;
}
}
60 changes: 59 additions & 1 deletion src/main/java/lotto/Lotto.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,77 @@

import java.util.List;

/**
* 로또 클래스의 역활은 우승자 티켓 검증과 생성 (보너스)
*/

public class Lotto {

public static Lotto instance;

private final List<Integer> numbers;

private Integer bonusNumber;

private static int useMoney;

public Lotto(List<Integer> numbers) {
validate(numbers);
this.numbers = numbers;
}

private void validate(List<Integer> numbers) {
if (numbers.size() != 6) {
throw new IllegalArgumentException();
throw new IllegalArgumentException("[ERROR] 입력이 잘못되었습니다.");
}

for (int i = 0; i < numbers.size(); i++) {
if (numbers.get(i) < 1) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.");
} else if (numbers.get(i) > 45) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.");
}

for (int j = 0; j < numbers.size(); j++) {
if (i != j && numbers.get(i).equals(numbers.get(j))) {
throw new IllegalArgumentException("[ERROR] 로또 번호가 중복 되었습니다.");
}
}
}
}

// TODO: 추가 기능 구현
public static Lotto getInstance(List<Integer> numbers) {
if (instance == null) {
instance = new Lotto(numbers);
}

return instance;
}

public List<Integer> getNumbers() {
return numbers;
}

public void setBonusNumber(Integer bonusNumber) {
if (bonusNumber < 1) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.");
} else if (bonusNumber > 45) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.");
}

this.bonusNumber = bonusNumber;
}

public Integer getBonusNumber() {
return bonusNumber;
}

public static void setUseMoney(Integer money) {
useMoney = money;
}

public static Integer getUseMoney() {
return useMoney;
}
}
90 changes: 90 additions & 0 deletions src/main/java/lotto/LottoGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package lotto;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class LottoGame implements Game{
private final Machine machine = LottoMachine.getMachine();

private final LotteryDrawing lotteryDrawing = LotteryDrawing.getInstance();

private static LottoGame instance;

private LottoGame() {

}

// TODO 로또 티켓 당첨 확인하기
@Override
public void play() {
try {
init();
List<List<Integer>> cTicket = Item.getChallengeTicket();
List<Integer> wTicket = Item.getWinnerTicket();
Integer bNum = Item.getBonusNumber();

lotteryDrawing.lottoDrawing(cTicket, wTicket, bNum);

Map<String, Integer> lottoDrawingResult = lotteryDrawing.getLottoDrawingResult();
Map<String, Integer> lottoPrizeMoney = lotteryDrawing.getLottoPrizeMoney();
Map<String, String> strPrizeMoney = lotteryDrawing.getStrPrizeMoney();

PrintGameState.printLottoResult(lottoDrawingResult, lottoPrizeMoney, strPrizeMoney);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

@Override
public void test() {
int[][] cArr = {
{8, 21, 23, 41, 42, 43},
{3, 5, 11, 16, 32, 38},
{7, 11, 16, 35, 36, 44},
{1, 8, 11, 31, 41, 42},
{13, 14, 16, 38, 42, 45},
{7, 11, 30, 40, 42, 43},
{2, 13, 22, 32, 38, 45},
{1, 3, 5, 14, 22, 45},
};
int[] wArr = {1, 2, 3, 4, 5, 6};
int bNum = 7;
Lotto.setUseMoney(8000);
List<List<Integer>> cTicket = new ArrayList<>();
List<Integer> wTicket = new ArrayList<>();

for (int i = 0; i < cArr.length; i++) {
List<Integer> a = new ArrayList<>();
for (int j = 0; j < cArr[i].length; j++) {
a.add(cArr[i][j]);
}
cTicket.add(a);
}

for (int i = 0; i < wArr.length; i++) {
wTicket.add(wArr[i]);
}

lotteryDrawing.lottoDrawing(cTicket, wTicket, bNum);

Map<String, Integer> lottoDrawingResult = lotteryDrawing.getLottoDrawingResult();
Map<String, Integer> lottoPrizeMoney = lotteryDrawing.getLottoPrizeMoney();
Map<String, String> strPrizeMoney = lotteryDrawing.getStrPrizeMoney();

PrintGameState.printLottoResult(lottoDrawingResult, lottoPrizeMoney, strPrizeMoney);
}

private void init() {
machine.operating();
}

public static Game getInstance() {
if (instance == null) {
instance = new LottoGame();
return instance;
}

return instance;
}
}
Loading