如何在JAVA中从2D数组中获取2D子数组?

如何在JAVA中从2D数组中获取2D子数组?,java,arrays,2d,Java,Arrays,2d,假设我有如下2D数组: int[][] temp={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; 我想得到从X方向1到2和Y方向1到2的子数组,也就是说 {6,7} {10,11} 有人能给我上述问题的解决方案吗。您可以实例化一个新数组,并循环使用原始数组的适当索引来初始化子数组。给您 int[][] temp = { { 1, 2, 3, 4 }, { 5, 6, 7,

假设我有如下2D数组:

int[][] temp={
              {1,2,3,4},
              {5,6,7,8},
              {9,10,11,12}};
我想得到从X方向1到2和Y方向1到2的子数组,也就是说

{6,7}
{10,11}

有人能给我上述问题的解决方案吗。

您可以实例化一个新数组,并循环使用原始数组的适当索引来初始化子数组。

给您

    int[][] temp = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    int[][] a = new int[temp.length][];
    for (int i = 0; i < temp.length; i++) {
        a[i] = Arrays.copyOfRange(temp[i], 1, 3);
    }
    System.out.println(Arrays.deepToString(a));
如果我们只想访问[[6,7],[10,11],请在评论中回答您的问题


例如,不使用Arrays类:

int[][] temp = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
int[][] subArray = new int[temp.length][];
for (int i = 0; i < subArray.length; i++) {
    subArray[i] = new int[2];
    subArray[i][0] = temp[i][1];
    subArray[i][1] = temp[i][2];
}
int[]temp={{1,2,3,4},{5,6,7,8},{9,10,11,12};
int[][]子数组=新int[temp.length][];
对于(int i=0;i
然后,您可以访问所需子阵列的任何部分。这将访问值[[6,7]、[10,11]:

for (int x = 1; x < 3; x++) {
    System.out.println(subArray[x][0]);
    System.out.println(subArray[x][1]);
}
for(int x=1;x<3;x++){
System.out.println(子数组[x][0]);
System.out.println(子数组[x][1]);
}
[补充]为了解决修改后的问题:

如果要创建较小的数组,可以使用循环的起点和终点,以及循环中访问的索引,例如,这将创建所需的数组:

int[][] subArray = new int[2][];
for (int i = 1; i < temp.length; i++) {
    subArray[i-1] = new int[2];
    subArray[i-1][0] = temp[i][1];
    subArray[i-1][1] = temp[i][2];
}
int[][]子数组=新的int[2][];
对于(int i=1;i
只需在已接受的答案上添加一点即可

可以使用静态方法将其推广到所有具有固定宽度和高度的二维阵列

public static char[][] get2DSubArray(char[][] origArray, int fromRow, int toRow, int fromColumn, int toColumn) {
    char[][] subArray = new char[toColumn - fromColumn][];
    
    for (int i = fromColumn; i < toColumn; i++) {
        subArray[i - fromColumn] = Arrays.copyOfRange(origArray[i], fromRow, toRow);
    }
    
    return subArray;
}
public static char[][]get2DSubArray(char[][]origArray、int-fromRow、int-toRow、int-fromrolumn、int-toColumn){
char[][]子数组=新的char[toColumn-fromColumn][];
for(inti=fromColumn;i


希望这也能有所帮助

但是如果我们只想访问[[6,7],[10,11]?那么我的数组是这样的,当我使用int[]data=Arrays.copyOfRange(数组,1,3)时,我得到的输出是这样的[[0,1,0,0,0,0,0],[1,1,0,0,0,0,0,0];System.out.println(数组.deepToString(数据));我想要像[[0,1],[1,1]]。。。有什么办法吗?哪种方法更快?上面提供的方法或迭代方法在运行时是明智的?
for (int x = 1; x < 3; x++) {
    System.out.println(subArray[x][0]);
    System.out.println(subArray[x][1]);
}
int[][] subArray = new int[2][];
for (int i = 1; i < temp.length; i++) {
    subArray[i-1] = new int[2];
    subArray[i-1][0] = temp[i][1];
    subArray[i-1][1] = temp[i][2];
}
public static char[][] get2DSubArray(char[][] origArray, int fromRow, int toRow, int fromColumn, int toColumn) {
    char[][] subArray = new char[toColumn - fromColumn][];
    
    for (int i = fromColumn; i < toColumn; i++) {
        subArray[i - fromColumn] = Arrays.copyOfRange(origArray[i], fromRow, toRow);
    }
    
    return subArray;
}