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

[로또] 김채원 미션 제출합니다. #1340

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

Conversation

Dim-chae
Copy link

@Dim-chae Dim-chae commented Nov 4, 2024

No description provided.

[기능 요구 사항]
로또 문제에 대한 로직을 기능 별로 분리 및 순차 정리

- 초기 입력: 구입 금액 / 당첨 번호 6개 / 보너스 번호 1개
- 구매 수량에 따른 난수 생성 (1-45 범위 내 중복 없는 6개의 수)
- 구매 수량 및 생성된 난수 출력
- 당첨 케이스에 따른 당첨 여부 판별
- 당첨 통계(수익률, 총 당첨 내역) 출력

[예외 케이스]
각 입력에 따라 계산이 되지 않는 수를 구분하여 예외 케이스 작성

기본(모든 입력에 적용) / 구입 금액 / 당첨 번호 / 쉼표 기준 6개 번호
- 구입 금액을 입력 받은 다음, 1000으로 나눈 값을 lottoCount(구매 수량) 변수에 저장
- 입력 받은 값이 숫자가 아닌 경우 IllegalArgumentException 반환
- 당첨 번호를 입력 받아 lottoNumber 변수에 저장 (parsing을 위해 String으로 입력 받음)
- 보너스 번호를 입력 받아 bonusNumber 변수에 저장
- 보너스 번호를 숫자로 입력하지 않을 경우 IllegalArgumentException 반환
- lottoCount, bonusNumber 변수의 선언이 try 문 내에 있어 외부에서 접근 불가능한 문제를 try 문 외부로 이동함으로써 해결
- 입력을 받아 바로 1000으로 나누지 않고 money 변수를 추가하여 구입 금액 값의 검사를 진행함
- 검사가 완료된 money의 값만 lottoCount 변수를 1000으로 나눈 값으로 저장함
- Randoms.pickUniqueNumbersInRange() 메소드를 이용하여 1부터 45까지 무작위로 중복 없이 6개의 값을 생성하고 저장함
- 구입 금액을 입력 받을 때 계산한 구매 수량만큼 반복함
- 구매 수량과 그 수량만큼 저장한 로또 번호를 6개씩 불러와서 출력함
- 생성 및 저장한 로또 번호를 불러오기 위해 Lotto 클래스의 numbers 컨테이너 값을 반환하는 getNumbers() 메소드 추가
- 당첨 번호 문자열을 split() 메소드를 통해 쉼표 단위로 나눈 다음, 반복문을 통해 int 타입으로 변환하고 당첨 번호(winningNumbers) 컨테이너에 저장함
- 각 로또 번호가 당첨 번호와 일치하면 일치 개수 변수를 1 더하고, 보너스 번호와 일치하면 hasBonus 변수를 true로 변경함
- 각 인덱스를 당첨 번호와 생성된 로또 번호가 몇 개 일치하는지 나타내도록 설정함 (7의 경우 5개 및 보너스 볼 일치)
[총 당첨 금액]
- 각 당첨 케이스(3개 / 4개 / 5개 / 5개 및 보너스 볼 / 6개 일치)가 나온 횟수와 당첨 금액을 곱하여 계산함
- 큰 수를 가독성 있게 표현하기 위해 당첨 금액 표기에 언더바를 이용함

[수익률]
- 총 당첨 금액을 100으로 곱한 값(백분율)과 구입 금액을 나누어 계산함
- 당첨 통계: 당첨 결과 배열을 인덱스를 이용해 꺼내어 각 당첨 케이스 별로 출력함

- 수익률: 소수점 둘째 자리에서 반올림하도록 포맷하여 출력함
- Collections.sort() 메소드를 사용하여 생성된 로또 번호들을 1장(번호 6개) 기준으로 정렬함
- 중복된 숫자, 1-45 범위를 넘는 숫자에 대한 검사 로직을 추가함
- 빈 문자열, 범위를 넘는 수, 0, 음수에 대한 테스트 케이스를 추가함
- Lotto: 로또 번호 관리 및 유효성 검사
- LottoGenerator: 랜덤 로또 번호 생성
- LottoGame: 로또 게임 진행 및 결과 계산
- InputProcessor: 사용자 입력 처리
- InputValidator: 입력값 유효성 검사
- WinningResult: 당첨 결과 관리 및 통계 계산
- LottoRank: 당첨 등수 및 상금 정의 (enum)
- Application: 메인 애플리케이션 실행
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