Dev/Java

Java 예제 - 로또 번호 만들기 ( random, array, nested For loop)

surimi🍥 2020. 9. 10. 18:27
반응형


 로또게임


 사용자로부터 숫자를 입력 받아서
 6개가 다 맞을시: 1등
 5개가 맞을시: 2등
 4개: 3등
 3개: 4등
 이 출력되는 프로그램을 작성하시오.
 단 사용자가 1~45를 벗어난 값을 입력하면
 올바른 값을 입력할때까지 다시 입력을 하게 만드세요

[ 프로그램 실행 예시 ]

더보기


당첨 번호 추첨 완료.
1 ~ 45 범위 내 번호 입력해주세요
1번째 숫자를 입력하세요 :999
잘못 입력되었습니다. (범위 밖 or 중복)
1번째 숫자를 입력하세요 :0
잘못 입력되었습니다. (범위 밖 or 중복)
1번째 숫자를 입력하세요 :45
2번째 숫자를 입력하세요 :1
3번째 숫자를 입력하세요 :1
잘못 입력되었습니다. (범위 밖 or 중복)
3번째 숫자를 입력하세요 :45
잘못 입력되었습니다. (범위 밖 or 중복)
3번째 숫자를 입력하세요 :3
4번째 숫자를 입력하세요 :4
5번째 숫자를 입력하세요 :5
6번째 숫자를 입력하세요 :6
로또번호 정렬 완료
사용자번호 정렬 완료
당첨 번호 : 1 5 26 30 38 44 
사용자 번호 : 1 3 4 5 6 45 
탈락입니다 ㅠㅠ
 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class LottoGame {

	final static int SIZE = 6;  // SIZE 는 lottoNumbers.length(); 와 역할이 같음.
	final static int MAX = 45;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Random random = new Random();

		int[] lottoNumbers = new int[SIZE];  
		int[] userNumbers = new int[SIZE];
		int score = 0;

		// lottoNumbers에서 범위( 1 ~ 45 )내 숫자 인덱스에 입력.
		for (int i = 0; i < SIZE; i++) {	
			lottoNumbers[i] = random.nextInt(MAX) + 1;
		}

		// lottoNumbers 배열 내 숫자 중복 제거
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				if (i != j && lottoNumbers[i] == lottoNumbers[j]) {
					lottoNumbers[i] = random.nextInt(MAX) + 1;
					j = -1;
				}
			}
		}
		System.out.println("당첨 번호 추첨 완료.");

		// userNumbers 입력 받기
		System.out.println("1 ~ 45 범위 내 번호 입력해주세요");

		for (int i = 0; i < SIZE; i++) {

			System.out.print((i + 1) + "번째 숫자를 입력하세요 :");
			userNumbers[i] = Integer.parseInt(br.readLine());

			//중복을 입력하면 true가 boolean 변수에 저장되도록 만들어보자
			boolean isDuplicated = false;
			for(int j = 0; j < i; j++) {
				if (userNumbers[i] == userNumbers[j]) {
					isDuplicated = true;
				}
			}
			
			// userNumbers 범위 밖 숫자를 입력하거나 중복일 경우 에러
			if (userNumbers[i] <= 0 || userNumbers[i] > MAX || isDuplicated) {
				
				// if는 (true / false)로 중괄호 내 코드가 실행될지 안될지 구분하는데,
				// boolean 변수인 isDuplicated는 그 자체로 true / false로써 동작하므로
				// isDuplicated = true라고 조건식을 입력할 필요 x
				
				System.out.println("잘못 입력되었습니다. (범위 밖 or 중복)");
				i--;
			}

		}

		// lottoNumbers 배열 정렬
		for (int i = 0; i < SIZE - 1; i++) {
			if (lottoNumbers[i] > lottoNumbers[i + 1]) {
				int temp = lottoNumbers[i];
				lottoNumbers[i] = lottoNumbers[i + 1];
				lottoNumbers[i + 1] = temp;
				i = -1;
			}
		}
		System.out.println("로또번호 정렬 완료");

		// userNumber 배열 정렬
		for (int i = 0; i < SIZE - 1; i++) {
			if (userNumbers[i] > userNumbers[i + 1]) {
				int temp = userNumbers[i];
				userNumbers[i] = userNumbers[i + 1];
				userNumbers[i + 1] = temp;
				i = -1;
			}
		}
		System.out.println("사용자번호 정렬 완료");

		// 당첨번호 & 입력번호 발표
		System.out.print("당첨 번호 : ");
		for (int i = 0; i < SIZE; i++) {
			System.out.print(lottoNumbers[i] + " ");
		}

		System.out.println();
		System.out.print("사용자 번호 : ");
		for (int i = 0; i < SIZE; i++) {
			System.out.printf(userNumbers[i] + " ");
		}

		// 번호 배열 비교
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				if (lottoNumbers[i] == userNumbers[j])
					score++;
			}
		}

		// 결과 1
		System.out.println();
//		if (score >= 4) {
//			System.out.println("총 " + score + "개 맞추셨습니다. " + (7 - score) + "등 당첨입니다!!!");
//		} else {
//			System.out.println(score + "개 맞았습니다. 탈락입니다 ㅠㅠ");
//		}
		
		//결과 2번째 방법 (switch이용)
		
		switch(score) {
		case 6:
	         System.out.println("총"+ score+ "개 맞추셨습니다. 1등입니다.");
	         break;
		case 5:
	         System.out.println("총"+ score+ "개 맞추셨습니다. 2등입니다.");
	         break;
		case 4:
	         System.out.println("총"+ score+ "개 맞추셨습니다. 3등입니다.");
	         break;
		case 3:
			default:
				System.out.println("탈락입니다 ㅠㅠ");
				break; // 안넣어도 되지만 원칙적으로 넣어줌
		}

	}
}
반응형