Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中展平二维或三维阵列_Java_Arrays - Fatal编程技术网

在Java中展平二维或三维阵列

在Java中展平二维或三维阵列,java,arrays,Java,Arrays,我需要取一个多维数组并将其展平,这样如果数组看起来像: [1,2,3] [4,5,6] 然后将其转换为: [1,2,3,4,5,6] 我还需要适应3D阵列并将其展平 这是我到目前为止得到的 class ArrayOperations { private int[] postFlattenedArray; public ArrayOperations { flattenedArray = new int[arrayDimensions[0]]; // arrayDimesnsions of

我需要取一个多维数组并将其展平,这样如果数组看起来像:

[1,2,3]
[4,5,6]
然后将其转换为:

[1,2,3,4,5,6]
我还需要适应3D阵列并将其展平

这是我到目前为止得到的

class ArrayOperations {
private int[] postFlattenedArray;

public ArrayOperations {

flattenedArray = new int[arrayDimensions[0]];
// arrayDimesnsions of 3,4 is a a 3x4 array; 3,4,5 is a 3x4x5 array

//set up ints to hold total size and dimensionality of array
int prod = 1
int dimensions = 0;

newArray = new int[prod - 1];

for (int i: arrayDimensions) {
  prod = prod * i;
  dimensions += 1;
  }
int k = 0;

for ( int i: arrayDimensions ){
for ( int j = 0; j <= i; j++ ){
  newArray[k++] = flattenedArray[j][0][0]
}
}

}

似乎最简单的解决方案是实现一个递归函数
flatte
(可能必须是泛型的,才能处理任何数组),如果已经是flat,它将返回数组本身,或者递归地调用所有内部数组并连接结果。

试试这个

static void flatten(Object object, List<Integer> list) {
    if (object.getClass().isArray()) 
        for (int i = 0; i < Array.getLength(object); ++i)
            flatten(Array.get(object, i), list);
    else
        list.add((int)object);
}

static int[] flatten(Object object) {
    List<Integer> list = new ArrayList<>();
    flatten(object, list);
    int size = list.size();
    int[] result = new int[size];
    for (int i = 0; i < size; ++i)
        result[i] = list.get(i);
    return result;
}
static void flatten(Object object, List<Integer> list) {
    if (object.getClass().isArray()) 
        for (int i = 0; i < Array.getLength(object); ++i)
            flatten(Array.get(object, i), list);
    else
        list.add((int)object);
}

static int[] flatten(Object object) {
    List<Integer> list = new ArrayList<>();
    flatten(object, list);
    int size = list.size();
    int[] result = new int[size];
    for (int i = 0; i < size; ++i)
        result[i] = list.get(i);
    return result;
}
int[][][] array = {
    {{1, 2, 3}, {4, 5}},
    {{6}, {7, 8, 9}},
};
System.out.println(Arrays.toString(flatten(array)));
// -> [1, 2, 3, 4, 5, 6, 7, 8, 9]