코딩

Day 10 - 2차원 배열과 다양한 표 그리기

Ledlaputa 2020. 3. 17. 07:07

안녕하십니까 아재나라입니다. 

지난 시간에 기본 배열에 대한 소개와 1차원 배열에 대해서 알아 봤습니다. 오늘은 2차원 배열에 대해서 알아 보겠습니다. 


2차원 배열의 구조 

2차원 배열은 행과 열이 2개로 이루어진 배열을 의미합니다. 

A0 B0 C0
A1 B1 C1
  • 엑셀에서 많이 봤던 구조입니다. 
  • int[][] arr1= new int[2][3]; (행,열)  
  • 자바와 C#의 다차원 배열 표현 차이 
    java  [][][] [][][] 
    C# [] [,] [,,] [][]
  • 배열은 값을 안집어 넣으면 0이 나온다. (굳이 안넣어도 된다) 
           int [][] arr2=new int[2][3];
           arr2[0][0]=10;
           arr2[1][2]=30;
           //arr2[2][3]=50; //에러
           System.out.println(arr2[1][1]); // 값이 0나옴,

 

2차원 배열의 값 입력 (2중 for 문) 

  • 행보다 열이 빨리 변하므로 열이 안쪽으로 안쪽 for문이 된다. 
  • A,B,C가 먼저 바뀌니(j) 0,1가 나중이니(i)
           for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                     System.out.print(arr2[i][j]+"\t"); // \t는  탭으로 띄우기
                }
                System.out.println(); //줄바꿈
           }
  • 결과 

연습문제

1)표만들기 예제1 (아래와 같은 행이 순차적인 표를 만드세요) 

public class ArrayTest021 {
     public static void main(String[] args) {
           // 3*3 배열 만들기
           int[][] arr3=new int[3][3];
           int count=0; // 다음 행에 다음 증가값 추가
           
           // 배열 입력 방법
           for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                     count++;
                     arr3[i][j]=count; //
                }
           } // 배열 입력 완료
           
           // 배열 출력
           for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                     System.out.print(arr3[i][j]+"\t");
                }
                System.out.println();
           }// 배열 출력 완료
           
     } //main end
} //class end
  • 결과

2)표만들기 예제2 (열로 순차적인 표를 만드세요) 

           int count=0;

           // 문제 2 - 배열 입력 방법
           for (int j = 0; j < 3; j++) {
                for (int i = 0; i < 3; i++) {
                     count++;
                     arr3[i][j]=count; // j보다 i를 먼저 변하게 입력 순서를 바꿈됨.
                }
           }
  • 결과

3)표만들기 예제3 (행으로 역순으로 된 표를 만드세요) 

 

           int count=0;

           // 문제3 - 배열 입력 문제 방법2
           for (int i = 0; i < 3; i++) {
                for (int j = 2; j >= 0; j--) {
                     count1++;
                     arr3[i][j]=count1; //
                }
           }// 문제3 배열 입력 완료    
  • 결과

4)표만들기 예제4 (열로 역순으로 된 표를 만드세요) 

           int count=0;

           // 문제4 - 배열 입력 문제
           for (int j = 2; j >= 0; j--) {
                for (int i = 2; i >= 0; i--) {
                     count1++;
                     arr3[i][j]=count1; //
                }
           }// 문제3 배열 입력 완료    
  • 결과

5)표만들기 예제5 (숫자가 1부터 직삼각형 모양으로 들어간 표를 만드세요 - 빈곳은 숫자 0으로) 

           int count=0;

           // 문제5 -
           for (int i = 0; i < 3; i++) {
                for (int j = 0; j < i+1; j++) {
                     count1++;
                     arr3[i][j]=count1; //
                }
           }
  • 결과

6)표만들기 예제6 (숫자가 1부터 직삼각형(우측이 직각) 모양으로 들어간 표를 만드세요) 

        System.out.println("3)역열 정행 - 2중 배열 ");
        System.out.println();

        int[][] arr3=new int[3][3];
        int count3=0;
        
        for (int i = 0; i < arr3.length; i++) {
            for (int j = arr3.length-1; j >= arr3.length-1-i ; j--) {
                count3++;
                arr3[i][j]=count3;
            }
        }
        
        for (int i = 0; i < arr3.length; i++) {
            for (int j = 0; j < arr3[i].length; j++) {
                System.out.print(arr3[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("================");

7)표만들기 예제7 (숫자가 역순으로 직삼각형(우측이 직각) 모양으로 들어간 표를 만드세요) 

        System.out.println("7) 역열 역행 - 2중 배열 ");
        System.out.println();
        
        int[][] arr7=new int[3][3];
        int count7=0;
        
        for (int i = arr7.length-1; i >=0 ; i--) {
            for (int j = arr7.length-1; j >=i; j--) {
                count7++;
                arr7[i][j]=count7;
            }
        }
        
        for (int i = 0; i < arr7.length; i++) {
            for (int j = 0; j < arr7.length; j++) {
                System.out.print(arr7[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("================");

 

배열 중요 정리 

  • i행과 j열에 대한 for문의 순서와 +조건 -조건에 따라 행열의 입력 순서가 결정된다. 
  • 참고 그림 

배열의 선언과 초기화를 동시에 할 경우  

  • 입력 방식 
  • int[][] k = {
            {10,20,30},
            {40,50,60}
            }; // 선언과 동시 초기화는 위 방법뿐
           int[][] k = {
                     {10,20,30},
                     {40,50,60}
                     }; //int[][]k 초기화
           
           for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                     System.out.print(k[i][j]+"\t");
                }
                System.out.println();
           }//for end
  • 메모리는 2차원 배열을 잡지 못한다. 무조건 1차원 배열만 인식

실제 메모리 내부에는 일력로 순서대로 입력된다.


참조사항  

1)배열의 대표명은 배열의 시작번지 이다.   

2)배열의 길이를 계산해주는 함수   

  • k는 전체 행에 대한 대표이기도 하다.  배열명.length(행을 의미)
  • 열의 길이는 원래 없다. 새로 생성 필요   
  • 열의 대표는 k[0], k[1]이다.  k[i].length(열(가로)의 길이를 의미) 
           // 배열의 길이
           for (int i = 0; i < k.length; i++) { // 행의 길이 파악
                for (int j = 0; j < k[i].length; j++) { // 열의 길이 파악
                     System.out.print(k[i][j]+"\t");
                }
                System.out.println();
           }//for end
  • 행은 k, 열은 k[i] 이다.

연습문제) p배열을 선언과 초기화 입력하고 출력시  배열명.length를 사용하라

           System.out.println("length를 이용하여 배열을  출력하시오");
           int[][] p = {
                     {1,2,3},
                     {4,5,6},
                     {7,8,9}
           };//p 배열 선언&초기화
           
           for (int i = 0; i < p.length; i++) {
                for (int j = 0; j < p[i].length; j++) {
                     System.out.print(p[i][j]+"\t");;
                }
           System.out.println();
           }//p배열 출력

오늘은 2차원 배열에 대한 구조와 이를 이용한 다양한 표 그리기를 구현해 봤습니다. 

배열은 for문과 함께 연동되어 많이 사용하는 매우 중요한 사항입니다. 다양한 배열에 대한 연습을 해보시기 바라겠습니다. 

그럼 다음시간에는 정렬과 검색에 대해서 알아보도록 하겠습니다.