JAVA 将二维数组的列作为一维数组传递

JAVA pass column of 2d array as 1d array

我需要将二维数组的一列作为一维数组传递。

我做了这个例子来解释,我不知道怎么调用print函数

public static void main(String[] args) {

    double[][] matrix = {{ 0,1,2},
                        {3,4,5},
                        };
}

public void print(double[] vector){

    for(int i = 0; i< vector.length ; i++){
        System.out.print(vector[i]);
    }
}

我该怎么办?

这是您正在寻找的解决方案吗?

public static void main(String[] args) {
    double[][] matrix = { { 0, 1, 2 }, { 3, 4, 5 }, };
    for (int i = 0; i < matrix.length; i++) {
        print(matrix[i]);
        System.out.println();//Prints a new line
    }
}

public static void print(double[] vector) {
    for (int i = 0; i < vector.length; i++) {
        System.out.print(vector[i] + " ");
    }
}

迭代数组并获取一维数组子元素,然后将它们分别传递给打印函数。

编辑:

没有任何简单的方法可以做到这一点。您必须相应地更改数据结构。所以这是一种原始的方法:

再次遍历数组并按列提取元素。然后将它们存储在另一个数组 (cols) 中并打印出来。

    double[][] matrix = { { 0, 1, 2 }, { 3, 4, 5 }, };
    for (int j = 0; j < matrix[0].length; j++) {
        double[] cols = new double[matrix.length];
        for (int i = 0; i < matrix.length; i++) {
            cols[i] = matrix[i][j];// Iterate column-wise
        }
        print(cols);// Call the 1D array print method
        System.out.println();// Prints new line
    }

I need to pass a column of 2d array as 1d array.

不直接你不能用二维数组调用方法,因为你的方法接受参数 double[] 而不是 double[][]。二维数组可以将一维数组作为其中的元素。因此,matrix[int index] 将为您提供一维数组以将其传递给方法。

因此要么将方法声明更改为 print(double[][] vectors),要么将 matrix[index] 作为方法参数传递。

您可以通过实例调用该方法class。

YourClass obj = YourClass();
obj.print(matrix[i]);

由于您的方法采用矢量,因此应使用 matrix[index]

您可以通过迭代矩阵从矩阵构建列向量,然后将向量传递给方法。

编辑:

您需要遍历矩阵并将所有一维数组的第一个元素收集到另一个一维数组并将其作为参数传递给该方法。

double[] vector = new double[matrix.length];
for(int i=0;i<matrix.length;i++) {
    double oneDArray[] = matrix[i];//Only for example
    if(oneDArray != null && oneDArray.length >0 ) {
       vector[i] = oneDArray[0];
    }
}

您在方法头中忘记了双方括号并且没有将方法声明为 static.So:public void print(double[] vector) 应该是:public static void print(double[][]vector)。调用打印方法:print(matrix);。 另外,您的 for 循环是错误的。你必须有双方括号。就像现在一样,它将打印类似这样的内容:[D@48e61e。那是因为你需要使用双括号,所以如果你想打印一行,它将是:

for(int i = 0; i< vector[1].length ; i++){
    System.out.print(vector[0][i]);
}

要打印列,请执行以下操作:

int j = 1;//or whatever column you want to print    
for(int i=0; i<vector.length; i++){
    System.out.println(vector[i][j]);
}

如果您可以使用第三方库,那么您可以看看 Common Maths Library

只需三行代码就可以得到该列:

double[][] twoDimData = new double[10][10];
BigMatrix matrix = MatrixUtils.createBigMatrix(twoDimData);
matrix.getColumnAsDoubleArray(0);

如果你想要一个低级别的解决方案,那么你可以尝试:

double[][] matrix = {{ 0,1,2},{3,4,5}};
int columnToTake = 2;
double[] colArray;
for(int row = 0; row < numRows; row++)
{
    colArray[row] = matrix[row][columnToTake];
}
print(colArray)