在java中使用增强的for循环初始化多维数组

时间:2014-10-21 10:42:22

标签: java multidimensional-array

我正在玩我的代码,并且想知道是否可以使用增强的for循环初始化多维数组。

我该如何解决这个问题?

double[][] array2 = new double[2][5];
int b=1;
    counter=0;
    for(double[] x:array2)
    {
        for(double a:x)
        {
            array2[][counter]=b;    //<- errors here
            counter++;
            b+=2;
        }
    }

    //output what it contains
    for(double[] x:array2)
    {
        for(double a:x)
        {
            System.out.println(a);
        }
    }

你们如何用3个维度做到这一点?

  double[][][] array3 = new double[4][5][6];

我知道我可以使用Collections来解决这个问题,但我只是在努力解决问题。

2 个答案:

答案 0 :(得分:3)

由于您需要索引来写入数组,因此无法使用增强的for循环进行更新。但是,在Java中使用多维数组时,您只修改最内层的数组。因此,您可以对外部数组使用增强的for循环:

double[][] array2 = new double[2][5];
int b=1;
for(double[] x:array2) {
    for(int index = 0; index < x.length; index++) {
      x[index]=b;
      b+=2;
    }
}

同样适用于任何数量的维度:

double[][][] array3 = new double[4][5][6];
int b=1;
for(double[][] outer: array3)
  for(double[] inner: outer)
      for(int index = 0; index < inner.length; index++) {
        inner[index]=b;
        b+=2;
      }

答案 1 :(得分:2)

您要做的事情毫无意义,因为您必须知道数组的索引才能为其赋值。

增强的for循环隐藏了你的那些索引,所以你必须维护自己的索引,这使得使用增强的for循环毫无意义。

当然,你可以这样做:

int b=1;
int row=0;
for(double[] x:array2)
{
    int col=0;
    for(double a:x)
    {
        array2[row][col]=b;
        col++;
        b+=2;
    }
    row++;
}

但是,由于您没有使用xa,因此您只需使用常规for循环:

int b=1;
for(int row=0;row<array2.length;row++)
{
    for(int col=0;col<array2[row].length;col++)
    {
        array2[row][col]=b;
        b+=2;
    }
}

你告诉我哪个版本更具可读性。