Last active
July 8, 2023 09:47
-
-
Save YongWanJin/585975c4c7c6aecf9ebc18f9134e3482 to your computer and use it in GitHub Desktop.
제로베이스 백엔드 1주차 미니과제 7번
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
진용완 | |
제로베이스 백엔드 스쿨 15기 | |
*/ | |
import java.util.InputMismatchException; | |
import java.util.Scanner; | |
import java.util.*; | |
class ExceptionOutOfRange extends RuntimeException{} | |
class Lotto{ | |
// [ 변수 ] | |
int amt; // 구매 수량 | |
HashSet<Integer> myLotto; // 구매한 로또 (낱개) | |
HashSet[] myLottoList; // 구매한 로또 보관함 | |
char[] index = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; // 로또 일련번호 | |
HashSet<Integer> numOfLotto; // 당첨 번호 | |
Scanner sc; | |
Random rd; | |
Lotto(){} | |
// [ public 메서드 ] | |
// # 로또 구입(자동 추첨) 메서드 | |
public void buyLotto(){ | |
System.out.println("[로또 당첨 프로그램]\n"); | |
// 구매 수량 입력값 받기 | |
while (true) { | |
try{ | |
System.out.print("로또 개수를 입력해 주세요.(숫자 1 ~ 10):"); | |
sc = new Scanner(System.in); | |
amt = sc.nextInt(); | |
if (amt<1 | amt>10) { | |
throw new ExceptionOutOfRange(); | |
} | |
} catch (InputMismatchException | ExceptionOutOfRange e) { | |
continue; | |
} break; | |
} | |
// 구매한 수량만큼 로또 생성 | |
rd = new Random(); | |
myLottoList = new HashSet[amt]; | |
for (int i = 0; i<amt; i++) { | |
// 자동 추첨 | |
myLotto = chooseNum(); | |
// 추첨 결과 출력 | |
String f = formatNum(myLotto); | |
System.out.printf("%s %s\n", index[i], f); | |
// 구매한 로또 저장 | |
myLottoList[i] = myLotto; | |
} | |
System.out.println(); | |
} | |
// # 당첨 여부 확인 메서드 | |
public void showResult(){ | |
// 당첨 번호 추첨 | |
numOfLotto = chooseNum(); | |
// 추첨 결과 출력 | |
System.out.println("[로또 발표]"); | |
String f = formatNum(numOfLotto); | |
System.out.println(" " + f + "\n"); | |
// 당첨 여부 출력 | |
System.out.println("[내 로또 결과]"); | |
for (int i=0; i<amt; i++){ | |
HashSet<Integer> result = new HashSet<>(myLottoList[i]); | |
result.retainAll(numOfLotto); | |
String f2 = formatNum(myLottoList[i]); | |
System.out.printf("%s %s => %d개 일치\n", index[i], f2, result.size()); | |
} | |
} | |
// [ private 메서드 ] | |
// # 로또 번호 6개를 추첨하는 메서드 | |
private HashSet<Integer> chooseNum(){ | |
HashSet<Integer> lotto = new HashSet<Integer>(); | |
while(lotto.size()<6){ | |
lotto.add(rd.nextInt(45)+1); | |
} | |
return lotto; | |
} | |
// # 깔끔한 출력을 위해 로또 번호를 포메팅해주는 메서드 | |
private String formatNum(HashSet<Integer> lotto){ | |
// 오름차순 정렬 | |
ArrayList<Integer> lottoList = new ArrayList<>(lotto); | |
Collections.sort(lottoList); | |
// 간격 맞추기 | |
String f = ""; | |
for(int j = 0; j<6; j++) { | |
int n = lottoList.get(j); | |
if (n<10){ | |
f = f + "0" + n + ", "; | |
} else { | |
f = f + n + ", "; | |
} | |
} | |
f = f.substring(0, f.length()-2); | |
return f; | |
} | |
} | |
// 메인부 | |
public class Mini7Lotto { | |
public static void main(String[] args) { | |
Lotto lotto = new Lotto(); | |
lotto.buyLotto(); | |
lotto.showResult(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment