2015-01-25 6 views
0

배열 배열 [n] [n] (크기 n은 2의 거듭 제곱 임)을 세그먼트 화하면 배열의 사분면을 재귀 적으로 처리하려고합니다. [0 ~ (size/2)] [0 ~ (size/2)] 요소를 포함하는 배열의 세그먼트를 어떻게 잡을 수 있습니까? 나는 파이썬에서 [0 : size/2]와 같은 인덱싱 스플 라이스를 사용할 수 있다는 것을 기억한다. JAVA는 이러한 요소를 다루는 비슷한 방법을 가지고 있는가?2 차원 배열 (JAVA)

+2

배열의 '길이'속성은 어떻습니까? 당신이 그것을하고 싶어 plit? –

답변

1

정확하게 할 수는없는 것 같습니다. 자세한하지만 파이썬으로 공격 태도를 보여준 본질적으로 동일

Arrays.copyOfRange(T[] original, int from, int to) 

: 모든 당신이 필요한 경우

당신이 1을 사용할 수있는 일차원 배열했다.

class QArray { 
    private Integer[][] array; 
    private int quadrantSize; 

    public QArray(Integer[][] array) { 
    this.array = array; 
    this.quadrantSize = array.length/2; 
    } 

    public QArray getQuadrant(int quadrant) { 
    QArray quadrantArray; 

    switch(quadrant) { 
     case 1: 
     quadrantArray = getQuadrant(0, quadrantSize); 
     break; 
     case 2: 
     quadrantArray = getQuadrant(0, 0); 
     break; 
     case 3: 
     quadrantArray = getQuadrant(quadrantSize, 0); 
     break; 
     case 4: 
     quadrantArray = getQuadrant(quadrantSize, quadrantSize); 
     break; 
     default: 
     throw new IllegalArgumentException("Invalid quadrant: " + quadrant); 
    } 
    return quadrantArray; 
    } 

    private QArray getQuadrant(int startRow, int startCol) { 
    Integer[][] quadrantArray = new Integer[quadrantSize][]; 
    for (int r = 0; r < quadrantSize; r++) { 
     quadrantArray[r] = Arrays.copyOfRange(array[startRow + r], startCol, startCol + quadrantSize); 
    } 

    return new QArray(quadrantArray); 
    }  
} 

경우 : 당신이 (AN array of arrays 자바로 구현되는)을 bidimensional 배열을 필요로하기 때문에

은 그러나 당신이 뭔가를 할 몇 가지 qArray를 들어

System.out.println(qArray); 
System.out.println(qArray.getQuadrant(2)); 
System.out.println(qArray.getQuadrant(1)); 
System.out.println(qArray.getQuadrant(3)); 
System.out.println(qArray.getQuadrant(4)); 

당신을 줄 것이다 :

[ 1, 2, 3, 4] 
[ 5, 6, 7, 8] 
[ 9, 10, 11, 12] 
[13, 14, 15, 16] 

[ 1, 2] 
[ 5, 6] 

[ 3, 4] 
[ 7, 8] 

[ 9, 10] 
[13, 14] 

[11, 12] 
[15, 16]