내가 보려고 정리하는/JAVA

로또를 뽑아보자!

보동이용용 2022. 12. 20. 20:07
반응형

로또 당첨되면....좋겠다!

 

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();
	}
}

초 간단!

메서드를 이용하니 메인이 간단하고 보기가 훨씬 좋다.

 

반응형