• DemensionArray(2차원 배열)

    2021. 5. 4.

    by. 와트

    2차원 배열: 자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재. 2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여(앞 번호는 행, 뒷 번호는 열)

     

    2차원 배열 선언

    -   자료형[][] 배열명;
    -   자료형 배열명[][];
    -   자료형[] 배열명[];

    2차원 배열 할당

    -  자료형[][] 배열명 = new 자료형[행크기][열크기]
    -  자료형 배열명[][] = new 자료형[행크기][열크기]
    -  자료형[] 배열명[] = new 자료형[행크기][열크기]

    2차원 배열 초기화

    - 인덱스 이용 초기화
      arr[0][0] = 1;
      arr[1][1] = 2;
    - for문 이용 초기화
      for(int i = 0; i < arr.length; i++) {
          for(int j = 0; j < arr[i].length; j++) {
              arr[i][j] = j; } }
    - 선언 동시 초기화
      int[][] arr = {{1,2,3,4}, {5,6,7,8}};
      inr[][] arr = new int[][] {{1,2,3,4}, {5,6,7,8}};
    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public void testDemensionArray() {
            //2차원배열 선언
            int[][] arr;
            int[] arr2[];
            int arr3[][];
            
            //2차원배열 할당: new 연산자를 통해 heap영역에 공간 생성
            arr = new int[3][5];
            //열의 크기 생략 가능
            //각 행마다 다른 열의 개수 가지고 싶을 때: 가변 배열
            arr2 = new int[2][];
            arr2[0= new int[4];
            arr2[1= new int[2];
            
            //2차원배열에 직접 값 접근
            System.out.println(arr); //arr의 주소 값
            System.out.println(arr[0]); //arr[0]의 주소 값
            System.out.println(arr[0][0]);//실제 값에 접근
            
            //2차원배열 초기화
            int num =1;
            for(int i = 0; i < arr2.length; i++) {
                for(int j = 0; j <arr2[i].length; j++) {
                    //arr2 가변배열이므로 arr2[0]에는 0,1,2,3열 arr2[1]은 0,1열
                    arr2[i][j] = num++;
                }
            }
            
            //2차원배열 출력
            for(int i = 0; i < arr2.length; i++) {
                for(int j = 0; j <arr2[i].length; j++) {
                    System.out.print(arr2[i][j]+ " ");
                }
                System.out.println();//개행
            }
        }
    cs

     

    ※문제. 사용자에게 행의 크기를 입력 받고, 그 수만큼의 반복을 통해 열의 크기도 받아 문자형 가변 배열을 선언 및 할당하시오. 그리고 각 인덱스에 'a'부터 총 인덱스의 개수만큼 하나씩 늘려 저장하고 출력하시오.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        public void method1() {
            //가변배열 초기화 및 출력
            Scanner sc = new Scanner(System.in);
            System.out.print("행의 크기 입력: ");
            char[][] arr = new char[sc.nextInt()][];
            
            //열 할당
            for(int i = 0; i < arr.length; i++) {
                System.out.print(i + "행의 열의 크기 입력: ");
                arr[i] = new char[sc.nextInt()];
            }
            
            //초기화와 출력
            char ch = 'a';
            for(int i = 0; i <arr.length; i++) {
                for(int j = 0; j < arr[i].length; j++) {
                    arr[i][j] = ch++;
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();
            }
        }
    cs

    변수, 배열에는 언제나 기본값이 있기 때문에 내가 원하는 값으로 초기화해야 한다는 걸 항상 유의하기

    ※문제. 문자형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하시오. 또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력 시 0미만 5이상의 수가 입력되면 프로그램을 종료하시오.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public void method2() {
            Scanner sc = new Scanner(System.in);
            char[][] arr = new char[5][5];
            int row;
            int column;
            
            while(true) {
                System.out.print("행 인덱스 입력 >> ");
                row = sc.nextInt();
                System.out.print("열 인덱스 입력 >> ");
                column = sc.nextInt();
                
                if(row <0 || row >4 || column < 0 || column > 4) {
                    break;
                }
                arr[row][column] = 'X';
                System.out.println("\t0\t1\t2\t3\t4");
                for(int i = 0; i <arr.length; i++) {
                    System.out.print(i + "\t");
                    for(int j = 0; j < arr[i].length; j ++) {
                    System.out.print(arr[i][j] + "\t");
                }
                    System.out.println();
            }
                System.out.println();
            }
            System.out.println("프로그램을 종료합니다.");
        }
    cs

    이 문제는 '배열 초기화 -> 행과 열 변수를 int로 지정 -> 무한 루프 생성 후 Scanner로 변수 값 받기 -> if문을 이용해서 행렬의 출력 조건 충족 여부 가늠' 이라는 단계로 풀어 나가야 한다.

    무한 루프에서는 무조건 break 걸어주는 거 잊지 말고 단마다 구분가도록 개행도 잊지 않을 것.

    \t를 처음 접해서 뭘까 했는데 tab 기능을 한다. 이렇게 오늘도 작은 팁을 얻어감.

    '혼자 있는 방 > Java' 카테고리의 다른 글

    객체 간 협력  (0) 2021.05.30
    중간 복습(Review)  (0) 2021.05.06
    Array(배열)  (0) 2021.05.04
    Repetitive(반복문) 2  (0) 2021.05.02
    Repetitive(반복문) 1  (0) 2021.04.30

    댓글

Designed by Nana