drexqq

[Java, 자바] 로또숫자 생성기(lotto) 본문

공부노트/개인공부!

[Java, 자바] 로또숫자 생성기(lotto)

drexqq 2020. 5. 24. 21:04
728x90
반응형

Java를 이용하여 1 ~ 5등이 나올 때까지 자동으로 숫자를 생성해주는 프로그램을 만들어보았다.

 

1 ~ 5등이 한 번이라도 당첨될 때까지 자동으로 숫자 생성

1 ~ 45의 숫자

6개의 당첨 숫자와 1개의 보너스 숫자

유저
6개의 숫자
 
조건
자리와 상관없음
1등 - 6개의 숫자 보너스 x
2등 - 5개의 숫자 + 보너스 o
3등 - 5개의 숫자 
4등 - 4개의 숫자
5등 - 3개의 숫자
2개 이하의 숫자 꽝

 

코드

package main;

import java.util.Arrays;

public class lotto {

	public static void main(String[] args) {
		// lotto program
		// 1 ~ 5등이 한 번이라도 당청될 때까지 자동으로 입력
		/*
		 	1 ~ 45의 숫자
		 	6개의 당첨 숫자와 1개의 보너스 숫자
		 	
		 	유저
		 	6개의 숫자
		 	
		 	조건
		 	자리와 상관없음
		 	1등 - 6개의 숫자 보너스 x
		 	2등 - 5개의 숫자 + 보너스 o
		 	3등 - 5개의 숫자 
		 	4등 - 4개의 숫자
		 	5등 - 3개의 숫자
		 	2개 이하의 숫자 꽝
		*/
		// 메인 숫자
		int main[] = new int[6];
		// 보너스 숫자 생성
		int bonus = 0;
		// 보너스 숫자 유효성
		boolean bonusCheck = false;
		// 보너스 맞춤 여부
		boolean bonusCollect = false;
		
		// 유저 숫자 생성
		int user[] = new int[6];
		
		// 맞은 숫자 확인
		int collect = 0;
		
		// 당첨여부
		boolean win = false;
		// 등수
		int grade = 0;
		// 추첨된 횟수
		int count = 0;
		
		// 6개의 로또숫자 생성 (중복 X)
		for (int i = 0; i < main.length; i++) {
			main[i] = ((int) (Math.random() * 45) + 1);
			for (int j = 0; j < i; j++) {
				// 메인 숫자중 중복숫자 제거
				if (main[i] == main[j]) {
					i--;
				}
			}
		}
		// 낮은 숫자 순으로 정렬
		Arrays.sort(main);
		// 당첨 결과 출력
		System.out.println("당첨결과는 "+main[0]+", "+main[1]+", "+main[2]+", "+main[3]+", "+main[4]+", "+main[5]+"입니다.");
		
		// 메인숫자와 중복되지않도록 보너스 숫자 재생성
		while (!bonusCheck) {
			bonus = ((int) (Math.random() * 45) + 1);
			if (bonus == main[0] || bonus == main[1] || bonus == main[2] || bonus == main[3] || bonus == main[4] || bonus == main[5]) {
				bonusCheck = false;
			}
			else {
				bonusCheck = true;
			}
		}
		System.out.println("보너스 : "+bonus);
		
		// 1 ,2 등이 한 번이라도 당첨될 때까지
		while (!win) {
			// 6개의 유저 숫자 생성
			for (int i = 0; i < user.length; i++) {
				user[i] = ((int) (Math.random() * 45) + 1);
				for (int j = 0; j < i; j++) {
					// 유저 숫자중 중복숫자 제거
					if (user[i] == user[j]) {
						i--;
					}
				}
			}
			// 당첨결과 확인
			for (int i = 0; i < 6; i++) {
				for (int j = 0; j < 6; j++) {
					// 당첨 숫자와 추첨 숫자 비교
					if (main[i] == user[j]) {
						collect++;
					}
				}
				// 보너스 숫자와 추첨 숫자 비교
				if (bonus == user[i]) {
					collect++;
					bonusCollect = true;
				}
			}
			count++;
			// 보너스 여부와 관계없이 3개이상 맞추게 되면 종료되도록
			if (collect > 2) {
				win = true;
			} else {
				win = false;
			}
		}
		// 낮은 숫자 순으로 정렬
		Arrays.sort(user);
		
		// 등수
		if (collect == 6 && !bonusCollect)		grade = 1;
		else if (collect == 6 && bonusCollect)	grade = 2;
		else if (collect == 5)					grade = 3;
		else if (collect == 4)					grade = 4;
		else if (collect == 3)					grade = 5;
		
		// 추첨 결과 출력
		System.out.println("추첨숫자는 "+user[0]+", "+user[1]+", "+user[2]+", "+user[3]+", "+user[4]+", "+user[5]+"입니다.");
		System.out.println(count+"회 만에 "+grade+"등에 당첨 되셨습니다.");
		System.out.println("사용하신 금액은"+count*1000+"원 입니다.");
	}
}
728x90
반응형
Comments