Инициализация многомерных массивов с расширенным циклом for в Java
Я просто играю со своим кодом, и мне было интересно, возможна ли инициализация многомерного массива с расширенным циклом 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];
Я знаю, что мог бы использовать Коллекции для этого материала, но я просто пробовал что-то новое.
2 ответа
Поскольку для записи в массив нужен индекс, вы не можете использовать расширенный 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;
}
То, что вы пытаетесь сделать, не имеет смысла, поскольку вы должны знать индексы массива, чтобы присвоить ему значения.
Усовершенствованный цикл 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;
}
}
Вы говорите мне, какая версия более читабельна.