워누입니다!
공부하다 심심해서 로또 프로그램을 만들었는데 중요한 개념이 몇개 들어가 있어서 재밌겠다 싶어 공유하고자 합니다.
만약 더 재밌거나 더 개선된 코드가 있다면 언제든 댓글로 남겨주세요!
.
거두절미하고 먼저 소스부터 보겠습니다!
.
주석을 달기는 하였으나, 여기서 같이 봐야할 함수들, 메서드들을 같이 봅시다!
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 클래스를 실행한 결과는 아래와 같습니다.
.
.
진짜 로또처럼 숫자 여섯개가 나왔네요! 이걸로 진짜 로또에서..(크흠)
농담이구요! 상기 소스는 어려운 내용이 아니어서 직접 코딩해보시고 공부해보길 권장합니다.
.
시간이 12시 26분이네요~ 전 이제 내일 출근을 위해 자러가야 할 듯 합니다 ㅎㅎ
오늘 포스팅에 대한 질문은 언제든 댓글을 남겨주세요!! 그럼 이만 이번 포스팅 줄일게요! 안녕~~~
투케이2K
Java
31. (java/자바) lotto 로또 프로그램 (랜덤 번호 생성 및 당첨 확인) - Random(임의)정수값 생성, while(true)로또 번호 저장, for문 당첨 확인
투케이2K 2020. 12. 30. 08:04
/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : Eclipse
개발 언어 : Java
/* =========================== */
/* =========================== */
[소스 코드]
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 문을 사용해서 작성해 보았습니다
/* =========================== */