/ / Inicjalizacja tablic wielowymiarowych za pomocą rozszerzonej pętli for w java - java, multidimensional-array

Inicjowanie wielowymiarowych tablic z ulepszoną pętlą for w java - java, tablica wielowymiarowa

Po prostu bawię się moim kodem i zastanawiałem się, czy możliwe jest zainicjowanie tablicy wielowymiarowej za pomocą rozszerzonej pętli for.

Jak to naprawić?

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);
}
}

Jak byście to zrobili w 3 wymiarach?

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

Wiem, że mogłem użyć kolekcji do tych rzeczy, ale po prostu próbowałem różnych rzeczy.

Odpowiedzi:

3 dla odpowiedzi № 1

Ponieważ potrzebujesz indeksu do zapisywania w tablicy, nie możesz używać rozszerzonego for pętla aktualizacji. Jednak modyfikujesz tylko najbardziej wewnętrzne tablice w przypadku tablicy wielowymiarowej w Javie. Dlatego możesz użyć ulepszonego for pętla dla zewnętrznych tablic:

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;
}
}

To samo dotyczy dowolnej liczby wymiarów:

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;
}

2 dla odpowiedzi nr 2

To, co próbujesz zrobić, nie ma sensu, ponieważ musisz znać wskaźniki tablicy, aby przypisać do niej wartości.

Ulepszona pętla ukrywa przed tobą te indeksy, więc będziesz musiał utrzymywać własne indeksy, co sprawia, że ​​korzystanie z rozszerzonej pętli nie ma sensu.

Jasne, możesz zrobić coś takiego:

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++;
}

Ale ponieważ nie używasz x i a, możesz po prostu użyć zwykłej pętli 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;
}
}

Powiedz mi, która wersja jest bardziej czytelna.