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

时间:2015-05-09 14:06:55

标签: java arrays parameter-passing

我需要将一列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]);
    }
}

我该怎么办?

4 个答案:

答案 0 :(得分:0)

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

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

迭代阵列&amp;得到一维数组子元素&amp;然后将它们单独传递给打印功能。

修改

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

再次迭代数组&amp;逐列提取元素。然后将它们存储在另一个数组(cols)&amp;打印那个。

    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
    }

答案 1 :(得分:0)

  

我需要将一列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];
    }
}

答案 2 :(得分:0)

您在方法标题中忘记了双方括号,并且没有将方法声明为static.So: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]);
}

答案 3 :(得分:0)

如果您可以使用第三方库,那么您可以查看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)