- 어떤 컴퓨터 언어를 배워도, 배열 관련을 배우면 항상 로또 프로그램을 제작하는 강좌가 있습니다.
- 그만큼 로또 프로그래밍이 공부에 도움이 많이 되기 때문입니다.
- 여태까지 배운 기능을 이용해서 로또 프로그램을 만들어 보겠습니다.
- 컴퓨터에서 랜덤한 숫자를 1~45 사이로 6개를 로또번호로 받고, 보너스 번호도 한 개 더 받겠습니다.
- 사용자의 로또번호에 따른 등수를 반환하는 프로그램을 만들겠습니다.
- 6개를 맞추면 1등, 5개와 보너스를 맞추면 2등, 5개면 3등, 4개면 4등, 3개면 5등, 나머지는 꽝입니다.
1. 로또 당첨번호를 랜덤으로 생성
- 1~45사이 숫자를 7개를 반환받고, 마지막을 보너스로 사용하겠습니다.
- 일단 컴퓨터가 랜덤한 로또 당첨번호를 반환하는 것을 해보겠습니다.
## 로또 당첨번호 반환 코드 - Ex14_ArrayLotto.java
package ch18_array;
import java.util.Arrays;
public class Ex14_ArrayLotto {
public static void main(String[] args) {
//7개짜리 배열을 만들어 로또 당첨 번호를 랜덤으로 생성 - 1번 배열
int [] tmp = new int[7];
//같은 번호가 나오는지 체크하기 위한 숫자를 셀 변수
int count = 0;
//랜덤한 수의 범위 처리
int min = 1, max = 45;
//7번 반복하기 위한 반복문
while(count < tmp.length) {
//1~45사이의 랜덤한 수를 받응ㄹ 변수
int r = (int)(Math.random() * (max - min + 1) + min);
//for문 밖에서도 i가 사용되기때문에 밖에 선언
int i;
//기존 배열의 숫자의 개수만큼 반복
for(i=0;i<count;i++) {
if(r == tmp[i]) { //현재 랜덤한 수가 기존 배열과 같다면
break; //현재 for반복을 멈춤
}
}
//i와 count가 같다면, 반복된 값이 아니면
if(i == count) {
//현재 count번째 배열에 랜덤한 수 담고 count는 1증가
tmp[count++] = r;
}
}
//위에서 생성한 배열 중 0번 위치부터 6개를 새로운 배열에 복사 - 2번 배열
int [] lotto = new int[6];
System.arraycopy(tmp, 0, lotto, 0, 6);
//1번 배열 6번지에 있는 값을 보너스로 지정 - 보너스 번호
int bonus = tmp[6];
//2번 배열을 오름차순 정렬 후 출력
Arrays.sort(lotto);
System.out.print("로또번호 : ");
for(int i=0;i<lotto.length;i++) {
System.out.print(lotto[i] + " ");
}
System.out.println(" [" + bonus + "]");
}
}
- 설명은 코드에 다 써놨으므로 확인해 보면 됩니다.
## 로또 당첨번호 반환 결과 - Ex14_ArrayLotto.java
- [Ctrl]+[F11]을 눌러서 계속 다른 번호가 나오는지 테스트를 해보시길 바랍니다.
2. 사용자가 번호를 입력 후 당첨확인
- 그럼 사용자가 번호를 입력하도록 하겠습니다.
- 이때 번호의 구분은 띄어쓰기로 하겠습니다.
- 6개의 번호를 입력했을 때 결과를 반환받아보겠습니다.
## 사용자 코드와 비교 후 당첨결과 확인 코드 - Ex14_ArrayLotto.java
package ch18_array;
import java.util.Arrays;
import java.util.Scanner;
public class Ex14_ArrayLotto {
public static void main(String[] args) {
//7개짜리 배열을 만들어 로또 당첨 번호를 랜덤으로 생성 - 1번 배열
int [] tmp = new int[7];
//같은 번호가 나오는지 체크하기 위한 숫자를 셀 변수
int count = 0;
//랜덤한 수의 범위 처리
int min = 1, max = 45;
//7번 반복하기 위한 반복문
while(count < tmp.length) {
//1~45사이의 랜덤한 수를 받응ㄹ 변수
int r = (int)(Math.random() * (max - min + 1) + min);
//for문 밖에서도 i가 사용되기때문에 밖에 선언
int i;
//기존 배열의 숫자의 개수만큼 반복
for(i=0;i<count;i++) {
if(r == tmp[i]) { //현재 랜덤한 수가 기존 배열과 같다면
break; //현재 for반복을 멈춤
}
}
//i와 count가 같다면, 반복된 값이 아니면
if(i == count) {
//현재 count번째 배열에 랜덤한 수 담고 count는 1증가
tmp[count++] = r;
}
}
//위에서 생성한 배열 중 0번 위치부터 6개를 새로운 배열에 복사 - 2번 배열
int [] lotto = new int[6];
System.arraycopy(tmp, 0, lotto, 0, 6);
//1번 배열 6번지에 있는 값을 보너스로 지정 - 보너스 번호
int bonus = tmp[6];
//2번 배열을 오름차순 정렬 후 출력
Arrays.sort(lotto);
System.out.print("로또번호 : ");
for(int i=0;i<lotto.length;i++) {
System.out.print(lotto[i] + " ");
}
System.out.println(" [" + bonus + "]");
//사용자 번호를 입력(6개)해서 배열에 저장 - 3번 배열
int [] user = new int[6];
//스캐너 시작
Scanner scan = new Scanner(System.in);
System.out.print("당신번호 : ");
//6개를 user배열에 각각 담기
for(int i=0;i<6;i++) {
user[i] = scan.nextInt();
}
//당첨 개수 확인(이중반복문)
int sameCount = 0;
for(int i=0;i<lotto.length;i++) {
for(int j=0;j<user.length;j++) {
if(lotto[i] == user[j]) {
sameCount++;
break;
}
}
}
//당첨 개수에 따른 등수를 출력
switch(sameCount) {
case 6:
System.out.println("1등!");
break;
case 5:
int i;
//사용자가 입력한 번호에 보너스와 일치하는 번호가 있는지 확인
for(i=0;i<user.length;i++) {
if(bonus == user[i]) {
break;
}
}
//보너스번호와 일치하는 번호가 없으면
if(i == user.length) {
System.out.println("3등!");
}else {
System.out.println("2등!");
}
break;
case 4:
System.out.println("4등!");
break;
case 3:
System.out.println("5등!");
break;
default:
System.out.println("꽝!");
break;
}
}
}
- 코드에 주석으로 설명을 달아놨습니다.
## 사용자 코드와 비교 후 당첨결과 확인 결과 - Ex14_ArrayLotto.java
- 모두 1등 되시길 바랍니다!(저도.. 제발...)
'컴퓨터언어 > JAVA(자바)' 카테고리의 다른 글
[JAVA] 33강 자바 객체 배열 - 학생 성적 관리 (0) | 2024.01.29 |
---|---|
[JAVA강좌] 32강 자바 배열 - 배스킨라빈스31게임 (0) | 2024.01.29 |
[JAVA강좌] 30강 배열 정렬 - sort() (0) | 2024.01.26 |
[JAVA강좌] 29강 배열 복사하기 (0) | 2024.01.26 |
[JAVA강좌] 28강 객체 배열 생성 (0) | 2024.01.26 |