본문 바로가기

JAVA/국비 공부

3월15일(12일 과제 로또)

package day0315;

// 메소드 분리가 되어있는 로또 게임
import java.util.Random;
import java.util.Scanner;

import util.ScannerUtil;

public class LottoGame01 {
    // 1. main()
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int gameNumbers = ScannerUtil.nextInt(scanner, "몇 게임 하실건가요?");

        // 컴퓨터 int 배열
        int[] computerNumbers = new int[6];

        // 사용자 숫자 배열
        int[][] userNumbers = new int[gameNumbers][6];

        // 컴퓨터 배열에 숫자 넣기
        selectRandomNumbers(computerNumbers);
        // 정렬 메소드 호출
        sort(computerNumbers);

        // 사용자가 선택에 따라서 게임마다
        // 수동할지 자동할지 선택해서 내용 정해주기
        for (int i = 0; i < userNumbers.length; i++) {
            System.out.println((i + 1) + "번 게임");
            int userChoice = ScannerUtil.nextInt(scanner, "1. 자동 2. 수동", 1, 2);
            if (userChoice == 1) {
                selectRandomNumbers(userNumbers[i]);
            } else {
                insertNumber(userNumbers[i], scanner);
            }
            // userNumbers[i] 정렬 메소드 호출
            sort(userNumbers[i]);
        }

        // 결과 출력
        System.out.printf("컴퓨터 숫자: [%d, %d, %d, %d, %d, %d]\n", computerNumbers[0], computerNumbers[1],
                computerNumbers[2], computerNumbers[3], computerNumbers[4], computerNumbers[5]);
        for (int i = 0; i < userNumbers.length; i++) {
            System.out.printf("사용자 숫자: [%d, %d, %d, %d, %d, %d] 맞은 숫자 갯수: %d개 등수: %d\n", userNumbers[i][0],
                    userNumbers[i][1], userNumbers[i][2], userNumbers[i][3], userNumbers[i][4], userNumbers[i][5],
                    compare(computerNumbers, userNumbers[i]), 6 - compare(computerNumbers, userNumbers[i]) + 1);
        }

        scanner.close();
    }

    // 2. 랜덤숫자 뽑는 메소드
    public static void selectRandomNumbers(int[] numbers) {
        int index = 0;
        Random random = new Random();
        while (index < 6) {
            int number = random.nextInt(45) + 1;

            // 중복 체크하는 메소드 호출
            // 만약 false 면 추가
            if (!checkNumber(numbers, number)) {
                numbers[index] = number;
                index++;
            }
        }
    }

    // 3. 어떤 숫자가 배열에 있는지 체크하는 메소드
    public static boolean checkNumber(int[] numbers, int number) {
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == number) {
                return true;
            }
        }

        return false;
    }

    // 4. 2개의 배열을 비교하여 같은 숫자가 몇개 있는지 비교하는 메소드
    public static int compare(int[] computerNumbers, int[] userNumbers) {
        int count = 0;
        for (int i = 0; i < computerNumbers.length; i++) {
            for (int j = 0; j < userNumbers.length; j++) {
                if (computerNumbers[i] == userNumbers[j]) {
                    count++;
                }
            }
        }

        return count;
    }

    // 5. 사용자로부터 숫자를 입력받아서
    // 배열에 올바른 숫자만 넣어주는 메소드
    public static void insertNumber(int[] numbers, Scanner scanner) {
        int index = 0;
        while (index < 6) {
            System.out.println((index + 1) + "번 숫자");
            int number = ScannerUtil.nextInt(scanner, (index + 1) + "번 숫자", 1, 45);

            if (!checkNumber(numbers, number)) {
                numbers[index] = number;
                index++;
            } else {
                System.out.println("이미 중복된 숫자입니다.");
            }
        }
    }

    // 6. 정렬 하는 메소드
    public static void sort(int[] numbers) {
        for (int i = 0; i < numbers.length - 1; i++) {
            if (numbers[i] > numbers[i + 1]) {
                int temp = numbers[i];
                numbers[i] = numbers[i + 1];
                numbers[i + 1] = temp;
                i = -1;
            }
        }
    }
}

'JAVA > 국비 공부' 카테고리의 다른 글

3월15일수업(클래스)  (0) 2021.03.15
3월15일(12일 과제 로또 2)  (0) 2021.03.15
3월12일 예제 2  (0) 2021.03.15
3월 12일 예제 1  (0) 2021.03.15
3월12일수업(기본형 vs 참조형)  (0) 2021.03.15