[java] 2차원 배열

진아·2025년 3월 23일

자바

목록 보기
3/7
post-thumbnail

<2차 배열의 선언과 할당, 통합>


int[][] myarr; #선언

myarr = new int[2][3]; // 2행 3열 #할당

int [][] myarr = new int[2][3]; #선언과 할당의 통합


<각 원소에 직접 대입하기>


2행 3열인 경우에는 행의 인덱스는 0부터 1까지, 열의 인덱스는 0부터 2까지

배열에 저장된 원소 접근 -> 행, 열의 순서로 인덱스를 명시


<선언, 할당, 값 대입을 일괄 처리하기>


int[][] myarr = new int[][] {{1, 2, 3}, {10, 20, 30}};


<2차 배열의 의미>


2차 배열은 1차 배열안에 각각 개별적인 1차 배열이 포함되는 형태


<독립적인 1차 배열 구성>

int[] arr1 = {1, 2, 3};

int[] arr2 = {10, 20, 30};


<2차 배열은 1차 배열 안에 또 다른 배열 포함>

int[][] twoArray = {arr1, arr2};


<가변 배열>

2차 배열로 포함되는 배열이 각각 크기가 다름

int[][] myarr = new int [][] {{1, 2, 3, 4} , {10, 20}};


<2차 배열의 행, 열 크기 구하기>

int rowsize = myarr.length;

2차 배열의 모든 원소를 반복문으로 스캔, 중첩 반복문 사용 (부모 반복문은 행, 자식 반복문은 열에 관여)


<2차 배열 예제>

<2차 배열의 생성>

public class Ex01_2차배열의_생성 {
	public static void main(String[] args) {
    	/** 2차배열의 의미 */
    	// 2차 배열의 선언
    	int[][] arr1;


    	// 2차 배열의 할당 --> 2개의 행으로만 생성

    	arr1 = new int [2][];

    	// 2차 배열의 원래 의미는 1차 배열의 각 칸에 새로운 배열을 놓는 형태

    	int [] hello = {10,20,30};
    	int [] world = {40,50,60};
    	arr1[0] = hello;
    	arr1[1] = world;



    	/** 2차 배열의 생성 */
       // 2차 배열의 선언
      	int[][] arr2;

    	//2차 배열의 할당 --> 2행, 3열
    	arr2 = new int[2][3];
    	arr2[0] = hello;
    	arr2[1] = world;



    	System.out.println(arr2[0][0]);
    	System.out.println(arr2[0][1]);
    	System.out.println(arr2[0][2]);
    	System.out.println(arr2[1][0]);
    	System.out.println(arr2[1][1]);
    	System.out.println(arr2[1][2]);

    	System.out.println("-------------------");


    	/** 3차원 배열의 일괄 지정 */
    	int[][] arr3 = {{1,2,3}, {10,20,30}};
    	System.out.println(arr3[0][0]);
    	System.out.println(arr3[0][1]);
    	System.out.println(arr3[0][2]);
    	System.out.println(arr3[1][0]);
    	System.out.println(arr3[1][1]);
    	System.out.println(arr3[1][2]);        

    


	}
}

<가변 배열>

public class Ex02_가변배열 {
	public static void main(String[] args) {
    
    	int[] a = {10,20,30};
    	int[] b = { 100, 200 };

    	//2차 배열로 선언된 배열의 각 원소가 서로 길이 다른 배열
        
    	int [][] foo = { a, b };
        
    	System.out.println(foo[0][0]); 
    	System.out.println(foo[0][1]);
    	System.out.println(foo[0][2]);
    	System.out.println(foo[1][0]);
    	System.out.println(foo[1][1]);
    	System.out.println("----------------------");




        /** 2차 배열의 일괄 생성 */

    	int [][] bar = new int[][] {{1,2,3,4},{10,20}};

    	System.out.println(bar[0][0]);
    	System.out.println(bar[0][1]);
    	System.out.println(bar[0][2]);
    	System.out.println(bar[0][3]);
    	System.out.println(bar[1][0]);
    	System.out.println(bar[1][1]);



	}
}

<2차 배열의 탐색>

public class Ex03_2차배열의_탐색 {
	public static void main(String[] args) {
    
    	int[][] foo = {{1,2,3}, {10,20,30}};

    	// 부모 반복문은 2차 배열의 행에 관여
        
    	for(int i = 0; i < foo.length; i++){
        
        System.out.printf("%d번째의 행\n",i);

        //foo[i]번째는 가각 독립적인 1차 배열이므로 그 자체로 탐색이 가능
        
        for (int j = 0; j< foo[i].length; j++) {
            System.out.printf("\t %d번째의 열: %d\n", j, foo[i][j]);
        	}
    	}
  	}
}

<2차 배열의 합계와 평균>

public class Ex04_2차배열_합계와_평균 {
	public static void main(String[] args) {
    	String[] names = {"철수", "영희", "민혁"};


    	int[][] grade = {
        	{92, 81, 76},
        	{72,95,84},
        	{80,86,98}};


    	// 이 위치는에서의 변수는 2차 배열의 모든 원소에 대한 합계를 의미
    	int sum = 0;
    
    	// 성적배열의 행에 대한 탐색 --> 학생별을 의미
        
    	for(int i = 0; i<grade.length; i++) {
        
        	// 행단위의 합계는 새로운 행이 시작될 때 마다 변수를 새로 생성
        	// --> 개인별 합계
        	int personalSum = 0;

        	// 성적 배열의 i번째 행에 대한 열을 탐색 --> 특정 학생의 과목별 점수
            
        	for (int j = 0; j < grade[i].length; j++) {
            	sum += grade[i][j];
            	personalSum += grade[i][j];

        	}

        	int personalAvg = personalSum / grade[i].length;
        	System.out.printf("%d번째 행에 대한 %s의 합계: %d, 평균 : %d\n",
                                i, names[i],personalSum,personalAvg);
    	}

    	System.out.printf("모든 원소에 대한 전체 합계 %d\n", sum);
	}
}
profile
진아의 코딩기록⭐

0개의 댓글