我正在玩我的代码,并且想知道是否可以使用增强的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来解决这个问题,但我只是在努力解决问题。
答案 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++;
}
但是,由于您没有使用x
和a
,因此您只需使用常规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;
}
}
你告诉我哪个版本更具可读性。