【问题标题】:initializing multi dimensional arrays in java [closed]在java中初始化多维数组[关闭]
【发布时间】:2019-01-09 10:53:59
【问题描述】:

我试图将特定的动态值分配给 java 中的多维数组。这些是我尝试解决的两个步骤。有没有简单直接的方法。

我正在尝试使用此代码

            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 手机记录[][][][] -0 将手机记录打印为数组-[[[[J@55f96302 将手机记录打印为数组-[[[[J@55f96302

【问题讨论】:

  • 旁注:将for-loop 用于带有计数器的循环会更惯用,这会将计数器的范围限制为循环体。
  • 什么是“动态值”,您会遇到什么错误?我认为您需要阅读MCVE
  • 旁注2:还有后自增运算符,可以用来写重复较少的增量:arrcntr1=arrcntr1+1;可以写成arrcntr1++;
  • 您的错误消息是“数组常量只能在初始化程序中使用”,但您在向我们展示的任何代码中都没有使用数组常量。错误必须在其他地方。检查错误消息中报告的行号。
  • mobilephonerecords[recrdcntrx][recrdcntrx][recrdcntrx][recrdcntrx] 不是一个数组,它是一个long。你为什么要给那个位置分配一个数组?

标签: java arrays multidimensional-array


【解决方案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

无需使用Arrays.fill()自行初始化数组,按照JLS 4.12.5. Initial Values of Variables

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

【讨论】:

  • hmmm .... 好的,但第二步更重要。可以请你把你宝贵的cmets放在上面吗?
  • @saifahmed 您的第二步非常不清楚,请更新问题以说明您在做什么。
  • 我已经编辑了这个问题。请检查。
猜你喜欢
  • 2010-11-07
  • 2013-01-20
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多