2D 배열을 만들 때 행 또는 열이 먼저 지정되었는지 어떻게 기억합니까?
답변:
Java는 "행 주"로 간주됩니다. 즉, 행을 먼저 수행합니다. 이는 2D 배열이 "배열의 배열"이기 때문입니다.
예를 들면 :
int[ ][ ] a = new int[2][4]; // Two rows and four columns.
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
다음과 같이 시각화 할 수도 있습니다.
a[0] -> [0] [1] [2] [3]
a[1] -> [0] [1] [2] [3]
두 번째 그림은 "어레이 배열"측면을 보여줍니다. 첫 번째 배열은를 포함 {a[0] and a[1]}하고 각 배열은 4 개의 요소를 포함하는 배열 {[0][1][2][3]}입니다.
요약 :
Array[number of arrays][how many elements in each of those arrays]
자세한 설명은 배열-2 차원을 참조하십시오 .
Matt B가 어떤 의미에서는 사실 일 수 있지만 기하학 행렬에 대해 전혀 생각하지 않고 Java 다차원 배열을 생각하는 것이 도움이 될 수 있습니다. Java 다차원 배열은 단순히 배열의 배열이며 첫 번째 "차원"의 각 요소는 다른 요소와 크기가 다를 수 있으며 실제로는 null "하위"배열을 저장할 수 있습니다. 이 질문에 대한 의견보기
본능적으로 기하학적으로 생각합니다 : 수평 (X) 축과 수직 (Y) 축. 그러나 이것은 2D 배열의 경우가 아니며 행이 먼저 온 다음 열 이옵니다.
다음과 같은 비유를 고려하십시오. 기하학에서 사다리까지 걸어 가고 (X 축) 사다리를 올라갑니다 (Y 축). 반대로 자바에서는 사다리를 내려 가고 (행) 멀리 걸어 간다 (열).
To be crystal clear, it is not merely OK to ask and answer your own question, it is explicitly encouraged.
모두 배열의 시각화에 따라 다릅니다. 행과 열은 시각화의 속성입니다. 배열 자체가 아니라 배열 (아마도 상상할 수 있음)입니다.
숫자 "5"가 빨간색인가요 아니면 초록색인가요?
빨간색으로 그릴 수도 있고 욕심으로 그릴 수도 있겠죠? 색상은 숫자의 필수 속성이 아닙니다. 같은 방식으로 2D 배열을 행과 열의 그리드로 나타낼 필요는 없습니다.
2D 배열에는 첫 번째 차원 과 두 번째 차원 만 있습니다. 이를 시각화하는 것과 관련된 모든 것이 순전히 당신의 취향입니다.
char array가있을 때 char[80][25]스크롤없이 화면에 맞는 80 자 25 행이되도록 회전 된 콘솔에 인쇄하고 싶을 수 있습니다.
2D 배열을 행과 열이 전혀 의미가없는 것으로 표현할 때 실행 가능한 예 를 제공하려고합니다 . 1000000 정수의 배열이 필요하다고 가정 해 보겠습니다. 내 컴퓨터에는 8GB의 RAM이 있으므로 메모리가 충분하지만을 실행 var a = new int[1000000000]하면 OutOfMemory 예외가 발생할 가능성이 큽니다. 이는 메모리 조각화 때문입니다.이 크기의 연속적인 메모리 블록이 없습니다. 대신 값으로 2D 배열 10,000 x 100,000을 만들 수 있습니다. 논리적으로는 1D 배열이므로 단일 값 시퀀스로 그려서 상상하고 싶지만 기술적 구현으로 인해 2D입니다.
Java에는 다차원 배열이 없습니다. 배열의 배열이 있습니다. 그래서:
int[][] array = new int[2][3];
실제로 두 개의 배열로 구성되며 각 배열에는 세 개의 요소가 있습니다.
Java에서는 2 차원 배열이 두 개의 개별 배열로 간주되기 때문에 행이 먼저 수행됩니다. 첫 번째 행 1 차원 배열로 시작합니다.
C ++ (멀고 먼지가 많은 메모리)에서는 때때로 Java보다 코드를보고 배열을 이해하는 것이 조금 더 쉬웠다 고 생각합니다. 둘 다 행 메이저입니다. 이 그림은 이해하는 데 도움이되었습니다.
2d 문자열 배열에 대한이 코드가 주어지면 ...
String[][] messages;
messages = new String[][] {
{"CAT","DOG","YIN","BLACK","HIGH","DAY"},
{"kitten","puppy","yang","white","low","night"}
};
int row = messages.length;
int col = messages[0].length;
2d 배열 (row, col) 인 것처럼 int 이름을 지정하면 값이 표시됩니다.
row = (int) 2
col = (int) 6
우리가 크기를 결정하려고 설정을에 코드의 마지막 두 줄, row그리고 col모든 것을 직관적와 반드시 제대로 보이지 않습니다.
여기서 실제로 처리하는 것은 다음과 같습니다 (설명 할 새 변수 이름에 유의하십시오).
int numOfArraysIn = messages.length;
int numOfElementsIn0 = messages[0].length;
int numOfElementsIn1 = messages[1].length;
어디 messages.length말해 당신은 messages두 개의 배열을 보유하고 있습니다. 배열의 배열입니다.
그리고 messages[x].length0 1 내부 의 각 개별 배열의 크기 산출합니다 messages.
numOfArraysIn = (int) 2
numOfElementsIn0 = (int) 6
numOfElementsIn1 = (int) 6
for each 루프로 인쇄 할 때 ....
for (String str : messages[0])
System.out.print(str);
for (String str : messages[1])
System.out.print(str);
CATDOGYINBLACKHIGHDAYkittenpuppyyangwhitelownight
괄호를 떨어 뜨리고 이렇게 인쇄하려고하면 오류가 발생합니다.
for (String str : messages)
System.out.print(str);
incompatible types: String[] cannot be converted to String
위의 내용은 .length어레이를 통한 단계를 제한 하는 데 사용하는 루프를 설정하는 동안 이해하는 것이 중요합니다 .