Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[로또] 맹인호 미션 제출합니다. #1342

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

MeangSung
Copy link

기능 요구사항

  1. 사용자 입력 처리
  • 사용자로부터 다음 세 가지 값을 입력받는다:
    • 로또 구입 비용
    • 당첨 번호
    • 보너스 번호
  • 각 입력값에 대해 유효성을 검사하고 잘못된 경우 IllegalArgumentException을 발생시킨다:
    • 로또 번호 입력
      • 입력된 로또 번호는 반드시 6개여야 하며, 1부터 45 사이의 정수만 포함해야 한다.
      • 중복된 번호가 있을 경우 예외를 발생시킨다.
    • 보너스 번호 입력
      • 보너스 번호는 1부터 45 사이의 정수여야 하며, 로또 번호와 중복되면 예외를 발생시킨다.
    • 로또 구입 비용 입력
      • 로또 구입 비용은 비어있지 않아야 하며, 양수여야 한다.
      • 1000원 단위여야 하며, 그렇지 않을 경우 예외를 발생시킨다.
      • 입력값이 숫자가 아닐 경우 예외를 발생시킨다.
      • 입력값이 0 이하일 경우 예외를 발생시킨다.
  1. 로또 번호 파싱
  • 사용자가 입력한 당첨 번호와 보너스 번호는 ','를 기준으로 분리하여 정수 리스트로 변환한다.
  • 각 번호가 유효한지 (1~45 범위) 확인한다.
  1. 랜덤 로또 번호 생성기
  • 로또 번호 생성기는 다음 방식으로 랜덤 번호를 생성한다:
    • RandomNumberCreator 클래스에서 createRandomNum(int start, int end, int count) 메서드를 사용하여 1부터 45까지의 숫자 중 6개의 고유한 랜덤 숫자를 생성한다.
    • 생성된 숫자는 오름차순으로 정렬된다.
    • 생성된 번호는 Lotto 클래스에 전달되어 유효성 검사를 받는다 (6개 번호, 1~45 범위, 중복 검사).
  • 사용자가 입력한 로또 구입 비용을 바탕으로 몇 개의 로또를 구매할 수 있는지 계산하고, 해당 수만큼 랜덤 로또 번호를 생성하여 Lottos 클래스에 추가한다.
  1. 당첨 결과 처리
  • 사용자가 입력한 당첨 번호와 보너스 번호를 기반으로 각 구매한 로또의 당첨 결과를 계산한다.
  • 로또의 결과는 다음 기준에 따라 등급을 매긴다:
    • 6개 일치: 1등
    • 5개 일치 + 보너스 번호 일치: 2등
    • 5개 일치: 3등
    • 4개 일치: 4등
    • 3개 일치: 5등
  • 각 로또의 번호와 비교하여 당첨 결과를 저장한다.
  1. 결과 출력
  • 각 등급에 따른 당첨자 수를 출력한다.
  • 총 수익률을 계산하여 출력한다.
    • 수익률은 (총 당첨금 / 총 구입 비용) * 100의 형태로 계산하여 소수점 한 자리까지 출력한다.

패키지 구조

  1. Application: 메인 애플리케이션 클래스. 프로그램의 시작 지점으로, 로또 플레이어를 초기화하고 실행합니다.
  2. parser
    • BonusNumberParser: 문자열로 입력된 보너스 번호를 정수로 파싱하고, 유효성을 검사하는 클래스입니다.
    • LottoParser: 사용자로부터 입력받은 로또 번호 문자열을 파싱하여 Lotto 객체로 변환하는 클래스입니다.
    • PriceParser: 로또 구입 비용을 파싱하고, 유효성을 검사하는 클래스입니다.
  3. adapter
    • InputAdapter: 입력 인터페이스를 구현하여 로또 번호, 보너스 번호, 구매 비용을 입력받는 기능을 제공합니다.
  4. input
    • Input: 로또 번호와 보너스 번호, 구매 비용을 입력받기 위한 인터페이스입니다.
    • AutoLottoInput: 콘솔을 통해 사용자로부터 입력을 받는 클래스입니다.
  5. output
    • Output: 로또 당첨 결과를 출력하는 클래스입니다.
  6. lottoPlayer
    • LottoType: 로또 타입을 정의하는 열거형입니다. 현재는 AUTO 타입만 있습니다.
    • LottoPlayer: 로또 플레이어 클래스로, 로또 게임을 시작하는 기능을 담당합니다.
    • LottoList: 로또 타입에 따라 로또 객체를 반환하는 클래스입니다.
  7. woowaLotto
    • WooWaLotto: 로또 게임을 실행하기 위한 인터페이스입니다.
    • WooWaAutoLotto: 자동 로또 구매 및 결과 계산 기능을 가진 클래스입니다.
  8. handler
    • AutoLottoHandler: 자동 로또 번호 생성을 위한 핸들러로, 로또 결과를 계산하고 반환합니다.
  9. domain
    • Lotto: 로또 번호를 관리하는 클래스입니다. 유효성 검사를 포함합니다.
    • LottoResult: 로또 결과 및 수익률을 관리하는 클래스입니다.
    • Lottos: 여러 개의 로또 번호를 관리하는 클래스입니다.
    • PickedLotto: 사용자가 선택한 로또 번호와 보너스 번호를 관리하는 클래스입니다.
  10. util
    • RandomNumberCreator: 랜덤으로 로또 번호를 생성하는 유틸리티 클래스입니다.

기능 요구사항 및 패키지 구조 작성
Lotto 도메인으로, 자체 유효성 검사도 시행
LottoList 도메인으로, 자체 유효성 검사도 시행
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant