해결된 질문
작성
·
378
0
// 다차원 배열 순회
String[][] seats = new String[][]{
{"A1", "A2", "A3", "A4", "A5"},
{"B1", "B2", "B3", "B4", "B5"},
{"C1", "C2", "C3", "C4", "C5"}
};
for (int i = 0; i < 3; i++) { // 세로
for (int j = 0; j < 5; j++) { // 가로
System.out.print(seats[i][j] + " "); //A1 A2 A3...
}
System.out.println();
이 부분에서 세로랑 가로의 순서를 바꾸는방법은 없는건가요?
컴퓨터가 세로먼저 계산을 하게 되는건가요?
답변 2
0
안녕하세요?
2차원 배열은 { { values #1 }, { values #2 }, { values #3 }, ... } 이런 식으로 구성이 됩니다. values #1, #2, #3 등의 중괄호로 둘러쌓인 데이터들을 또 하나의 중괄호 { } 로 전체를 감싸게 되는 형태인데요. 이때 seats[ A ][ B ] 와 같이 어떤 요소에 접근하려고 하면 A 는 외곽의 중괄호 기준의 인덱스 값이 됩니다. 다시 말해서 1차원 배열이라고 가정하면 { values #1, values #2, values #3 } 의 형태일텐데 이 때 seats[ 0 ] 을 하게 되면 맨 처음에 있는 values #1 에 접근하게 되는 것이죠.
다시 2차원 배열로 돌아와서, seats[ 0 ] 은 이미 values #1 이라는 요소인데 여기 안에서 또 특정 위치의 요소에 접근하고자 한다면 seats[ 0 ][ B ] 와 같이 대괄호 및 인덱스를 넣을 수 있습니다. 그리고 이때 B 는 values #1 가 포함된 중괄호 기준의 인덱스 값이 됩니다. 즉 { { values #1 }, { values #2 }, { values #3 }, ... } 에서 두껍게 칠해진 중괄호 부분이 되는 것이죠. seats[ 0 ][ 1 ] 이라고 하면 { values #1 } 이라는 작은 배열 내의 1 인덱스에 해당하는 값에 접근하게 됩니다.
그래서 보통 우리가 알아보기 편한 형태로, 가령 다음과 같이 2차원 배열을 정의한 그 순서대로 순회하기 위해서 세로 / 가로 순으로 인덱스를 적습니다.
String[][] seats = new String[][]{
{"A1", "A2", "A3", "A4", "A5"},
{"B1", "B2", "B3", "B4", "B5"},
{"C1", "C2", "C3", "C4", "C5"}
};
그리고 다음과 같이 순회했을 때의 값은 위에서 정의할 때와 동일한 순서로 나오게 되죠.
for (int i = 0; i < 3; i++) { // 세로
for (int j = 0; j < 5; j++) { // 가로
System.out.print(seats[i][j] + " "); //A1 A2 A3...
}
System.out.println();
}
// 실행 결과
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
C1 C2 C3 C4 C5
하지만 꼭 이렇게 해야 하는 것은 아닙니다. 가로와 세로를 바꾸어서 다음과 같이 출력할 수도 있습니다.
// 실행 결과
A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4
A5 B5 C5
이런 결과를 얻기 위한 순회 코드는 이렇게 작성하시면 됩니다. 편의상 j 를 i 보다 먼저 표기하였습니다.
for (int j = 0; j < 5; j++) { // 가로
for (int i = 0; i < 3; i++) { // 세로
System.out.print(seats[i][j] + " "); //A1 B1 C1...
}
System.out.println();
}
다차원 배열의 순회에 정해져 있는 것은 아니며 자유롭게 원하는 순서 또는 기준대로 순회할 수 있다는 점 참고해주세요 😊
감사합니다.
0