我需要将一列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]);
}
}
我该怎么办?
答案 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)