分割二维数组(JAVA)

时间:2015-01-25 21:58:14

标签: java arrays

给定一个数组Array [n] [n](其大小n是2的幂),我想以递归方式处理数组的象限。如何获取包含[0到(size / 2)] [0到(size / 2)]元素的数组片段?我记得在python中你可以使用像[0:size / 2]那样的索引拼接,JAVA是否有类似处理这些元素的方式?

1 个答案:

答案 0 :(得分: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]