JX405기_비트/Java

Day02-10 Muti Array 다차원 / Lotto 추첨기 ver 4.0 - 2차원 배열 사용하기

_하루살이_ 2023. 1. 15. 15:13

다차원 배열
다차원 배열이란 배열이라는 데이터타입의 공간 여러개를 묶어서
하나의 다른 데이터타입으로 만든 데이터타입니다.
다차원 배열을 만들때에는
차원수만큼 [][] 을 붙여주면 된다.

package day0110;

public class MultiArray {
    public static void main(String[] args) {
        // int가 4개 모여있는 배열이
        // 3개 모여있는 2차원 배열
        int[][] intArrays = new int[3][4];

        System.out.println("intArrays[0]: " + intArrays[0]);

        System.out.println("intArrays[1][2]: " + intArrays[1][2]);

        // 다차원 배열의 경우, 몇개의 배열이 모여있는지만 지정할 수도 있고
        // 각 배열의 길이는 각각 다르게 만들어줄 수도 있다.
        // 이러한 배열을 가변형 배열이라고 한다.
        intArrays = new int[4][];
        System.out.println("intArrays[0]: " + intArrays[0]);

        intArrays[0] = new int[7];
        intArrays[1] = new int[6];
        intArrays[2] = new int[9];
        intArrays[3] = new int[4];
        System.out.println("intArrays[1][2]: " + intArrays[1][2]);

    }
}

 

로또 시뮬레이텨
ver4.0
사용자로부터 총 몇게임할지 입력 받은 후에
해당 게임마다 각각 자동/수동 입력을 받아서
알맞게 처리하는 프로그램

 

2차원 배열 설정하기 userNumbers는 [게임의 갯수][로또 번호 추첨 갯수]의 2차원 배열

int[][] userNumbers = new int[gameSize][ARRAY_LENGTH];

        setNumbers(userNumbers);

        int[] computerNumbers = new int[ARRAY_LENGTH];
        Ex10Lotto03.setAutoNumbers(computerNumbers);
        Ex10Lotto03.sort(computerNumbers);

        printResult(userNumbers, computerNumbers);

 

이차원 배열을 받아 i 번째의 배열에

Ex10Lotto03의 setAutoNumbers를 활용해 배열 입력

public static void setNumbers(int[][] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println((i + 1) + "번째 게임");
            String message = "1. 자동 2. 수동";
            int userChoice = ScannerUtil.nextInt(SCANNER, message, 1, 2);

            if (userChoice == 1) {
                Ex10Lotto03.setAutoNumbers(arrays[i]);
            } else {
                Ex10Lotto03.setManualNumbers(arrays[i]);
            }

            Ex10Lotto03.sort(arrays[i]);
        }
    }

 

출력

public static void printResult(int[][] userNumbers, int[] computerNumbers) {
        System.out.print("컴퓨터 숫자: ");
        printArray(computerNumbers);
        System.out.println();
        System.out.println("사용자 숫자");
        for (int i = 0; i < userNumbers.length; i++) {
            System.out.printf("%d번 게임: ", i + 1);
            printArray(userNumbers[i]);
            System.out.printf(" - %d개\n", countSame(computerNumbers, userNumbers[i]));
        }
    }

 

배열의 값 출력하기

public static void printArray(int[] array) {
        System.out.print("[");
        for (int i = 0; i < array.length; i++) {
            System.out.printf("%2d", array[i]);
            if (i < array.length - 1) {
                System.out.print(", ");
            }
        }
        System.out.print("]");
    }

 

1차원 배열의 컴퓨터 번호, 사용자 번호를 받아 출력

public static int countSame(int[] computerNumbers, int[] userNumbers) {
        int count = 0;
        for (int i = 0; i < computerNumbers.length; i++) {
            if (Ex10Lotto03.contains(userNumbers, computerNumbers[i])) {
                count++;
            }
        }

        return count;
    }

 

 

전체 코드

package day0110;

import util.ScannerUtil;

import java.util.Scanner;

public class Ex11Lotto04 {
    public static final Scanner SCANNER = new Scanner(System.in);
    public static final int ARRAY_LENGTH = 6;
    public static final int NUMBER_MIN = 1;
    public static final int NUMBER_MAX = 45;

    public static void main(String[] args) {
        String message = "총 몇게임을 하시겠습니까?";
        int gameSize = ScannerUtil.nextInt(SCANNER, message);

        int[][] userNumbers = new int[gameSize][ARRAY_LENGTH];

        setNumbers(userNumbers);

        int[] computerNumbers = new int[ARRAY_LENGTH];
        Ex10Lotto03.setAutoNumbers(computerNumbers);
        Ex10Lotto03.sort(computerNumbers);

        printResult(userNumbers, computerNumbers);
    }

    public static void setNumbers(int[][] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println((i + 1) + "번째 게임");
            String message = "1. 자동 2. 수동";
            int userChoice = ScannerUtil.nextInt(SCANNER, message, 1, 2);

            if (userChoice == 1) {
                Ex10Lotto03.setAutoNumbers(arrays[i]);
            } else {
                Ex10Lotto03.setManualNumbers(arrays[i]);
            }

            Ex10Lotto03.sort(arrays[i]);
        }
    }

    public static void printResult(int[][] userNumbers, int[] computerNumbers) {
        System.out.print("컴퓨터 숫자: ");
        printArray(computerNumbers);
        System.out.println();
        System.out.println("사용자 숫자");
        for (int i = 0; i < userNumbers.length; i++) {
            System.out.printf("%d번 게임: ", i + 1);
            printArray(userNumbers[i]);
            System.out.printf(" - %d개\n", countSame(computerNumbers, userNumbers[i]));
        }
    }

    public static void printArray(int[] array) {
        System.out.print("[");
        for (int i = 0; i < array.length; i++) {
            System.out.printf("%2d", array[i]);
            if (i < array.length - 1) {
                System.out.print(", ");
            }
        }
        System.out.print("]");
    }

    public static int countSame(int[] computerNumbers, int[] userNumbers) {
        int count = 0;
        for (int i = 0; i < computerNumbers.length; i++) {
            if (Ex10Lotto03.contains(userNumbers, computerNumbers[i])) {
                count++;
            }
        }

        return count;
    }
}