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