Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-lotto-precourse

⚠️ 요구사항 분석 및 시행해야 하는 예외 처리

  • 입력

    • 구입 금액 입력
      • Validation - 1000원 단위로 안 떨어지면 예외 처리
    • 당첨 번호 입력
    • 보너스 번호 입력
      • Validation - 정수가 아니면 예외 처리
      • Validation - 1 이상 45 이하가 아니면 예외 처리
  • 출력

    • n 개 (n000원) 구매에 대한 랜덤 숫자 6개 * n 줄
    • 당첨 통계 출력
    • 총 수익률 출력 (소수점 둘째 자리에서 반올림)
  • 입력 Parser

    • 당첨 번호 파싱 → List
      • Validation - 쉼표 기준으로 띄쓰 등 parse 잘못된 경우 예외 처리
      • Validation - 쉼표 기준 파싱했을 때 숫자가 정수가 아닌 경우 예외 처리
  • Lotto

    • Validation - list size가 6이 아닌 경우 예외 처리 (이미 있음)
    • Validation - list 요소 하나 하나가 1 이상 45 이하가 아닐 경우 예외 처리
    • Validation - list 요소 중복 있을 경우 예외 처리
  • 동작

    • 1개의 로또 * n 개 발행 - 중복되지 않는 6개의 list 숫자 발행
    • 로또 발행 시 오름 차순으로 정렬하여 저장 → 출력
    • 1개의 로또 내부와 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 비교
    • 각각의 당첨 내역에 대해 다음과 같이 내역 저장 + 출력
    3 일치 (5,000) - 1
    4 일치 (50,000) - 0
    5 일치 (1,500,000) - 0
    5 일치, 보너스  일치 (30,000,000) - 0
    6 일치 (2,000,000,000) - 0

🚫 명시된 제약 사항

  • Lotto 클래스 - 변수 접근 제어자 변경 불가 / 인스턴스 변수 추가 불가
  • 예외 상황 시 에러 문구 “[ERROR]”로 시작
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.



기능 구현 목록

  • 입력

    • 구입 금액 입력
    • 당첨 번호 입력
    • 보너스 번호 입력
  • 출력

    • n개 (n000원) 구매에 대한 랜덤 숫자 6개 * n 줄 출력
    • 당첨 통계 출력
      • 일치 갯수, 보너스볼 여부, 당첨 갯수에 대해 포맷팅 하여 출력
    • 총 수익률 출력

  • 출력용 DTO

    • LottoResponseDto - 로또 리스트를 반환하여 사용
    • TotalPrizeResponseDto - 총 당첨 내역을 반환하여 사용
  • 입력 Parser

    • 당첨 번호 파싱 -> WinningNumberDto 로 변환
      • 쉼표 기준으로 띄어쓰기, 다른 구분자 등으로 인해 파싱 잘못된 경우 예외 처리
      • 쉼표 기준 파싱했을 때 숫자가 정수가 아닌 경우 예외 처리
    • 구입 금액 파싱 -> AmountDto 로 변환
      • 정수가 아닐 경우 예외 처리
    • 보너스 번호 파싱 -> BonusNumberDto로 변환
      • 정수가 아닐 경우 예외 처리

  • Lotto

    • 로또 발행(생성) 시 오름 차순으로 정렬하여 저장
      • list size 가 6이 아닌 경우 예외 처리
      • list 요소 하나 하나가 1 이상 45 이하가 아닐 경우 예외 처리
      • list 요소 중복 있을 경우 예외 처리
    • 로또 리스트 (6개) 값과 특정 값(1개) 비교, boolean 반환
    • 로또 리스트 (6개) 값과 당첨 번호 리스트 (6개) 비교, 일치 갯수 반환
    • WinningNumberDto -> Lotto로 변환하는 정적 팩터리 메서드 from 생성

  • WinningNumberDto

    • List 필드로 이루어짐

  • LottoNumberGenerator

    • 로또 랜덤 발행(로또 객체로 저장) - 1이상 45 이하 6개 숫자로 (미중복)생성

  • LottoNumber (Enum)

    • 1, 45, 6 등 로또 관련 상수 별도 선언
  • BonusNumber

    • 1 이상 45 이하가 아니면 예외 처리
    • BonusNumberDto -> BonusNumber로 변환하는 정적 팩터리 메서드 from 생성

  • BonusNumberDto

    • int number 필드로 이루어짐

  • Amount

    • 입력 값이 100000원 초과 (100회 초과)일 경우 예외 처리
    • 1000원 단위로 나눠지지 않을 경우 예외 처리
    • AmountDto -> Amount로 변환하는 정적 팩터리 메서드 from 생성

  • AmountDto

    • int amount 필드로 이루어짐

  • Issue

    • 1개의 로또 * n 개 발행 - 중복되지 않는 6개의 list 숫자 발행

  • Prize (Enum)

    • 당첨 기준 갯수와 금액 저장 (갯수, 보너스볼 여부, 금액)

  • WinningLottery

    • 전체 로또 발행 건에 대해 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 산출
      • 이때, 당첨 번호 6개 숫자 중 보너스 번호와 중복되는 것이 있으면 예외 처리
    • 1개의 로또 내부와 입력 받은 당첨 번호 + 보너스 번호를 비교하여 당첨 내역 비교
    • 각각의 로또 당첨 내역에 대해 저장
      3개 일치 - 5000원 / 4개 일치 - 50000원 / 5개 일치 - 1500000원 / 5개 일치 + 보너스볼 일치 - 30000000원 / 6개 일치 - 2000000000원

  • ReturnRate

    • 구매 금액 대비 당첨금 합에 대하여 총 수익률 계산 (소수점 둘째 자리에서 반올림)

  • LottoMachine (Controller)

    • 구입 금액에 따라 로또 개수로 변환 후, 랜덤 로또 생성 (반환)

    • 전체 입출력 플로우 작성
  • TotalPrize

    • 모든 당첨 항목에 대한 당첨 내역
    • 총 당첨금을 계산

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages