Lotto프로그램(과제)

 

컴퓨터가 랜덤으로 발생시키는 값 6개를 저장하고, 사용자가 6개의 숫자를 입력 또는 랜덤 발생시킨다.

이 두개의 배열을 비교하여, 몇개의 숫자가 일치하였는지를 알아보는 프로그램

1. 배열 2개를 선언하고, 값을 넣는다.
※ 배열에 값을 넣을때는 중복된 값이 없어야한다.

2. 배열 2개의 비교를 위하여 정렬한다.

3. 배열 2개의 값을 비교하고, 일치하는 개수를 출력한다.

 

 

과제를 받았을때 아래와 같은부분을 생각했습니다.

 

   * 1. 직접 입력받을 것인지, 랜덤으로 발생시킬 것인지 선택하는 부분
   * 2. 6개의 배열공간에 랜덤발생하여 넣는데, 중복이면 다시 랜덤발생하는 부분
   * 3. 직접입력하더라도 중복이 되지 않게 값을 넣는 부분
   * 4. 오름차순으로 배열을 정렬하는 부분
   * 5. 비교하는 부분
   * 6. 일치하는 개수 출력

 

import java.util.*;

class LottoEx1 {
	private static Scanner sc;

	public static void main(String[] args) {
		/*
		 * 1. 직접 입력받을 것인지, 랜덤으로 발생시킬 것인지 선택하는 부분
		 * 2. 6개의 배열공간에 랜덤발생하여 넣는데, 중복이면 다시 랜덤발생하는 부분
		 * 3. 직접입력하더라도 중복이 되지 않게 값을 넣는 부분
		 * 4. 오름차순으로 배열을 정렬하는 부분
		 * 5. 비교하는 부분
		 * 6. 일치하는 개수 출력
		 */
		int lotto[] = new int[6];		// 로또 넘버를 저장하는 배열
		int insertNum[] = new int[6];	// 구입하는 로또번호(직접 입력/자동생성)
		boolean reNum=false;			// 로또 당첨 번호의 중복을 체크하는 변수
		boolean reInsert=false;			// 직접 입력할 때 중복을 체크하는 변수
		int select=0;		// 직접 입력할 것인지, 랜덤으로 번호를 추출할 것인지를 선택하는 변수
		int compareNum=0;	// 로또 당첨번호와 나의 번호를 비교하여 같은 번호가 몇개 있는지를 반환한다.
		int money=0;		// 당첨금
		Random lottoNum = new Random();
		
		
		while(true){
			System.out.println("로또번호를 직접입력하시려면 1 , 자동으로 생성하려면 2 를 입력하세요.");
			sc = new Scanner(System.in);
			try{
				select = sc.nextInt();
			}catch(Exception e){}
			
			if (select==1||select==2)
				break;
			System.out.println("입력값이 잘못되었습니다.\n");
		}
		
		switch(select){
			case 1: 	// 직접입력하는 경우
				/*
				 * 사용자가 직접 6개의 수를 입력하는 부분
				 */
				do{
					int cnt=0;
					while(cnt<6){
						try{			
							System.out.println("1~45까지 수 중 하나를 선택해주세요. ("+(cnt+1)+"번째)");
							sc = new Scanner(System.in);
							insertNum[cnt] = sc.nextInt();
						
							if(insertNum[cnt]<1||insertNum[cnt]>45){
								System.out.println("정상적인 범위의 값이 아닙니다.");
								cnt--;
							}
							
							cnt++;
						}catch(Exception e){
							System.out.println(e.getMessage());
						}
					}
					reInsert=bubbleSort(insertNum);
					cnt=0;
					if(reInsert==true){
						System.out.println("중복된 값이 있습니다. 다시 입력해주세요.\n");
					}
				}while(reInsert);
				System.out.print("\nMy Number : ");
				numPrint(insertNum);	// 입력한 로또 번호 출력
			
				break;
			case 2: 	// 자동으로 번호 생성하는 경우
				/*
				 * 값을 넣을 때마다 비교하여, 중복없이 6개의 난수 발생
				 * 두개의 반복문을 중첩시켜서 비교
				 * 비교후에 두 값이 다르면 while문을 빠져나가고 같다면 다시 반복실행
				 */
				for(int i=0;i<insertNum.length;i++){
					insertNum[i]=lottoNum.nextInt(45)+1; //0~44까지 난수를 발생시켜서 1을 더함
					
						while(true){
							boolean dupl=false;//중복을 검사하는 변수
							for(int j=0;j<i;j++){	
								if(insertNum[i]==insertNum[j]){
									dupl=true;//중복이 발생하면 true로 변환
								}
							}
							if(dupl==true){
								insertNum[i]=lottoNum.nextInt(45)+1;
							}
							else{
								break;//중복값이 없으면 while문을 빠져나감
							}
						
					}
				}
				bubbleSort(insertNum);
				System.out.print("\nMy Number : ");
				numPrint(insertNum); // 자동 추출한 로또 번호 출력
			
				break;

	}
				
		
		/*
		 * 중복방지하는 반복문 reNum값에 따라 반복한다.
		 *  bubbleSort에서 중복이 발생하면 true를 반환한다. 
		 *  그 반환값을 reNum에 받고, reNum값이 true면 다시 난수를 발생시켜서 저장한다.
		 */
		do{
			reNum=false;
			for(int i=0;i<lotto.length;i++){
				lotto[i]=lottoNum.nextInt(45)+1; //0~44까지 난수를 발생시켜서 1을 더함
			}
		
			reNum=bubbleSort(lotto);			//정렬을 하다 중복값이 발생하면 true값을 반환
		}while(reNum);
		
		
		
		
		

		compareNum=compare(lotto,insertNum);	// 같은 번호가 몇개인지 비교
		
		switch(compareNum){
		case 1: 
			money=0;
			break;
		case 2:
			money=0;
			break;
		case 3:
			money=5000;
			break;
		case 4:
			money=50000;
			break;
		case 5:
			money=69524088;
			break;
		case 6:
			money=1966538465;
			break;			
	}
		
		// 로또번호 출력
		System.out.print("Lotto Number : ");
		numPrint(lotto);
		System.out.println("\n일치하는 번호는 총 "+compareNum+"개 이고 당첨금액은 "+money+"원 입니다.");
		
	
		
	}
	
	// 버블정렬 메소드
	static boolean bubbleSort(int arr[]){
		int temp = 0;
			
		for (int j=0;j<arr.length-1;j++) {
			for (int i=0;i<arr.length-1;i++) {
				if (arr[i]>arr[i+1]){
					temp = arr[i];
					arr[i] = arr[i+1];
					arr[i+1] = temp;
				}
				if (arr[i]==arr[i+1]){
					return true;
				}
			}
		}
		return false;
	}
	
	
	//배열의 값을 출력하는 메소드
	static void numPrint(int arr[]){
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
	
	//배열 안의 값을 비교하는 메소드
	static int compare(int arr[],int arr2[]){
		int count=0;
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr2.length;j++){
				if(arr[i]==arr2[j])
					count++;
			}
		}
		
		return count;
	}
	
	
}
/*
  실행결과
  
  로또번호를 직접입력하시려면 1 , 자동으로 생성하려면 2 를 입력하세요.
2

My Number : 8 26 31 33 34 38 
Lotto Number : 2 5 31 33 34 37 

일치하는 번호는 총 3개 이고 당첨금액은 5000원 입니다.
*/

 

 

실행결과 중 예)

로또번호를 직접입력하시려면 1 , 자동으로 생성하려면 2 를 입력하세요.
2
My Number : 8 26 31 33 34 38
Lotto Number : 2 5 31 33 34 37
일치하는 번호는 총 3개 이고 당첨금액은 5000원 입니다.