1차원 배열: 같은 자료형 변수를 묶음으로 다루는 것
2차원 배열: 같은 자료형 1차원 배열을 묶음으로 다루는 것 (참조 2번)
3차원 배열: 같은 자료형 2차원 배열을 묶음으로 다루는 것
int[][] arr;
int [][]을 참조하는 변수 arr 선언
new int[2][4];
heap 영역에 새롭게 2행 4열(가로 2줄, 세로 4줄) int 2차원 배열을 할당(생성)
--> 생성된 int 2차원 배열의 시작 주소를 arr에 대입
배열길이: 배열명.length는 변수가 직접 참조하고 있는 길이의 반환
-Arrays.toString: 참조하고 있는 1차원 배열 값을 문자열로 반환
-Arrays.deepToString: 참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가 모든 값을 문자열로 반환
[2차원 배열 초기화]
1. 2중 for문 사용
2. 행, 열을 인덱스를 이용해 직접 초기화
-2차원 배열 생성 시 마지막 배열 차수(열)을 지정하지 않고 나중에 서로 크기가 다른 1차원 배열을 생성하여 참조하는 배열
package edu.kh.array2.ex;
import java.util.Arrays;
public class Array2Example {
/*
* 2차원 배열
* -자료형이 같은 1차원 배열을 묶음으로 다루는 것
* -> 행, 열 개념 추가
*/
public void ex1() {
//2차원 배열 선언
int[][] arr; //int 2차원 배열을 참조하는 참조 변수 선언
//(참조형 == 참조변수 == 레퍼런스 변수 == 레퍼런스)
//2차원 배열 할당
//->new 자료형 [행크기][열크기]
arr = new int[2][3];
// heap영역에 int 2차원 배열 2행 3열 공간을 할당
//2차원 배열 초기화
/*
//1) 행, 열을 인덱스를 이용해 직접 초기화
arr[0][0]=10;
arr[0][1]=20;
arr[0][2]=30;
arr[1][0]=40;
arr[1][1]=50;
arr[1][2]=60;
*/
//2) 2중 for문을 이용한 초기화
//*배열길이
//->배열명.length는 변수가 직접 참조하고 있는 배열의 길이 반환
int num=10;// 배열 요소 초기화에 사용할 변수
System.out.println(arr.length); //2 -> arr이 참조하고 있는 2차원 배열의 행의 길이
System.out.println(arr[0].length); //3-> arr[0]행이 참조하고 있는 1차원 배열(열)의 길이
// int count=1;
for(int row = 0; row<arr.length; row++) { //행 반복
for(int col = 0; col<arr[row].length; col++) {
arr[row][col] = num;
num+=10;
// arr[row][col] = count*num;
// count++;
}
}
//Arrays.toString(배열명): 참조하고 있는 1차원 배열 값(주소값)을 문자열로 반환
System.out.println(Arrays.toString(arr)); //[[I@6f2b958e, [I@1eb44e46]
//Arrays.deepToString(배열명)
//-참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가 모든 값을 문자열로 반환
System.out.println(Arrays.deepToString(arr)); //[[10, 20, 30], [40, 50, 60]]
}
public void ex2() {
//2차원 배열 선언과 동시에 초기화
//3행 3열짜리 정수형 2차원 배열 선언과 동시에
//1~9까지 초기화
int[][]arr = {{1,2,3},
{4,5,6},
{7,8,9} };
//행별로 합 출력
for(int row = 0; row<arr.length; row++) { //행 반복
int sum =0;
for(int col = 0; col<arr[row].length; col++) { //열 반복
sum+=arr[row][col]; //현재 헹의 모든 열 값 누적
}
System.out.printf("%d행의 값: %d\n",row,sum);
}
System.out.println("----------------------------------------");
//열별로 합 출력
// -> 열부터 지정 후 각 행의 값 누적
// --> 완전한 사각형의 형태를 지닌 2차원 배열은 모든 열의 길이가 같다.
for(int col = 0; col<arr[0].length; col++) { //열 반복
int sum = 0;
for(int row = 0; row<arr.length; row++) { //행 반복
sum+=arr[row][col];
// 0 0
// 1 0
// 2 0
}
System.out.printf("%d열의 합: %d\n",col, sum);
}
System.out.println("------------------------------------");
//전체 합 출력
int sum=0;
for(int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
sum+=arr[row][col];
}
}
System.out.println("전체 합: " +sum);
}
public void ex3() {
//가변 배열
// - 2차원 배열 생성 시 마지막 배열 차수(열)을 지정하지 않고
// 나중에 서로 크기가 다른 1차원 배열을 생성하여 참조하는 배열
char[][] arr = new char[4][];
//char 2차원 배열 생성 시 행 부분만 생성
arr[0]=new char[3]; //0행에 3열짜리 1차원 배열을 생성하여 주소값 저장
arr[1]=new char[4]; //1행에 4열짜리 1차원 배열을 생성하여 주소값 저장
arr[2]=new char[5]; //2행에 5열짜리 1차원 배열을 생성하여 주소값 저장
arr[3]=new char[2]; //3행에 2열짜리 1차원 배열을 생성하여 주소값 저장
// 각 배열 요소에 'a'부터 차례대로 대입
char ch = 'a';
for(int row = 0; row<arr.length; row++) {
for(int col = 0; col<arr[row].length; col++) {
arr[row][col] = ch++; //char은 숫자로 저장
//후위 연산자이기 때문에 첫 대입 때 연산 전 대입
}
}
System.out.println(Arrays.deepToString(arr));
}
}
package edu.kh.array2.ex;
public class Array2Run {
public static void main(String[] args) {
Array2Example arr2Ex = new Array2Example();
arr2Ex.ex1();
arr2Ex.ex2();
arr2Ex.ex3();
}
}