로또를 뽑아보자!
로또 당첨되면....좋겠다!
1. 일단 홈 꾸미기
public void lottoHome() {
lotto :
while(true) {
System.out.println("==========================");
System.out.println(" Lotto 프로그램");
System.out.println("--------------------------");
System.out.println(" 1. Lotto 구입");
System.out.println(" 2. 프로그램 종료");
System.out.println("==========================");
System.out.print("메뉴선택 : ");
int input = scan.nextInt();
switch(input) {
case 1: buyLotto(); break;
case 2: System.out.println("감사합니다"); break lotto;
default : System.out.println("잘못 입력하셨습니다.");
System.out.println(); break;
}
}
}
<결과>
==========================
Lotto 프로그램
---------------------------------------------
1. Lotto 구입
2. 프로그램 종료
========================== ---> Scanner scan = new Scanner(System.in);
메뉴선택 : ---> 으로 Scanner 하고, 스캐너로 메뉴를 고른다.
1번을 고르면 buyLotto()메서드로 이동한다!
구매를 시작하는 거지!
//로또 구매하는 메서드
private void buyLotto() {
System.out.println(" Lotto 구입 시작");
System.out.println();
System.out.println("(1000원에 로또번호 하나입니다.)");
System.out.print("금액 입력 : ");
int money = scan.nextInt();
System.out.println();
금액을 입력받는다. 이것도 Scanner로 받아서 int형 money에 받는다.
//로또 금액 계산.
int lotto = money / 1000; //로또 몇장?
int charge = money % 1000; //로또 거스름돈?
로또는 1000원으로 가정한다면,
받은 돈을 1000원으로 나누면
그 몫은 로또 몇장을 살 수 있는지가 된다. int형 lotto에 저장한다!
그 나머지는 로또를 사고 남은 거스름돈이 된다. int형 charge에 저장한다!
if(money < 1000) {
System.out.println("입력 금액이 너무 적습니다. 로또번호 구입 실패!!!");
System.out.println();
return;
}else if(money > 100000) {
System.out.println("입력 금액이 너무 많습니다. 로또번호 구입 실패!!!");
System.out.println();
return;
}else {
System.out.println("행운의 로또번호는 아래와 같습니다.");
for(int i=0; i<lotto; i++) {
selectNum();
System.out.print("로또번호" + (i+1) + lottoNum);
로또는 사재기, 사행성 방지를 위해 100장 이상 살 수 없도록 한다. 매우 건전한 사회로 이끌어 가고 있네!
1장 가격인 1000원보다 적은 돈을 내면 "입력 금액이 너무 적습니다. " 문구가 나오고,
100장 이상 구매하려고 하면 "입력 금액이 너무 많습니다." 문구가 나온다.
그게 아니라면, (1장이상 100장 이하 살 수 있는 금액이라면)
로또번호를 겹치지 않는 랜덤으로 뽑는 selectNum()메서드를 실행한다.
다 뽑은 번호는 lotto 구매 장수만큼 돌린다. 그럼 3장을 구매하면 (3000원) 로또번호 3셋트를 가질 수 있다.
selectNum()메서드는 아래에 ↓↓↓
ArrayList<Integer> lottoNum;
//로또 번호 뽑는 메서드
private void selectNum() {
Set<Integer> numSet = new HashSet<Integer>();
Random rnd = new Random();
while(numSet.size() < 6) {
numSet.add(rnd.nextInt(45)+1);
}
lottoNum = new ArrayList<Integer>(numSet);
Collections.shuffle(lottoNum);
}
Random 도구 생성해준 후,
while 문에 6번 굴린다. 주사위 굴리는 것 같다. 꼭.
이전 글에서 게시한 것 처럼 Set에는 중복되는 번호가 들어가지 않으므로 이럴 때 유용하게 사용한다.
그런데 index가 없어서 번호를 다 고른 후에는 lottoNum이라는 List에 넣어주었다.
Set은 자기 나름 정렬하여 나오는 형태가 있다. 무엇인지는 모른다. 그래서 shuffle을 이용하여 섞어주었다.
(코드는 참 신기하다. 정렬도 하고 섞기도 하고...
아직 코드를 다 읽을 줄은 몰라서 더 신기하고 더 재밌다. 가끔 안풀리고 이해 안될때는 정말 힘들지만 하하;)
System.out.printf("받은 금액은 %d원이고 거스름돈은 %d원입니다.", money, charge);
printf를 이용하여 거스름돈을 고객에게 안내했다.
이제 메인에서 실행하는 창을 보자!
//로또 메인
public static void main(String[] args) {
new Lotto().lottoHome();
}
}
초 간단!
메서드를 이용하니 메인이 간단하고 보기가 훨씬 좋다.