[英]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.