본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 31강 자바 배열 - 로또 프로그램

728x90
반응형

 

 

 

 

 

 

 

- 어떤 컴퓨터 언어를 배워도, 배열 관련을 배우면 항상 로또 프로그램을 제작하는 강좌가 있습니다.

- 그만큼 로또 프로그래밍이 공부에 도움이 많이 되기 때문입니다.

- 여태까지 배운 기능을 이용해서 로또 프로그램을 만들어 보겠습니다. 

- 컴퓨터에서 랜덤한 숫자를 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]을 눌러서 계속 다른 번호가 나오는지 테스트를 해보시길 바랍니다. 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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등 되시길 바랍니다!(저도.. 제발...)

 

 

 

 

 

728x90
반응형