2차원 배열 - 배열의 배열
1. 2차원 배열 선언 방법
arr - 2차원 배열을 가리킬 수 있는 변수
[3] - 1차원 배열을 가르킬 수 있는 참조 변수가 3개 생긴 것
[4] - 실제 정수 값을 담을 수 있는 그릇들
=> 정수를 4개씩 담을 수 있는 배열이 3개가 생성된다.
int[][] arr = new int[3][4];
배열에 값을 담을 때
arr[0] = 10;
결과 : 에러 발생
배열 0번째 인덱스, 이 부분을 의미하는데, 실제 int값을 담을 수 있는 부분이 아니라
int형 배열을 가리킬 수 있는 참조 변수이기 때문에 정수 값을 담을 수가 없다.
즉. arr[0]은 또 다른 1차원 배열을 가리킬 수 있는 참조형 변수이기 때문에 값을 담을 수 가 없다.
** 실제로 값을 담을 때에는 다음 인덱스까지 지정해주어야 한다.
arr[0][1] = 10;
0번째 인덱스가 가리키고 있는 1번에 10을 넣겠다 지정하면,
0이 가르키고 있는 1차원 배열 인덱스가 1번인 곳에 10을 넣겠다는 의미이다.
2. 가변크기의 2차원 배열 생성 (2차원 배열을 선언할 때 크기가 다른 배열도 생성 가능하다.)
int[][] arr1 = new int[3][];
뒤에 있는 사이즈를 비워주게 되면 실제로 값을 담을 수 있는 1차원 배열은 만들어지지 않은 상태이다.
만들어지지 않은 상태에서 하게 되면!
즉. 0번째가 가르키고 있는 0번째 인덱스에 값을 넣겠다하면 빨간 줄은 생기지 않지만
arr1[0][0] = 10;
이것을 실행해보면 오류가 발생한다.
그 이유는 현재 arr1에 0번째 인덱스가 가르키고 있는 것은 참조형 변수이기 때문에
'배열의 0 번째에다가 뭘 넣겠다' 라했는데 실제 이 0 번째는 가르키는게 없기 때문이다.
그래서 반드시 그 부분을 사용하기 위해서는
arr1에 0번째 인덱스가 실제 가르키는 배열을 만들어 주어야 한다.
arr1[0] = new int[1];
: 1차원 배열 하나 짜리를 만들겠어요 --> 정수를 하나 담을 수 있는 배열을 생성해서 arr1의 0번째 인덱스가 참조한다.
arr1[0][0] = 10;
생성 후 실행했을 때 오류가 발생하지 않는다.
3. 2차원배열 - 선언과 동시에 초기화하는 방법
int[][] arr2 = {{1}, {1, 2}, {1, 2, 3}}; // 초기화와 동시에 값을 넣을 수 있다.
위와 같이 선언할 경우, arr2[1][0]은 2이다.
System.out.println(arr2[0][0]); //arr2에 0번째 인덱스에 0번쨰 0번째인덱스를 출력 ==> 1
System.out.println(arr2[2][2]); //arr2에 2번째 인덱스에 2번째 2번을 출력 ==> 3
'PL(ProgrammingLanguage) > JAVA' 카테고리의 다른 글
생성자 (Constructor) (0) | 2021.10.09 |
---|---|
[프로그래머스]switch문 - 실습(1) (0) | 2021.10.09 |
변수의 scope와 static (0) | 2021.10.04 |
String 클래스의 Method (0) | 2021.10.04 |
생성자(constructor) (0) | 2021.10.02 |