简体   繁体   English

分割二维数组(JAVA)

[英]segmenting a two-dimensional array (JAVA)

given an array Array[n][n] (whose size n is a power of two), I want to recursively deal with quadrants of the array. 给定一个数组Array [n] [n](其大小n为2的幂),我想递归处理该数组的象限。 How can I take a segment of the array that encompasses the [0 to (size/2)][0 to (size/2)] elements? 如何获取包含[0到(size / 2)] [0到(size / 2)]元素的数组片段? I remember in python you could just use indexing splices like [0:size/2], does JAVA have a similar way of handling these elements? 我记得在python中,您可以使用[0:size / 2]之类的索引拼接,JAVA是否具有类似的方式来处理这些元素?

I'm afraid you can't do exactly that. 恐怕您不能完全做到这一点。

If all you needed were a unidimensional array you could use 1 : 如果您只需要一维数组,则可以使用1

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

Which is verbose but essentially the same as slicing in Python. 这很冗长,但与Python中的切片基本相同。

But since you need a bidimensional array (which is implemented in Java as an array of arrays ) you need something like this: 但是,由于您需要一个二维数组(在Java中以数组形式实现 ),因此需要这样的代码:

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

Where: 哪里:

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

For some qArray would give you: 对于一些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]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM