미누에요
[Java] 다차원 배열 본문
행렬을 배워본 적이 있는가 ?
요즘 교육과정에서는 배우지 않지만, 행렬은 수 또는 다항식 등을 직사각형 모양으로 배열한 것이다.
행렬의 각 값은 행렬의 i,j 로 나타낼 수 있다.
위 행렬의 이름이 A라고 할 때, 아래 사진처럼 각 위치별 값을 나타낼 수 있다.
사진을 보면, 가로 줄인 행(row)마다 앞의 수인 i 가 같고, 세로 줄인 열(column)마다 뒤의 수인 j가 같은 것을 알 수 있다.
다차원 배열이 행렬의 개념과 굉장히 비슷하다.
이전에 배웠던 배열(일차원 배열)은 가로로 긴 한줄짜리의 값 묶음이라면, 다차원 배열 중 이차원 배열은 행렬과 같이 2차원 상에 나타나지는 값들인 것이다.
컴퓨터는 인덱싱을 0부터 하므로, 2차원 배열의 각 위치를 나타내면 위와 같다.
우리는 이 2차원 배열을 Java로 만들어 볼 것이다.
활쏘기 체험장에서 사각형 모양의 과녁에 활을 맞추는 상황이라고 하자.
과녁에는 점수들이 표시되어 있을 것이다.
8 | 8 | 8 | 8 | 8 |
8 | 9 | 9 | 9 | 8 |
8 | 9 | 10 | 9 | 8 |
8 | 9 | 9 | 9 | 8 |
8 | 8 | 8 | 8 | 8 |
위처럼 과녁을 표시하게 2차원 배열을 만들어 보겠다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,9,9,8},
{8,8,8,8,8}
};
}
}
위에서 10점을 출력하려면 좌표를 어떻게 설정해야 하겠는가 ?
3번째 행의 3번째 열이니 3,3라고 생각한다면 틀렸다.
"컴퓨터는 0부터 인덱싱한다."
따라서 10의 위치는 2,2 이다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,9,9,8},
{8,8,8,8,8}
};
System.out.println(scores[2][2]);
}
}
배열 안의 값들을 for문을 이용하여 모두 출력하는 것을 해보겠다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,9,9,8},
{8,8,8,8,8}
};
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(scores[i][j]+"\t");
}
System.out.println();
}
}
}
2차원 배열은 이중 반복문을 사용하여 출력할 수 있다. scores[i][j] 뒤에 "\t"를 해준 이유는 그냥 print로 출력하면 다음 값이 바로 붙어서 출력되기 때문에 공백 문자인 \t를 사용하여 출력했다.
그리고 for문이 끝나고 나서 줄바꿈을 위한 println을 한번 실행해주었다.
깔끔하게 잘 출력된 것을 알 수 있다.
만약, 배열의 행과 열의 크기를 모른다면, 우리는 이중반복문을 사용하여 출력하는 데 어려움이 있을 것이다.
그럴 때, length를 사용하게 될텐데, 이중 반복문에서는 어떻게 사용해야 행의 길이와 열의 길이를 출력하는지 헷갈릴거라 생각한다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,8},
{8,8,8,8,8}
};
}
}
우선, 2차원 배열은 1차원 배열의 묶음으로 볼 수 있다.
첫번째 for문의 i 범위는 행의 개수에 해당한다.
행의 개수는 2차원 배열에 바로 length를 하면 된다.
열의 개수인 j의 범위는 scores[i].length를 해야한다.
i행의 각 열의 개수를 의미한다.
이렇게 하는 이유는 위처럼 각 행이 열의 개수가 다를 수 있기 때문이다.
위 코드에서 scores[0][4]를 출력하려 한다면, 값이 없기 때문에 에러가 일어날 것이다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,8},
{8,8,8,8,8}
};
System.out.println(scores[0][4]);
}
}
그리고 나서 값을 편집할 때는 각 값에 대입하는 방식으로 편집할 수 있다.
public class test {
public static void main(String[] args) {
int[][] scores = {
{8,8,8,8,8},
{8,9,9,9,8},
{8,9,10,9,8},
{8,9,8,9,8},
{8,8,8,8,8}
};
scores[2][3] = 0;
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
System.out.print(scores[i][j] + "\t");
}
System.out.println();
}
}
}
3차원 배열부터는 실제로 잘 사용하지 않는다.
2차원 배열의 행과 열에 대한 개념을 잘 익혀두자.
'Java' 카테고리의 다른 글
[Java] 메서드 , 메소드 (0) | 2023.11.16 |
---|---|
[Java] 퀴즈 5 . 구매 가능 신발 사이즈 옵션 (1) | 2023.11.15 |
[Java] 배열 기본 (0) | 2023.11.15 |
[Java] 퀴즈 4. 주차 요금 정산 프로그램 (0) | 2023.11.14 |
[Java] Continue문 (2) | 2023.11.14 |