繁体   English   中英

JAVA将2d数组的列作为1d数组传递

[英]JAVA pass column of 2d array as 1d array

我需要将2d数组的列作为1d数组传递。

我已经做了这个例子来解释,我不知道如何调用打印功能。

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] + " ");
    }
}

遍历数组并获取1D数组子元素,然后将它们分别传递给打印功能。

编辑:

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

再次遍历数组并按列提取元素。 然后将它们存储在另一个数组( 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
    }

我需要将2d数组的列作为1d数组传递。

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

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

您可以通过类的实例来调用该方法。

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

由于您的方法需要向量,因此应使用matrix[index]

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

编辑:

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

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];
    }
}

您忘记了方法标题中的双方括号,并且没有将方法声明为静态。因此: public void print(double[] vector)应该是: public static void print(double[][]vector) 调用print方法: 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM