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

[로또] 문희상 미션 제출합니다. #1354

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

Conversation

codrin2
Copy link

@codrin2 codrin2 commented Nov 4, 2024

요구 사항 정리

기능 요구 사항

로또 발행 기능

  • 1개의 로또를 발행할 때 중복되지 않는 6개의 숫자를 뽑는다.
  • 로또 번호의 숫자 범위는 1~45이다.
  • 로또 구입 금액을 입력하면 구입 금액에 맞는 수량의 로또를 발행한다.
  • 로또 한 장의 가격은 1,000원이다.

당첨 번호 입력 기능

  • 당첨 번호를 쉼표(,)로 구분하여 입력받는다.
  • 보너스 번호를 따로 입력받아 1~45 사이의 숫자 중에서 선택하도록 한다.

당첨 결과 산출 및 출력 기능

  • 당첨 번호 추첨 시 중복되지 않는 숫자 6개와 보너스 번호 1개를 뽑는다.
  • 구매한 로또와 당첨 번호를 비교하여 당첨 내역을 출력한다.
  • 당첨 등수는 1등부터 5등까지이며, 등수와 기준은 다음과 같다:
    • 1등: 6개 번호 일치 (2,000,000,000원)
    • 2등: 5개 번호 + 보너스 번호 일치 (30,000,000원)
    • 3등: 5개 번호 일치 (1,500,000원)
    • 4등: 4개 번호 일치 (50,000원)
    • 5등: 3개 번호 일치 (5,000원)
  • 수익률은 소수점 둘째 자리에서 반올림하여 출력하며, 수익률은 총 당첨 금액을 구입 금액으로 나누어 산출한다.

예외 처리

  • 잘못된 입력값이 발생할 경우 IllegalArgumentException을 발생시키고 "[ERROR]"로 시작하는 메시지를 출력한다.
  • 잘못된 입력이 발생한 경우, 해당 부분부터 입력을 다시 받는다.

프로그래밍 요구 사항

Java 코드 스타일과 구조

  • Java 21 버전에서 실행 가능하도록 구현한다.
  • Application 클래스의 main() 메서드에서 프로그램을 시작한다.
  • build.gradle 파일은 수정할 수 없고, 지정된 외부 라이브러리 외의 라이브러리는 사용하지 않는다.
  • System.exit()로 프로그램을 종료하지 않는다.
  • 들여쓰기(depth)를 3이 넘지 않도록 구현하며, 3항 연산자와 else 문을 사용하지 않는다.

테스트와 유효성 검사

  • JUnit 5AssertJ를 활용하여 모든 기능 목록을 테스트한다.
  • camp.nextstep.edu.missionutils 패키지의 Randoms.pickUniqueNumbersInRange()를 사용해 랜덤 값을 생성하고, Console.readLine()을 사용해 입력을 받는다.

메서드 구현 원칙

  • 메서드(함수)는 한 가지 일만 하도록 작게 구성하며, 길이는 15줄을 넘지 않도록 구현한다.
  • 메서드 이름은 의미 있는 이름을 사용하고, 불필요한 주석 없이 읽기 좋은 코드로 작성한다.

기능 명세서

로또 구입 금액 입력 기능

  • 로또 구입 금액을 입력 받아 구입 수량을 산출한다.
  • 입력받은 구입 금액은 1,000원 단위로 나누어 떨어져야 한다.
  • 예외
    • 구입 금액이 1,000원 단위가 아닐 경우: [ERROR] 구입 금액은 1,000원 단위여야 합니다.
    • 숫자가 아닌 값을 입력 할 경우: [ERROR] 유효한 숫자를 입력해야합니다.

로또 발행 기능

  • 구입 금액을 통해 발행할 로또 수량을 계산한 후, 해당 수량만큼 로또 번호를 생성한다.
  • 각 로또 번호는 오름차순으로 정렬되어 출력된다.

당첨 번호 입력 기능

  • 당첨 번호와 보너스 번호를 입력받는다.
  • 당첨 번호는 쉼표(,)로 구분되며, 보너스 번호는 별도로 입력받는다.
  • 예외
    • 당첨 번호 또는 보너스 번호가 1~45 사이의 숫자가 아닌 경우: [ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.
    • 당첨 번호의 개수가 6개가 아닌 경우: [ERROR] 로또 번호는 6개여야 합니다.
    • 당첨 번호나 보너스 번호에 중복된 숫자가 있을 경우: [ERROR] 중복된 숫자가 입력되었습니다.
    • 로또 구입 금액 부분을 비워넣고 입력한 경우: [ERROR] 로또 구입 금액을 입력하지 않았습니다.
    • 구입 금액이 1000원 미만일 경우: [ERROR] 구입 금액은 1,000원 이상이어야 합니다.
    • 당첨 번호 부분을 비워넣고 입력한 경우: [ERROR] 당첨 번호를 입력하지 않았습니다.
    • 보너스 번호 부분을 비워넣고 입력한 경우: [ERROR] 보너스 번호를 입력하지 않았습니다.
    • 쉼표가 연속으로 두번 이상 쓰인 경우: [ERROR] 구분자는 연속으로 사용될 수 없습니다.
    • 쉼표가 입력값의 처음이나 마지막 부분에 있는 경우: [ERROR] 구분자는 입력의 시작이나 끝에 위치할 수 없습니다.

당첨 결과 산출 기능

  • 각 로또와 당첨 번호를 비교하여 당첨 개수를 산출한다.
  • 1등에서 5등까지의 당첨 결과와 개수를 산출하여 출력한다.
  • 당첨 내역 및 수익률 출력 시 각 등수별 개수와 상금도 함께 출력한다.

수익률 산출 기능

  • 수익률은 총 당첨 금액을 구입 금액으로 나누어 산출하고, 소수점 둘째 자리에서 반올림하여 결과를 출력한다.

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