2010-01-21 4 views
5

Java에서 다차원 배열을 이해하려고 노력하고 있지만 모든 언어에 적용되는 것으로 생각됩니다. 웹에서 찾은 스 니펫을 고려해보십시오.어떻게 다차원 배열을 참조합니까?

  //************************************ 
      //  static array initialization 
      //************************************ 
    byte[][] smallArray = { { 10, 11, 12, 13 }, 
    { 20, 21, 22, 23 }, 
    { 30, 31, 32, 33 }, 
    { 40, 41, 42, 43 }, }; 

    // Display the array element at row 2, column 3 
    System.out.println(smallArray[1][2]); 
// Value is 21 

왜 21입니까? 나는 테트리스 클론을 생성하여 자바를 배우려고 노력하고

public class Pieces { 
    int thePieces[][][]; 
    public Pieces(){ 

    } 
    public int[][][] createPieces(){ 

     /* pieces in order below 
       **** [0] 

       ** 
       ** 

       * 
       **** 

        * 
       **** 

       *** 
       * 

       ** 
       ** 

       ** 
       ** [6] 
     * 
     * 
     * 
     */ 
     int myPieces [][][] = 
     { 
      { //square 
       {0,0}, 
       {1,0}, 
       {1,1}, 
       {0,1} 

      }, 
      { //T 
       {-1,0}, 
       {0,0}, 
       {0,1}, 
       {1,0} 
      } 

     }; 

     thePieces = myPieces; 

    return thePieces; 
    } 

    public void printPieces(){ 

     System.out.println(thePieces[0][0].length); 
    } 

} 

: 나는이 상황에서 무엇을 의미하는지 길이를 알아 내려고 노력하고 있기 때문에이를 보았다는

(22)이 될 거라 생각 했어요. 내가 이해할 수없는 것은 길이가 [] []을 사용해야하는 이유입니다. 그것은 제가 일할 수있는 유일한 방법이었습니다. 나는 thePieces [0] [0] .length를 시도했지만 이해하지 못했다는 오류가 있습니까?

참조를 얻기 위해 [[] [] []를 써야하는 이유는 무엇입니까? 배열의 첫 번째 "레벨"이 myArray []. length 대신 myArray.length를 참조하는 온라인을 보았습니다. 그 다음 내가 말하는 것은 myArray [] []. 길이 (2, 3 레벨 인 것처럼 보이지만 내가 기대하는 것을 얻지 못한다)인가?

필자의 조각 코드를 실행하여 2를 얻었습니다. 왜 이것이 2인지 알 수 없습니다. 세 번째 단계에서 두 세트를 가지고 있기 때문입니까? 나는 4 세트의 점 때문에 4 점을 얻을 것으로 예상했다.

도움을 주셔서 감사합니다.

편집 : 왜 2인지 알아 냈습니다. 그것은 내면에서 두 점을주고 있습니다. 내가 4 개를 원한다면 thePieces [0] .length를 사용할 것입니다. 그러나 첫 번째 예는 무엇입니까? 오타입니까?

답변

5

왜 21입니까? 22.

22가 정확한지 확인했습니다. 확인을 위해 코드를 실행했습니다.

색인은 배열 요소를 가리키는 것으로 외부 요소에서 내부 요소로 나타납니다. 그래서

myPieces[0]{ {0,0}, {1,0}, {1,1}, {0,1} } (어레이를 포함하고있는 배열) myPieces[0][0]이다 {0,0} (int 치의 함유 배열)이며, myPieces[0][0][0]0 (정수)이다.

+0

나는 오타라고 생각합니다. 고맙습니다. – johnny

2

왜 21입니까? 나는 그것이라고 생각했다 22.

예제가 잘못되었습니다. 그것은 22 일 것입니다.

나는 thePieces [0] [0] .length를 시도했지만 이해하지 못했다는 오류가 있습니까?

약간의 설명이 필요합니다. 당신이 말할 때 :

int[][][] thePieces = { ... } 

변수를 thePieces라고 선언하면 int 배열 배열로 선언됩니다. 웃기는 소리. 어쨌든, thePieces.length는 유효합니다, thePieces가 어떤 종류의 배열이기 때문입니다.그렇게 같은 배열, 역 참조 할 때 :

thePieces[index] 

당신은 뭔가의 배열이기 때문에 당신이에 길이를 호출 할 수 있습니다 int 치의 배열의 배열을 얻을. 그래서 :

thePieces[index0][index1] 

은 길이를 호출 할 수있는 int의 배열입니다 (나는 지금 패턴을 보길 바랍니다).

thePieces[index0][index1][index2] 

길이가없는 평범한 int를 제공합니다.

필자 코드 조각을 실행하여 2를 얻었습니다. 왜 이것이 2인지 알 수 없습니다. 내가 세 번째 수준에서 두 세트를 가지고 있기 때문에? 나는 포인트가 4 세트이므로 가 예상됩니다.

당신은 전화 :

thePieces [0]이 배열을 가리키는 때문에 2를 인쇄
System.out.println(thePieces[0][0].length); 

:

{ //square 
    {0,0}, 
    {1,0}, 
    {1,1}, 
    {0,1} 
} 

4 (당신이 thePieces라고하면 [0] .length을 반환). 다른 포스터가 언급 한 것처럼 2

+0

나는 지금 생각한다. [] [] []을 사용하면 배열의 배열 배열에서 특정 항목에 대한 참조이므로 길이가 없지만 값이 있습니다. 나는 당신이 진술 한 이유 때문에 int (myInt = thePieces [0] [1] [0])가 아닌 (. 사실, 값을 얻는 유일한 방법이며 [] [] [] 이외의 다른 모든 방법은 length (배열에 대해 의미있는 다른 것)을 사용해야합니다. 배열에서 배열을 가리키고 있기 때문입니다 (배열의 배열 배열 배열, 배열 배열). – johnny

0

의 길이가

{0, 0} 

, 당신은 그것을 출력 '22'해야한다는 생각에서 올바른 그러나, thePieces [0] [0] 가리키는.

부수적으로, specific reason not to이없는 경우 배열과 달리 Java Collections 중 하나를 사용하는 것이 좋습니다. 벡터의 벡터 (예 : Vector<Vector<Integer>>). 배열을 사용하는 것은 잘못되었지만 배열보다는 컬렉션을 사용하는 것이 훨씬 쉽습니다.

+0

배열을 사용하는 방법을 이해 한 후에 사용해 보시기 바랍니다. 고맙습니다. – johnny

관련 문제