在Java中初始化多维数组

时间:2019-01-09 10:53:59

标签: java arrays multidimensional-array

我正在尝试为Java中的多维数组分配特定的动态值。这些是我正在尝试解决的2个步骤。有没有简单的直接方法。

我正在尝试使用此代码

            while (recrdcntrx<numberofrecords)
            {
                mobilephonerecords[recrdcntrx][recrdcntrx][recrdcntrx][recrdcntrx]= {mobilenumbercntrx,unsortedmobilenumbers[mobilenumbercntrx],arraystart[mobilenumbercntrx],arrayend[mobilenumbercntrx]};
                mobilenumbercntrx=mobilenumbercntrx+1;
                recrdcntrx=recrdcntrx+1;
            }

但不起作用。所以我正在尝试解决方法。

A。初始化

long mobilephonerecords[][][][]= new long[100][100][100][100];

for (long[][][] row: mobilephonerecords) {
    for (long[][] innerRow: row) {
        for (long[] innerInnerRow: innerRow) {
            Arrays.fill(innerInnerRow, 0);
        }
    }
};

我找到了初始化它们的方法,但是当我尝试下一步时,它抛出了编译时错误-'数组常量只能在初始化器中使用'

我们必须分配这些动态值-arrcntr1, unsortedmobilenumbers[arrcntr1],arraystart[arrcntr1],arrayend[arrcntr1]

    int xcntr=0;
        int arrcntr1=0;
        long temp1=0;

        int arrcntr2=0;
        long temp2=0;

        int arrcntr3=0;
        long temp3=0;

        int arrcntr4=0;
        long temp4=0;

        while(xcntr<recrdcntr)
        {
            temp1=arrayend[arrcntr1];
            mobilephonerecords[0][0][0][arrcntr1] = temp1;
            arrcntr1=arrcntr1+1;
            xcntr=xcntr+1;

        }

    int ycntr=0;

        while(ycntr<recrdcntr)
        {
            temp2=arraystart[arrcntr2];
            mobilephonerecords[0][0][arrcntr2][0] = temp2;
            arrcntr2=arrcntr2+1;
            ycntr=ycntr+1;

        }

        int zcntr=0;

        while(zcntr<recrdcntr)
        {
            temp3=unsortedmobilenumbers[arrcntr3];
            mobilephonerecords[0][arrcntr3][0][0] = temp3;
            arrcntr3=arrcntr3+1;
            zcntr=zcntr+1;

        }


            int icntr=0;

            while(icntr<recrdcntr)
            {
                temp4=icntr;
                mobilephonerecords[arrcntr4][0][0][0] = temp4;
                arrcntr4=arrcntr4+1;
                icntr=icntr+1;

            }
  1. 我尝试了解决方法,但未分配编号- 3。 我尝试了解决方法,但未将数字分配给mobilephonerecords 4d数组。

    while (recrdcntrx<numberofrecords)
    {
        System.out.println("mobilephonerecords[][][][] -"+mobilephonerecords[recrdcntrx][recrdcntrx][recrdcntrx][recrdcntrx]);
        mobilenumbercntrx=mobilenumbercntrx+1;
        recrdcntrx=recrdcntrx+1;
    }
    
    recrdcntrx=0;
    while (recrdcntrx<numberofrecords)
    {
        System.out.println("print mobilephonerecords as array-"+mobilephonerecords);
        mobilenumbercntrx=mobilenumbercntrx+1;
        recrdcntrx=recrdcntrx+1;
    }
    
    1. 输出

    mobilephonerecords [] [] [] [] -0 mobilephonerecords [] [] [] [] -0 将手机记录打印为数组-[[[[J @ 55f96302 将手机记录打印为数组[[[[[J @ 55f96302

1 个答案:

答案 0 :(得分:1)

new long[100][100][100][100]将使用默认的long0初始化数组。您可以通过检查数组中的随机索引来查看它:

long[][][][] arr = new long[100][100][100][100];
System.out.println(arr[30][21][33][17]); // 0

根据JLS 4.12.5. Initial Values of Variables,无需使用Arrays.fill()自己初始化数组:

  

每个类变量,实例变量或数组组件在创建时都会用默认值初始化(第15.9节,第15.10节):