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 + " ");
}
'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 |