자바 로또 프로그램 소스 - jaba lotto peulogeulaem soseu

워누입니다! 

공부하다 심심해서 로또 프로그램을 만들었는데 중요한 개념이 몇개 들어가 있어서 재밌겠다 싶어 공유하고자 합니다.

만약 더 재밌거나 더 개선된 코드가 있다면 언제든 댓글로 남겨주세요! 

거두절미하고 먼저 소스부터 보겠습니다!

자바 로또 프로그램 소스 - jaba lotto peulogeulaem soseu
LottoNum 클래스

주석을 달기는 하였으나, 여기서 같이 봐야할 함수들, 메서드들을 같이 봅시다!

1. Math.random()

Math 함수는 java.lang 패키지에 포함된 함수로, 수학적 연산에 관련된 메서드를 지원합니다. 

random() 메서드가 그 중 하나입니다!

.

그럼 random() 메서드는 무슨 메서드냐? 바로 0.0부터 1.0사이의 실수(double)를 무작위로 응답하는 메서드입니다. 그냥 써버리면 0.242146.., 0.5, 0.9815 등 이상한 소수를 응답할 수도 있다는 이야기입니다.

이를 방지하기 위해 무작위로 응답한 소수에 45를 곱하고 그 뒤에 1을 더한 후 이를 int로 타입 변환을 시도합니다. 

이렇게 되면 정수형 변수 타입을 가지기 때문에 소수점 없이,

그리고 1을 무조건 더했으므로 0 없이 1~45 이내의 숫자를 출력할 수 있게 합니다. 

2. Arrays.sort()

Arrays 함수는 java.util 패키지에서 제공하는데, 그냥은 쓸 수 없습니다!

상단에 반드시 "import java.util.*"을 명시하여야만 사용할 수 있습니다. 

주로 배열에 관련된 메서드를 지원하는 함수이고, 그 안에 sort() 메서드가 있는 것입니다. 

.

여기서 sort()는 말 그대로 정렬시켜주는 메서드입니다. () 괄호 안에는 클래스에서 선언한 배열을 입력합니다. 

이미지 내 소스처럼 sort(lotto)라고 쓰게 되면,

lotto라는 배열 안에 들어간 값들을 오름차순으로 정렬하는 역할인 것입니다!

.

위 두개의 내용을 참고하여 상기 소스를 직접 입력해보시면 재미를 느끼실 수 있습니다. 

Lotto 클래스를 실행한 결과는 아래와 같습니다. 

.

자바 로또 프로그램 소스 - jaba lotto peulogeulaem soseu
1차 결과
자바 로또 프로그램 소스 - jaba lotto peulogeulaem soseu
2차 결과

.

진짜 로또처럼 숫자 여섯개가 나왔네요! 이걸로 진짜 로또에서..(크흠)

농담이구요! 상기 소스는 어려운 내용이 아니어서 직접 코딩해보시고 공부해보길 권장합니다. 

.

시간이 12시 26분이네요~ 전 이제 내일 출근을 위해 자러가야 할 듯 합니다 ㅎㅎ 

오늘 포스팅에 대한 질문은 언제든 댓글을 남겨주세요!! 그럼 이만 이번 포스팅 줄일게요! 안녕~~~

투케이2K

Java

31. (java/자바) lotto 로또 프로그램 (랜덤 번호 생성 및 당첨 확인) - Random(임의)정수값 생성, while(true)로또 번호 저장, for문 당첨 확인

투케이2K 2020. 12. 30. 08:04

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Eclipse

개발 언어 : Java

자바 로또 프로그램 소스 - jaba lotto peulogeulaem soseu

/* =========================== */

/* =========================== */

[소스 코드]

package Al;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class MainActivity9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[lotto 로또 프로그램 (랜덤 번호 생성 및 당첨 확인) - Random(임의)정수값 생성, while(true)로또 번호 저장, for문 당첨 확인 실시]");
		/*[설 명]
		 * 1. 로또 번호는 총 6개 번호를 지정한다
		 * 2. 6개 일치 : 1등 / 5개 일치 : 2등 / 4개 일치 : 3등 / 그외 : 꽝 으로 정한다
		 * 3. Random 객체를 사용해서 난수 랜덤 정수값을 생성한다 (1 ~ 45 정수 까지 범위 지정)
		 * 4. while(true) 사용해서 중복없는 랜덤 정수값 배열에 저장합니다
		 * 5. for 문을 사용해서 두배열 일치 값 개수를 확인하고 등수를 출력합니다
		 * 6. 참고 사항 - 일반적으로 이중 for문을 사용해 간편히 랜덤 로또 번호를 저장할 수 있으나,
		 *             while 문을 사용해서 작성해 보았습니다
		 */
		
		//로또 당첨 정답 번호 배열입니다 (총 6개 정답번호가 저장되어있습니다)
		int lotto[] = {3, 5, 24, 32, 10, 9};
		System.out.println("로또 당첨 번호 : "+Arrays.toString(lotto));
		
		//랜덤 정수값을 생성하기 위해 Random 객체를 생성해줍니다
		Random random = new Random();
		
		//random 랜던 정수값을 담을 배열을 선언해줍니다
		int number[] = new int[6];
		Arrays.fill(number, 0); //배열에 초기 전체 데이터 0을 모두 대입시켜줍니다
		
		int idx = 0; //배열 번지 번호를 지정하기 위한 인덱스 변수값 생성
		while(true) { 
			int zero = 0; //0이 아닌값이 정상적으로 모두 저장된것인지 확인 위해 변수 선언
			for(int i=0; i<number.length; i++) {
				if(number[i] == 0) { //배열 각 번지를 전체 확인 하면서 0 값이 있을 경우 zero 값을 증가시킴니다
					zero ++;
				}
			}
			//zero 변수값이 카운트된게 없을 경우 정상적으로 값이 모두 대입된 것을 확인
			if(zero <= 0) {				
				break; //while 무한 루프를 탈출합니다				
			}			
			else { //배열에 랜덤 정수값을 다 저장하지 않은 경우 수행합니다	
				//랜덤 정수값 1부터 45범위까지 임의 정수를 저장합니다
				int random_number = random.nextInt(45)+1;
				
				//배열에 랜덤으로 생성된 값이 이미 저장되어 있으면 중복저장하지 않기위해 검사를 실시합니다
				int check = 0;
				for(int k=0; k<number.length; k++) {
					if(number[k] == random_number) {
						check ++; //배열 각 번지를 전체 확인 하면서 일치하는 정수값이 있을 경우 check 값을 증가시킴니다
					}
				}
				
				//이미 저장된 값이 없을 경우 배열에 데이터를 저장시킵니다
				if(check <= 0) {
					number[idx] = random_number;
					idx ++; //저장을 수행하기 위한 배열 번지값을 증가시킨 후 다시 while문을 반복합니다
				}				
			}
		}//while 문 종료
		
		System.out.println("사용자 로또 번호 : "+Arrays.toString(number));
		
		int count = 0;
		for(int j=0; j<lotto.length; j++) { //로또 정답 배열
			for(int h=0; h<number.length; h++) { //사용자 로또 번호 배열
				if(lotto[j] == number[h]) { 
					count ++; //사용자 로또 배열 값이 로또 정답 배열 값이랑 같은게 있을 경우 count 증가
				}
			}
		}
		
		System.out.println("맞힌 개수 : "+count);
		
		if(count == 6) {
			System.out.println("등수 : "+"1등 입니다");	
		}
		else if(count == 5) {
			System.out.println("등수 : "+"2등 입니다");
		}
		else if(count == 4) {
			System.out.println("등수 : "+"3등 입니다");
		}
		else {
			System.out.println("등수 : "+"꽝 ... 입니다");
		}

	}//메인 종료

}//클래스 종료

/* =========================== */

[결과 출력]

[lotto 로또 프로그램 (랜덤 번호 생성 및 당첨 확인) - Random(임의)정수값 생성, while(true)로또 번호 저장, for문 당첨 확인 실시]

로또 당첨 번호 : [3, 5, 24, 32, 10, 9]

사용자 로또 번호 : [6, 3, 34, 10, 30, 45]

맞힌 개수 : 2

등수 : 꽝 ... 입니다

/* =========================== */

/* =========================== */

[요약 설명]

* 1. 로또 번호는 총 6개 번호를 지정한다

* 2. 6개 일치 : 1등 / 5개 일치 : 2등 / 4개 일치 : 3등 / 그외 : 꽝 으로 정한다

* 3. Random 객체를 사용해서 난수 랜덤 정수값을 생성한다 (1 ~ 45 정수 까지 범위 지정)

* 4. while(true) 사용해서 중복없는 랜덤 정수값 배열에 저장합니다

* 5. for 문을 사용해서 두배열 일치 값 개수를 확인하고 등수를 출력합니다

* 6. 참고 사항 - 일반적으로 이중 for문을 사용해 간편히 랜덤 로또 번호를 저장할 수 있으나,

                     while 문을 사용해서 작성해 보았습니다

/* =========================== */