Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组指定给对象数组时出错_Java_Arrays - Fatal编程技术网

Java 将数组指定给对象数组时出错

Java 将数组指定给对象数组时出错,java,arrays,Java,Arrays,我试图在循环中使用浮点数组来分配对象数组的元素。前几行完成此任务没有任何问题,但变量FData会突出显示,并显示以下消息:表达式的类型必须是数组类型,但它已解析为Object。尽管在互联网上搜索,我仍然不明白是什么导致了这个错误 private void newData(int nF, int nL, int[] nN) { Object[] I = new Object[4], W = I, A = I, FError = I, FData = new Object[3]; I

我试图在循环中使用浮点数组来分配对象数组的元素。前几行完成此任务没有任何问题,但变量
FData
会突出显示,并显示以下消息:
表达式的类型必须是数组类型,但它已解析为Object
。尽管在互联网上搜索,我仍然不明白是什么导致了这个错误

private void newData(int nF, int nL, int[] nN) {
    Object[] I = new Object[4], W = I, A = I, FError = I, FData = new Object[3];
    I[0] = new float[1052][1052]; I[1] = new float[nF][185][185]; I[2] = new float[nF][nF][34][34]; I[3] = new float[nF][nF][nF][6][6];
    W[0] = new float[nF][128][128]; W[1] = new float[nF][nF][16][16]; W[2] = new float[nF][nF][nF][5][5]; W[3] = new float[nF][nF][nF][nF][6][6];
    A[0] = new float[nF][925][925]; A[1] = new float[nF][nF][170][170]; A[2] = new float[nF][nF][nF][30][30]; A[3] = new float[nF][nF][nF][nF];
    FData[0] = new Object[nL - 1]; FData[1] = new Object[nL]; FData[2] = FData[0];
    for(int i = 0; i < nL; i++) {
        FData[1][i] = new float[nN[i]];
        if (i > 0) FData[0][i - 1] = FData[1][i];
        FData[2][i] = new Float[nN[i]][nN[i] * nN[i + 1]];
    }
    FError[0] = FData[0]; FError[1] = FError[0]; FError[2] = FError[0]; FError[3] = FData[2];
}
private void newData(int nF,int nL,int[]nN){
Object[]I=新对象[4],W=I,A=I,FError=I,FData=新对象[3];
I[0]=新浮点数[1052][1052];I[1]=新浮点数[nF][185][185];I[2]=新浮点数[nF][nF][34][34];I[3]=新浮点数[nF][nF][nF 6][6];
W[0]=新浮动[nF][128][128];W[1]=新浮动[nF][nF][16][16];W[2]=新浮动[nF][nF][nF][5][5];W[3]=新浮动[nF][nF][nF nF nF 6][6];
A[0]=新浮动[nF][925][925];A[1]=新浮动[nF][nF][170][170];A[2]=新浮动[nF][nF][nF 30][30];A[3]=新浮动[nF][nF][nF nF nF nF];
FData[0]=新对象[nL-1];FData[1]=新对象[nL];FData[2]=FData[0];
对于(int i=0;i0)FData[0][i-1]=FData[1][i];
FData[2][i]=新浮点数[nN[i]][nN[i]*nN[i+1]];
}
FError[0]=FData[0];FError[1]=FError[0];FError[2]=FError[0];FError[3]=FData[2];
}
FData是一维数组。这些通道很好:

FData[0] = ...;
FData[1] = ...;
FData[2] = ...;
这些二维访问不是:

FData[1][i] = ...;
FData[2][i] = ...;

FData[1]
的编译时类型是
Object
。编译器不知道或不关心您是否已将子数组
对象[]
分配给该插槽。编译时类型是
Object
,您不能在
对象上使用
[]

我通过创建一些虚拟数组并将循环结果添加到
FData
来避免这个问题

private void newData(int nF, int nL, int[] nN) throws IOException {
    Object[] I = new Object[4], W = I, A = I, FError = I, FData = new Object[3], t0 = new Object[nL], t1 = t0, t2 = t0;
    I[0] = new float[1052][1052]; I[1] = new float[nF][185][185]; I[2] = new float[nF][nF][34][34]; I[3] = new float[nF][nF][nF][6][6];
    W[0] = new float[nF][128][128]; W[1] = new float[nF][nF][16][16]; W[2] = new float[nF][nF][nF][5][5]; W[3] = new float[nF][nF][nF][nF][6][6];
    A[0] = new float[nF][925][925]; A[1] = new float[nF][nF][170][170]; A[2] = new float[nF][nF][nF][30][30]; A[3] = new float[nF][nF][nF][nF];
    FData[0] = new Object[nL - 1]; FData[1] = new Object[nL]; FData[2] = FData[0];
    for(int i = 0; i < nL; i++) {
        t1[i] = new float[nN[i]];
        if (i > 0) {
            t0[i - 1] = t1[i];
            t2[i - 1] = new float[nN[i - 1]][nN[i - 1] * nN[i]];
        }
        else t2[i] = new float[nN[i]][nN[i] * nN[i + 1]];
    }
    FData[0] = t0; FData[1] = t1; FData[2] = t2;
    FError[0] = FData[0]; FError[1] = FError[0]; FError[2] = FError[0]; FError[3] = FData[2];
    save(new Object[] {I,W,A,FData,FError});
}
private void newData(int-nF,int-nL,int[]nN)引发IOException{
对象[]I=新对象[4],W=I,A=I,FError=I,FData=新对象[3],t0=新对象[nL],t1=t0,t2=t0;
I[0]=新浮点数[1052][1052];I[1]=新浮点数[nF][185][185];I[2]=新浮点数[nF][nF][34][34];I[3]=新浮点数[nF][nF][nF 6][6];
W[0]=新浮动[nF][128][128];W[1]=新浮动[nF][nF][16][16];W[2]=新浮动[nF][nF][nF][5][5];W[3]=新浮动[nF][nF][nF nF nF 6][6];
A[0]=新浮动[nF][925][925];A[1]=新浮动[nF][nF][170][170];A[2]=新浮动[nF][nF][nF 30][30];A[3]=新浮动[nF][nF][nF nF nF nF];
FData[0]=新对象[nL-1];FData[1]=新对象[nL];FData[2]=FData[0];
对于(int i=0;i0){
t0[i-1]=t1[i];
t2[i-1]=新浮点数[nN[i-1]][nN[i-1]*nN[i]];
}
else t2[i]=新浮点[nN[i]][nN[i]*nN[i+1]];
}
FData[0]=t0;FData[1]=t1;FData[2]=t2;
FError[0]=FData[0];FError[1]=FError[0];FError[2]=FError[0];FError[3]=FData[2];
保存(新对象[]{I,W,A,FData,FError});
}

此浮点数组分配给
I
而不是
FData
,因此与错误无关,对吗@格洛盖特
private void newData(int nF, int nL, int[] nN) throws IOException {
    Object[] I = new Object[4], W = I, A = I, FError = I, FData = new Object[3], t0 = new Object[nL], t1 = t0, t2 = t0;
    I[0] = new float[1052][1052]; I[1] = new float[nF][185][185]; I[2] = new float[nF][nF][34][34]; I[3] = new float[nF][nF][nF][6][6];
    W[0] = new float[nF][128][128]; W[1] = new float[nF][nF][16][16]; W[2] = new float[nF][nF][nF][5][5]; W[3] = new float[nF][nF][nF][nF][6][6];
    A[0] = new float[nF][925][925]; A[1] = new float[nF][nF][170][170]; A[2] = new float[nF][nF][nF][30][30]; A[3] = new float[nF][nF][nF][nF];
    FData[0] = new Object[nL - 1]; FData[1] = new Object[nL]; FData[2] = FData[0];
    for(int i = 0; i < nL; i++) {
        t1[i] = new float[nN[i]];
        if (i > 0) {
            t0[i - 1] = t1[i];
            t2[i - 1] = new float[nN[i - 1]][nN[i - 1] * nN[i]];
        }
        else t2[i] = new float[nN[i]][nN[i] * nN[i + 1]];
    }
    FData[0] = t0; FData[1] = t1; FData[2] = t2;
    FError[0] = FData[0]; FError[1] = FError[0]; FError[2] = FError[0]; FError[3] = FData[2];
    save(new Object[] {I,W,A,FData,FError});
}