我在MATLAB程序中有以下代码,该程序在循环中创建三个三维数组,我试图在我的JAVA程序中复制这一点。
MATLAB代码如下:
for j = 1 : J
for k = 1 : K
A(j,:,k) = VariableA * ArrayB
B(j,:,k) = VariableA ./ ArrayB
AB(j,:,k) = A.*B
end
end
在JAVA中,我已经初始化了将通过代码使用的数组:
double [][][] A = new double [(int) (J)][(int) (N+1)][(int)(K)];
double [][][] B = new double [(int) (J)][(int) (N+1)][(int)(K)];
double [][][] AB = new double [(int) (J)][(int) (N+1)][(int)(K)];
请注意,所有变量都是在MATLAB和JAVA程序的这一部分代码之前定义的。VariableA是一个定义值,即10,ArrayB是一个一维行数组,即[1 2 3 4 5 6 7]。
我在JAVA中用于创建A的代码(我对B和AB使用了相同的方法)是:
for (int j = 0; j < A.length; j++)
for ( int i = 0; i < A.length; i++)
for (int k = 0; k < A.length; k++)
A[j][i][k] = (ArrayB[j] * VariableA);
System.out.println(Arrays.deepToString(A));
然而,上面的代码只适用于前几个值。输出如下:
[[[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]]
任何帮助,想法或指针将是最受欢迎的,因为我不知道它在哪里出错,前6个值是整个预期的,但数组也将被分割成单独的数组作为一个3-d数组是数组的数组。
首先,你的循环是错误的。你的第一个循环从0迭代到a .length,这很好,但你的下一个循环也从0迭代到a .length,这是错误的,因为你的多维数组的第二层是不同的大小。
试试相反:
for (int j = 0; j < A.length; j++)
for ( int i = 0; i < A[j].length; i++)
for (int k = 0; k < A[j][i].length; k++)