다차원 배열순회 궁금점
// 다차원 배열 순회
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
132
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
110
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
69
1
사고력 키우는 법이 어떤게 있나요?
0
87
2
getter setter
0
100
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
77
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
75
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
114
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
163
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
114
2
응용이 어렵습니다.
0
203
2
IntelliJ가 보이지 않습니다.
0
182
3
JDK 버전 문의
0
128
2
BlackBox 파일 내에서 메소드 정의
0
135
1
동기화
0
120
2
Iterator 문의
0
101
1
코드 순서 문의
0
139
1
클래스 메소드
0
146
2
Quiz_05 관련 질문드립니다 !
0
114
2
다운로드가 안됩니다
0
162
2
다형성
0
115
2
HashMap
0
75
2





