본문 바로가기

JAVA/국비 공부

3월 17일수업

package day0317;
// ArrayList를 활용한 로또 게임

import util.ScannerUtil;
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;

public class LottoArrayList {
    private static final int NUMBER_MAX = 45;
    private static final int NUMBER_MIN = 1;
    private static final int NUMBER_SIZE = 6;
    private static Scanner scanner = new Scanner(System.in); // 잘 안쓰는 전역변수

    public static void main(String[] args) {
        ArrayList<Integer> computerList = new ArrayList<>();
        ArrayList<ArrayList<Integer>> userList = new ArrayList<>();

        // computerList에 숫자 추가
        insertRandomNumber(computerList); // System.out.println("computerList.size(): " + computerList.size());

        // 사용자리스트에 게임숫자 몇번인지 받기
        // 사용자 선택에 따라서 자동/수동 숫자 넣기
        // 위의 두가지는 우리가 deciseUserGame() 메서드만 실행해주면됨
        decideUserGame(userList); // System.out.println("userList.size():" + userList.size());

        // 사용자 선택에 따라서 자동/수동 숫자 넣기

        // 비교해서 등수 정하기
        showResult(computerList, userList);

        scanner.close();

    }

    // 랜덤숫자를 리스트에 추가하고 정렬해주는 메소드
    private static void insertRandomNumber(ArrayList<Integer> list) {
        Random random = new Random();
        while (list.size() < NUMBER_SIZE) {
            Integer randomNumber = random.nextInt(NUMBER_MAX) + 1;
            if (!list.contains(randomNumber)) {
                list.add(randomNumber);
            }
        }

        sortList(list);
    }

    // 사용자숫자를 리스트에 추가하고 정렬해주는 메소드
    private static void insertUserNumber(ArrayList<Integer> list) {
        while (list.size() < NUMBER_SIZE) {
            int currentPosition = list.size() + 1;
            String message = new String(currentPosition + "번 숫자를 입력해주세요");
            int userNumber = ScannerUtil.nextInt(scanner, message, NUMBER_MIN, NUMBER_MAX);
            if (!list.contains(userNumber)) {
                list.add(userNumber);
            } else {
                System.out.println("중복된 숫자입니다.");
            }
        }

        sortList(list);

    }

    // 사용자로부터 입력을 받아서 자동으로 해줄지 수동으로 해줄지를 결정해주는 메소드
    private static void decideUserGame(ArrayList<ArrayList<Integer>> list) {
        String message = new String("몇번 플레이 하실지 정해주세요");
        int gameNumber = ScannerUtil.nextInt(scanner, message);
        while (list.size() < gameNumber) {
            message = new String("1.자동 2. 수동");
            int userChoice = ScannerUtil.nextInt(scanner, message, 1, 2);
            ArrayList<Integer> tempList = new ArrayList<>();

            if (userChoice == 1) {
                insertRandomNumber(tempList);
                // System.out.println(tempList.size());

            } else if (userChoice == 2) {
                insertUserNumber(tempList);
                // System.out.println(tempList.size());
            }

            list.add(tempList);

        }

    }

    // 리스트의 숫자를 정렬해주는 메소드
    private static void sortList(ArrayList<Integer> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            if (list.get(i) > list.get(i + 1)) {
                Integer temp = list.set(i, list.get(i + 1)); // list.get(i); -> list.set(i, list.get(i + 1));
                list.set(i + 1, temp);
                i = -1;
            }
        }
    }

    // 결과를 확인하는 메소드
    private static void showResult(ArrayList<Integer> computerList, ArrayList<ArrayList<Integer>> userList) {
        // 컴퓨터 숫자 출력
        System.out.print("컴퓨터 숫자: [");
        for (int i = 0; i < computerList.size(); i++) {
            System.out.printf("%4d", computerList.get(i));
        }
        System.out.println("]");
        System.out.println();

        // for문으로 사용자 게임마다 숫자, 맞춘갯수 , 등수 출력
        for (int i = 0; i < userList.size(); i++) {
            String message = new String((i + 1) + "번 게임");
            System.out.println(message);
            System.out.print("사용자 숫자: [");
            for (int j = 0; j < userList.get(i).size(); j++) {
                System.out.printf("%4d", userList.get(i).get(j));
            }
            System.out.print("]");
            int count = countSame(computerList, userList.get(i));
            System.out.printf("맞은 갯수: %d개 ", count);
            if (count >= 2) {
                System.out.printf("사용자의 등수: %d등\n", NUMBER_SIZE - count + 1);
            } else {
                System.out.println("사용자의 등수: 등 외");
            }
            System.out.println();
        }
    }

    // 2개의 리스트를 비교하여 같은 숫자가 몇개인지 확인하는 메소드
    private static int countSame(ArrayList<Integer> list1, ArrayList<Integer> list2) {
        int count = 0;

        for (int i = 0; i < list1.size(); i++) {
            if (list2.contains(list1.get(i))) {
                count++;
            }
        }

        return count;
    }
}

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

3월 17일 (예제)  (0) 2021.03.17
성적관리프로그램(3월17일)  (0) 2021.03.17
3월 16일 수업(ArrayUtil)  (0) 2021.03.16
3월16일(List)  (0) 2021.03.16
3월16일수업(예제- 과제)  (0) 2021.03.16