MATLAB代码转换成JAVA三维数组内的for循环



我在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++)

相关内容

  • 没有找到相关文章

最新更新