Skip to content
Open
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
5 changes: 5 additions & 0 deletions src/main/java/lotto/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package lotto;

import lotto.controller.LottoController;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현

LottoController lottoController = new LottoController();
lottoController.lottoStart();
}
}
20 changes: 0 additions & 20 deletions src/main/java/lotto/Lotto.java

This file was deleted.

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

import lotto.domain.LottoGenerator;
import lotto.view.OutputView;
import org.kokodak.Console;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class LottoController {

public void lottoStart(){
int buyMoney;
int bonusNumber;
List<Integer> winLottoList;
List<List<Integer>> lottoNumberList = new ArrayList<>();

Scanner sc = new Scanner(System.in);

OutputView.printBuyMoney();
buyMoney = sc.nextInt();

LottoGenerator lottoGenerator = new LottoGenerator(buyMoney); //로또 생성기


OutputView.printBuyLotto(buyMoney);
for (int i=0; i<lottoGenerator.lottoQuantity; i++){
lottoNumberList.add(lottoGenerator.generateLottos());
}
OutputView.printLottoList(lottoNumberList);

OutputView.printWinLotto();
winLottoList =Arrays.stream(sc.next().split(","))
.map(Integer::parseInt)
.collect(Collectors.toList());

OutputView.printBonus();
bonusNumber = sc.nextInt();

OutputView.printResult(lottoNumberList, winLottoList, bonusNumber, buyMoney);

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

import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class Lotto {
private final List<Integer> numbers;

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

private void validate(List<Integer> numbers) {
if (numbers.size() != 6) {
throw new IllegalArgumentException();
}
}

// TODO: 추가 기능 구현
private void dupValidate(List<Integer> numbers){
HashSet<String> set = new HashSet<>();
for(Integer e : numbers){
set.add(String.valueOf(e));
}
if(set.size()!=6){
throw new IllegalArgumentException();
}
}





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

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class LottoGenerator {
private final List<Lotto> lottos = new ArrayList<>();
public final int lottoQuantity;

public LottoGenerator(int money){
validateMoney(money);
lottoQuantity = money / 1000;
}

private void validateMoney(int money){
if (isZeroOrNegativeNumber(money) || !isDividedByOneThousand(money)) {
throw new IllegalArgumentException();
}
}
private boolean isZeroOrNegativeNumber(int money) {
return money <= 0;
}

private boolean isDividedByOneThousand(int money) {
return money % 1000 == 0;
}

public List<Integer> generateLottos(){
return new Random()
.ints(1, 45 + 1)
.distinct()
.limit(6)
.boxed()
.collect(Collectors.toList());
}
}
52 changes: 52 additions & 0 deletions src/test/java/lotto/LottoGeneratorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package lotto;

import lotto.domain.LottoGenerator;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

class LottoGeneratorTest {

@DisplayName("0원이면 예외가 발생한다.")
@Test
void createLottoNumberByZeroSize() {
assertThatThrownBy(() -> new LottoGenerator(0))
.isInstanceOf(IllegalArgumentException.class);
}

@DisplayName("1000으로 안나눠지면 예외가 발생한다.")
@Test
void createLottoNumberByNotDivide() {
assertThatThrownBy(() -> new LottoGenerator(525))
.isInstanceOf(IllegalArgumentException.class);
}

@DisplayName("잘 개수가 생성되는가.")
@Test
void lottoNumberSize() {
//give
final LottoGenerator lottoGenerator = new LottoGenerator(1000);
//when
final List<Integer> lottoNumber = lottoGenerator.generateLottos();
//then
assertThat(lottoNumber.size()).isEqualTo(6);
}

@DisplayName("범위가 올바른지")
@Test
void lottoNumberRange(){
//give
final LottoGenerator lottoGenerator = new LottoGenerator(1000);
//when
final List<Integer> lottoNumber = lottoGenerator.generateLottos();
//then
assertThat(lottoNumber.stream().allMatch(v -> v >= 1 && v <= 45)).isTrue();
}



}
11 changes: 11 additions & 0 deletions src/test/java/lotto/LottoTest.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package lotto;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import java.util.List;

import lotto.domain.Lotto;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand All @@ -23,4 +26,12 @@ void createLottoByDuplicatedNumber() {
}

// 아래에 추가 테스트 작성 가능

@DisplayName("랜덤으로 숫자 6개 생성")
@Test
void createRandomLottoNumber(){


}

}