2015-01-25 3 views
0

для массива Array [n] [n] (размер n которого равен двум), я хочу рекурсивно работать с квадрантами массива. Как я могу взять сегмент массива, который включает элементы [0 to (size/2)] [0 to (size/2)]? Я помню, что в python вы могли просто использовать индексирующие сращивания, такие как [0: размер/2], имеет ли JAVA аналогичный способ обработки этих элементов?сегментирование двумерного массива (JAVA)

+2

Как насчет свойства 'length' массива и любых математических/plit вы хотите сделать на нем? –

ответ

1

Боюсь, вы не можете этого сделать.

Если все, что вам нужно было одномерный массив можно использовать 1:

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

Какой многословен, но по существу такой же, как нарезка в Python.

Но так как вам нужен двумерный массив (который реализуется в Java как array of arrays) вам нужно что-то вроде этого:

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); 
    }  
} 

Где:

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)); 

Для некоторых qArray даст вам:

[ 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] 
Смежные вопросы