고래씌

[JAVA] 6. 2차원 배열 본문

JAVA/JAVA 기초

[JAVA] 6. 2차원 배열

고래씌 2023. 10. 11. 10:55

1. 2차원 배열

1) 2차원 배열 구조

// 이차원 배열 선언과 동시에 할당
int[][] arr = new int[3][5];

System.out.println(arr);          // arr 주소값 출력. [[I@16진수주소값
System.out.println(arr[0]);      //   [I@16진수주소값    <-1차원 배열의 주소값 출력됨
System.out.println(arr[1][4]);  // 0

 

 ▶ 행의 길이 출력하고자 할 때 => arr.length

 열의 길이 출력하고자 할 때 => arr[0 or 1 or~].length

package com.kh.array;

public class C_DimensionalArray {

public void method1() {

    // 일차원 배열
    int[] arr1;
    int arr2[];

    // 이차원 배열 선언
    int [][] arr3;
    int arr4 [][];
    int[]arr5[];

    // 이차원 배열 선언과 동시에 할당
    int[][] arr = new int[3][5];

    System.out.println(arr);        // arr 주소값 출력. [[I@16진수주소값
    System.out.println(arr[0]);     //   [I@16진수주소값    <-1차원 배열의 주소값 출력됨
    System.out.println(arr[1][4]);  // 0

    System.out.println();

    System.out.println("행의 길이 : "+arr.length);  // 행의 길이 : 3
    System.out.println("0번 열의 길이 : "+arr[0].length); // 0번 열의 길이 : 5
    System.out.println("1번 열의 길이 : "+arr[1].length); // 1번 열의 길이 : 5
    System.out.println("2번 열의 길이 : "+arr[2].length); // 2번 열의 길이 : 5


    System.out.println();
    /*
     * 출력(arr[0][0]) -> 1행 1열
     * 출력(arr[0][1]) -> 1행 2열
     * ...
     * 출력(arr[0][4]) -> 1행 5열
     * 출력(arr[1][0]) -> 2행 1열
     * ...
     * 출력(arr[2][4]) -> 3행 5열
     */

    // 바깥쪽 반복문 -> 행에 대해 지정
    for(int i=0; i<arr.length; i++) {

        // 내부 반복문 => 열에 대해 지정
        for(int j=0; j<arr[i].length; j++) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
}
}

public void method2() {
    // 순서대로 1,2,3,4,5,6,7,.... 15까지 값을 대입하기
    int[][] arr = new int[3][5];  // arr[0][0] -> 1, arr[0][1] -> 2 ..., arr[2][4] -> 15


    int count = 1;

    for(int i=0; i<arr.length; i++) {

        for(int j=0; j<arr[i].length; j++) {

            arr[i][j] = count++; 
//				arr[i][j] = i*5 + j +1;
            System.out.printf("%-3d",arr[i][j]);   // -3d% 왼쪽기준으로 정렬
        }
        System.out.println();
    }
}

2. 이차원 배열 선언 및 할당과 동시에 초기화

public void method3() {

    // 일차원 배열 선언 및 할당과 동시에 초기화
    int[] arr = {1,2,3,4,5};

    // 이차원 배열 선언 및 할당과 동시에 초기화
    int[][] arr2 = {{1,2,3,4,5}, {6,7,8,9,10},{11,12,13,14,15}}; // [3][5]

    for(int i=0; i<arr2.length; i++) {
        for(int j=0; j<arr2[0].length; j++) {
            System.out.print(arr2[i][j]+"/t");  // \t == tab
        }
        System.out.println();
    }	
}

 

3. 가변 배열

▶ 행의 크기는 변경이 불가능하나, 행별로 열의 개수를 내 마음대로 지정할 수 있다.
이차원 배열 == 일차원 배열을 여러개 묶은 형태
묶여있는 일차원배열의 길이가 다 같을 필요는 없기 때문

☞ 따라서 2차원 배열을 선언할 때 행의 크기를 지정후, 열의크기는 생략이 가능하다.
즉, 각 행의 열의 길이를 변경할 수 있다.

public void method4() {

    int [][] arr = new int[3][]; // 가변 배열 행의 크기는 3, 열의 크기는 미정
    System.out.println(arr);   // [[I@16진수주소값
    System.out.println(arr[0]);   // null    // 생성을 안해놓았기 때문에
    System.out.println(arr.length);  // 3
//		System.out.println(arr[0][0]);   // error
    // 각 행별로 열의 크기가 지정되지 않았으므로 각 행에는 null 값이 대입된 상태
    // 특정인덱스로 "접근"하려했기 때문에 NullPointerException 에러 발생

    System.out.println();

    arr[0] = new int[2];
    arr[1] = new int[] {5,6,8};
    arr[2] = new int[4];
    /* 
     * 0 0
     * 5 6 8
     * 0 0 0 0
     */

    int value = 1;
    for(int i=0; i<arr.length; i++) {
        for(int j=0; j<arr[i].length; j++) {
            arr[i][j] = value++;
            System.out.print(arr[i][j]+" ");  // \t == tab
        }
        System.out.println();
    }		
}
public void method5() {
    // char[][] 가변 배열 생성
    char[][] arr = new char[3][];

    /* 위 arr 배열의 값을 대입 및 출력
     * a b c
     * d e
     * f g h i j k
     */

//		arr[0] = new char[] {'a','b','c'};
//		arr[1] = new char[] {'d','e'};
//		arr[2] = new char[] {'f','g','h','i','j','k'};

    arr[0] = new char[3];
    arr[1] = new char[2];
    arr[2] = new char[6];

    char ch = 'a';
    for(int i=0; i<arr.length; i++) {
        for(int j=0; j<arr[i].length; j++) {
            arr[i][j] = ch; 
            ch = (char)(ch+1);
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
}
public void method6() {
    /*
     * int형 2차원 배열을 만들어
     * 0번행에는 국어점수를 3개 입력받고
     * 1번행에는 영어점수를 3개 입력받은 후
     * 각각 반복문을 활용해서 출력
     * 
     * 입력예시 : xx 점수를 입력하세요 : 
     * 출력예시 : xx 점수 : xx xx xx
     */

    Scanner sc = new Scanner(System.in);

    int[][] arr = new int[2][3];

    for(int i=0; i<arr.length; i++) {  // 2회 반복
        for(int j=0; j<arr[i].length; j++) {  // 3회 반복
            System.out.printf("%s점수를 입력하세요 : ", i == 0? "국어" : "영어");
            arr[i][j] = sc.nextInt();
        }
        System.out.println();
    }

    for(int i=0; i<arr.length; i++) {   // 2회 반복
        System.out.printf("%s점수 : ", i == 0 ? "국어" : "영어");
        for(int j=0; j<arr[i].length; j++) {  // 3회 반복
            System.out.print(arr[i][j]+ " ");
        }
        System.out.println();
    }
}

 

'JAVA > JAVA 기초' 카테고리의 다른 글

[JAVA] 배열까지 종합문제  (0) 2023.10.12
[JAVA] 7. 객체(추상화, 캡슐화)  (0) 2023.10.11
[JAVA] 5-2. 배열 복사(얕은 복사, 깊은 복사  (0) 2023.10.11
[JAVA] 5-1. 배열 실습문제  (0) 2023.10.11
[JAVA] 5. 배열  (0) 2023.10.10