2차원 배열
- 3차원 이상이 배열은 특별한 경우에서만 사용하기 때문에 2차원 배열만 다룬다.
- 정방형 배열 ( 각 행의 개수가 모두 동일한 배열)
- 비정방형 배열(행마다 열의 개수가 서로 다른 배열)
< 정방형 배열 >
1. 2차원 배열의 선언과 생성
int intArray[][]; //int [][] intArray; 로 쓸 수 있음
char charArray[][]; //char [][] charArray; 로 쓸 수 있음
double doubleArray[][]; //double [][] doubleArray; 로 쓸 수 있음
new 연산자를 이용하여 생성하며 첫번째 [ ] 는 행(가로줄)의 개수를, 두번째 [ ]는 열(세로줄)의 개수를 나타낸다.
intArray[][] = new int [2][5]; // 2행 5열의 2차원 배열 생성
charArray[][] = new char [5][5]; // 5행 5열의 2차원 배열 생성
doubleArray[][] = new double [5][2]; // 5행 2열의 2차원 배열 생성
new int [2][5] ; (2행 5열)에 의해 생성된 2차원 배열의 구조
위 그림에서 2차원 배열의 length 의미를 살펴보면 다음과 같다.
2차원 배열도 래퍼런스 변수 선언과 배열 생성을 동시에 할 수 있다.
int intArray[][] = new int [2][5];
char charArray[][] = new char [5][5];
double doubleArray[][] = new double [5][2];
2. 2차원 배열의 초기화
2차원 배열을 선언할 때 각 원소 값을 초기화하면 자동으로 원소 개수만한 배열 공간이 할당되고 원소 값으로 초기화 된다.
int intArray[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; //3x3 배열 생성
char charArray[][] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; //2x3 배열 생성
double doubleArray[][] = {{0.01, 0.02}, {0.03, 0.04}}; // 2x2 배열 생성
3. 2차원 배열로 평점 구하기
double score[][] = {{3.3, 3.4}, // 1학년 1, 2학기 평점
{3.5, 3.6}, // 2학년 1, 2학기 평점
{3.7, 4.0}, // 3학년 1, 2학기 평점
{4.1, 4.2} }; // 4학년 1, 2학기 평점
double sum = 0;
for(int year=0; year<score.length; year++)
for(int term=0; term<score[year].length; term++)
sum += score[year][term];
int n = score.length;
int m = score[0].length;
System.out.println("4년 전체 평점 평균은 "+ sum/(n*m));
< 비정방형 배열 >
1. 비 정방형 배열 작성 코드
int i[][]; // 2차원 배열의 래퍼런스 변수 i 선언
i = new int[4][]; // 각 행을 가리키는 래퍼런스 배열 생성
i[0] = new int [1]; // 첫째 행에 1개 크기의 배열 생성
i[1] = new int [2]; // 둘째 행에 2개 크기의 배열 생성
i[2] = new int [3]; // 셋째 행에 3개 크기의 배열 생성
i[3] = new int [4]; // 넷째 행에 4개 크기의 배열 생성
<정방형 배열도 위와 같은 방법으로도 만들 수 있다.>
여기서 length 필드의 의미를 살펴보자.
* 어떤 메소드가 배열을 매개변수로 받을 때, 배열이 정방형인지 비정방형인지는 표시되지 않기 때문에 항상 length 필드를 사용하여 각 행의 열의 개수를 파악하여야 한다.
2. 배열 생성시 초기화를 통해 비정방형 배열 생성하기
int intArray[][] = { {0}, {1,2}, {3,4,5}, {6,7,8,9} };
3. 비정방형 배열의 생성과 접근
다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하라
int intArray[][] = new int[4][]; // 각 행의 레퍼런스 배열 생성
intArray[0] = new int[3]; // 첫째 행의 정수 3개의 배열 생성
intArray[1] = new int[2]; // 둘째 행의 정수 2개의 배열 생성
intArray[2] = new int[3]; // 셋째 행의 정수 3개의 배열 생성
intArray[3] = new int[2]; // 넷째 행의 정수 2개의 배열 생성
for (int i=0; i<intArray.length; i++) // 행에 대한 반복
for (int j=0; j<intArray[i].length; j++) // 열에 대한 반복
intArray[i][j] = (i+1)*10 +j;
for (int i=0; i<intArray.length; i++) {
for(int j=0; j<intArray[i].length; j++)
System.out.print(intArray[i][j] + " ");
System.out.println();
}
< 배열 리턴 >
1. 메소드에서 배열 리턴
메소드에서 배열을 리턴하면 공간 전체가 아니라 배열에 대한 레퍼런스만 리턴된다.
메소드는 리턴 타입을 선언할때 [ ] 안에 배열의 크기를 지정하지 않으며 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.
makeArray()메소드로 부터 배열을 리턴받는 코드는 아래와 같고
int [] intArray; // makeArray의 리턴 타입과 동일한 타입 선언
intArray = makeArray(); // makeArray()메소드가 리턴하는 배열 받음
이 코드의 실행 결과는 아래와 같다.
intArray[0] = 5;
intArray[1] = 6;
intArray[2] = 7;
intArray[3] = 8;
intArray는 makeArray( )가 만들어 리턴한 배열을 가르키게 되어 intArray로 배열 원소에 접근 가능하다.
2. 배열 리턴 예제
정수 4개를 가지는 일차원 배열을 생성하고 1,2,3,4로 초기화 한 다음 배열을 리턴하는 makeArray()를 작성하고, 이 메소드로 부터 배열을 전달받아 값을 출력하는 프로그램을 작성하라.
public class ReturnArray {
static int[] makeArray() { //정수형 배열을 리턴하는 메소드
int temp[] = new int[4]; //배열 생성
for(int i = 0; i<temp.length; i++)
temp[i]=i; //배열의 원소를 0,1,2,3으로 초기화
return temp; //배열 리턴
}
public static void main(String[] args) {
int intArray[]; //배열 레퍼런스 변수 선언
intArray = makeArray(); //메소드로부터 배열 전달받음
for(int i=0; i<intArray.length; i++)
System.out.print(intArray[i] + " "); //배열 모든 원소 출력
}
}
'프로그래밍 공부 > java' 카테고리의 다른 글
[JAVA] JAVA Programming 3장 실습문제 2번 (0) | 2022.12.06 |
---|---|
[JAVA] JAVA Programming 3장 실습문제 1번 (0) | 2022.12.06 |
[JAVA] 키보드 / 마우스 조작 클래스 Robot (0) | 2022.12.04 |
[JAVA] Factorial 구하기 (for문 / 재귀적 방법) (0) | 2022.12.04 |
[JAVA] 배열 선언 및 생성 (2) | 2022.12.01 |