간단한 로또 발매기를 구현한다.
- 로또 번호의 숫자 범위는 1 ~ 45 이다.
- 1개의 로또를 발행할 때 중복되지 않는 숫자 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원
- 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다.
- 로또 1장의 가격은 1,000원이다.
- 당첨 번호와 보너스 번호를 입력받는다.
- 사용자가 구매한 로또 번호와 당첨 번호를 비교하여 당첨 내역 및 수익률을 출력하고 로또 게임을 종료한다.
- 사용자가 잘못된 값을 입력한 경우 IllegalArgumentException을 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 받는다.
- Exception이 아닌 IllegalArgumentException, IllegalStateException 등과 같은 명확한 유형을 처리한다.
- 로또 구입 금액을 입력받는다. 구입 금액은 1,000원 단위로 입력 받으며 1,000원으로 나누어 떨어지지 않는 경우 예외처리한다.
- 당첨 번호를 입력 받는다. 번호는 쉼표(,)를 기준으로 구분한다.
- 보너스 번호를 입력 받는다.
- 발행한 로또 수량 및 번호를 출력한다.
- 로또 번호는 오름차순으로 정렬하여 보여준다.
- 당첨내역을 출력한다.
- 수익률은 소수점 둘째 자리에서 반올림한다.(ex. 100.0%, 51.5%, 1,000,000.0%)
- 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 "[ERROR]"로 시작해야 한다.
- indent 2까지만 허용
- 3항 연산자 금지
- 메서드는 최대한 작게
- 메서는의 길이는 15라인 이하
- else 사용 금지
- Enum 적용
- 주어진 Lotto 클래스 사용해야하며, 내부 필드(인스턴스 변수) 추가 금지, 접근제어자 변경 금지, 페키지 변경은 가능
- 로또 구입 금액 입력 기능
- 당첨 번호 입력 기능
- 번호를 쉼표로 구분하는 기능
- 보너스 번호 입력 기능
- 발행한 로또 수량 출력 기능
- 발행한 로또 번호 출력 기능
- 오름차순 정렬 기능
- 당첨내역 출력 기능
- 수익률 출력 기능
- 예외 상황 시 [ERROR]문구 출력 기능
- 로또 숫자들이 생성되는 기능
- 1000원 단위로 로또 1개(6개 랜덤 숫자) 발행기능
- 숫자 일치 확인 기능
- 1,2,3,4,5등 확인 기능
- 수익률(-100% ~ 200,000,000%) 계산 기능
- 수익률 소수점 둘째 자리에서 반올림 기능
- Randoms.pickUniqueNumbersInRange(1, 45, 6) : 1~45 사이 중복되지 않은 정수 6개 반환
- Console.readLine() : 사용자 입력 기능
- 구입 금액이 1,000원으로 나누어 떨어지지 않는 경우 예외 발생
- 구입 금액을 음수로 입력 시 예외 발생
- 당첨 번호 입력 시 숫자 이외의 문자, 특수문자가 들어가는 경우 예외 발생
- 구분자가 쉼표가 아닐 경우 예외 발생
- 보너스 번호 입력 시 숫자 이외의 문자, 특수문자 입력 시 예외 발생
- 당첨번호, 보너스 번호 입력 시 허용된 숫자범위(1~45)이외 숫자 입력 시 예외 발생
- 당첨번호, 보너스 번호 간의 중복된 숫자 입력 시 예외 발생
- 사회 상황에 따라서 각 등수별 당첨금액이 달라질 수 있다.
- 사회 상황에 따라서 로또 번호들의 범위(1~45)가 변할 수 있다
- 로또가 1~5 등 말고도 7, 8등이 생길 수도 있다. 즉 등수가 더 다양해 질 수 있음.
- 사회 상황에 따라서 번호가 6개 이상으로 될 수 있을꺼 같다(= 최근 뉴스에 나옴)
- 사회 상황에 따라서 1000원에 로또 한장이 아니라 2000원에 로또 한장 이런식으로 변할 수도 있을거 같음