2차원 배열 = 다차원 배열

2차원 배열은 1차원 배열을 묶은 것

배열의 인덱스마다 또 다른 배열의 주소를 보관하는 배열을 의미

자료형이 같은 1차원 배열들의 묶음

 

배열 선언

 

이것도 마찬가지로

자료형 [][] 배열명;          ->거의 이걸 많이 씀

자료형   배열명[][];

자료형 [] 배열명[];

3개다 가능

 

int[][]arr={{ },{}};

 

행열

int[][] arr = new int[3][4]

 

이렇게 보면 됨

arr [][]:기차

arr [x]:기차 x칸

arr[x][y]:기차x칸y칸

 

 

여기서 에러가 날 코드

배열의 주소를 관리하는 배열의 길이는 앞 부분에 정수로 표기하며 반드시 크기를 지정해줘야 한다.

// iarr1 = new int[][]; []사이에 크기를 지정해야 함. 하지 않으면 에러 발생

//iarr1 = new int[][4]; 주소를 묶어서 관리할 배열의 크기를 지정하지 않으면 에러 발생

 

 

주소를 관리하는 배열의 인덱스마다 배열을 할당해야 함 (heap)

여러 개의 배열의 길이가 각각 다른 겨우 위에서 했던 방식처럼 인덱스별로 배열을 따로 할당해주어야 한다. 아래는 정변배열

 

서로 다른 길이의 여러 개 배열을 하나로 묶어

 

관리하는 2차원 배열을 "가변 배열"이라고 한다.

 

		iarr1[0] = new int[5];
		iarr1[1] = new int[5];
		iarr1[2] = new int[5];
iarr2 = new int[3][5];

2,3번 단계를 동시에 진행 가능

 

for을 이용하여 2차원 배열

배열 하나씩 배열 값 출력

for(int i = 0; i <iarr1[0].length; i++) {
System.out.print(iarr1[0][i] + " ");
}

콘솔 0 0 0 0 0 찍힘

 

for(int i = 0; i <iarr1[0].length; i++) {
		System.out.print(iarr1[0][i] + " ");
		}
		System.out.println();
		//0번 인덱스 배열 값 출력
		for(int i = 0; i <iarr1[0].length; i++) {
			System.out.print(iarr1[0][i] + " ");
		}
		System.out.println();
		//1번 인덱스 배열 값 출력
		for(int i = 0; i <iarr1[1].length; i++) {
			System.out.print(iarr1[1][i] + " ");
		}
		System.out.println();
		//2번 인덱스 배열 값 출력
		for(int i = 0; i <iarr1[2].length; i++) {
			System.out.print(iarr1[2][i] + " ");
		}
		System.out.println();

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

 

이렇게 출력이 됨

 중첩 for문을 이용하면 배열의 값 출력

for(int i=0; i < iarr1.length;i++) {
			for(int j = 0; j <iarr1[i].length; i++) {
				System.out.print(iarr1[i][j] + " ");
			}
			System.out.println();
		}

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

 

이렇게 출력

 

자료형[][] 변수면 = new 자료형[할당할 배열의 갯수][할당할 배열의 길이]

int[][] iarr = new int[3][5];

각 배열의 인덱스에 접근해서

값 대입 후 출력할 때는 

 

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

int value = 1;
		
		for(int i = 0;i < iarr.length; i++) {
			for(int j = 0; j < iarr[i].length; j++) {
				iarr[i][j] = value++; //대입한 다음 증가하게 한다
			}
		}
        for(int i = 0; i <iarr.length; i++) {
			for(int j=0; j = iarr[i].length; j++) {
				System.out.print(iarr[i][j] + " ");
			}
			System.out.println();

 

가변 배열의 경우 각 인덱스별 배열을 따로 할당해야 한다.

가변 배열선언과 동시에 모든 배열을 할당할 수 없으며, 할당할 배열의 갯수만 지정하고

각 인덱스에 서로 다른 배열의 길이를 따로 할당해야 한다.

 

자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][];

//변수명 [배열 인덱스] = new 자료형[배열의 길이];

 

주소를 관리하는 배열의 주소를 보관하기 위한 변수 선언

int[][] iarr = new int [3][]; //총 3개의 공간으로 만들겠다.

		iarr[0]= new int [3];
		iarr[1]= new char[2]; //다른 타입이 되어서는 안됨.

		iarr[0]= new int [3];
		//iarr[1]= new char[2]; //다른 타입이 되어서는 안됨.
		iarr[1] = new int[2];
		
		int[] arr = new int[5];
		//iarr[2] = arr; //미리 할당해둔 배열을 이용해서도 가능

 

각 배열의 인덱스마다 접근하여 값 대입 후 출력

		iarr[0][0] = 1;
		iarr[0][1] = 2;
		iarr[0][2] = 3;
		//iarr[0][3] = 4;

자바 에러 1. java.lang.ArrayIndexOutOfBoundsException: 존재하지 않는 인덱스에 접근하였을 때

		iarr[1][0] = 4;
		iarr[1][1] = 5;
		iarr[2][0] = 6;

자바 에러 2. java.lang.NullPointerException : 2번 인덱스에는 배열이 할당 되어 있지 않다면 오류 발생

		iarr[2][1] = 7;
		iarr[2][2] = 8;
		iarr[2][3] = 9; 
		iarr[2][4] = 10;

가변 배열 역시 반복문을 이용해서 값을 대입하고 출력할 수 있다

for(int i = 0; i < iarr.length; i++) {
			for(int j=0;j<iarr[i].length;j++) {
				System.out.print(iarr[i][j] + " ");
			}
			System.out.println();
		}

2차원 배열도 할당과 동시에 기본 값 외의 값으로 초기화 하고 싶은 경우 리터럴을 사용할 수 있다

선언과 할당을 하며 초기화

정변 배열

int[][] iarr = {{ 1,2,3,4,5,} ,{6,7,8,9,10},{11,12,13,14,15}};

각각의 1차원 배열을 {} , {} ,{} 중가로로 감싸면 됨

가변 배열 

int[][] iarr2 = {{1,2,3},{4,5},{6,7,8,9,10}};

미리 할당 된 배열을 이용하는 방식

		int [] arr1 = {1,2,3,4,5};
		int [] arr2 = {6,7,8,9,10};
		int [][] arr3 = {arr1,arr2};

 

 반복문을 이용한 값 출력

	for(int i = 0; i< arr3.length; i++) {
			for(int j = 0; j < arr3[i].length; j ++) {
				System.out.print(arr3[i][j] + " ");
			}
			System.out.println();
		}
	}

1 2 3 4 5

6 7 8 9 10

 

변수의 두 값 변경하기

 

		int num1 =10;
		int num2 = 20;
		
		System.out.println("num1 : "+ num1);
		System.out.println("num2 : "+ num2);

 

두 변수의 값을 바꾸기 위해서는 다른 변수 한 개가 더 필요하다

temp이라는 비커가 하나 더 있다고 보면 됨.

		int temp = num1;
		num1 = num2;
		num2 = temp;
		
		//변경 후의 값 출력
		System.out.println("num1 : "+ num1);
		System.out.println("num2 : "+ num2);

배열의 인덱스에 있는 값도 서로 변경할 수 있다.

		int [] arr = {2,1,3};
		
		int temp2 = arr[0];
		arr[0] = arr[1];
		arr[1] = arr[2];
		arr[2] = temp2;
		
		for(int num : arr) {
			System.out.println(num + " ");
		}
SMALL

'java' 카테고리의 다른 글

java 자바의 꽃, 객체2  (0) 2022.12.29
java 자바의 꽃, 객체1  (0) 2022.12.29
java 배열1  (0) 2022.12.28
java if,switch  (0) 2022.12.26
java API,SCANNER  (0) 2022.12.26

+ Recent posts