Pentru fiecare buclă folosind matrice 2D (Programare, Java, Array-Uri, Foreach)

uml a intrebat.

Acesta este fragmentul de cod Java:

int[][] uu = new int[1][1];
uu[0][0] = 5;
for(int[] u: uu){
    System.out.println(u[0]);
}

Se tipărește 5. Dar de ce partea de declarație a buclei for este declarată as int[] u, dar nu și as int[][] u?

La uu se face referire la o matrice 2D… Aceasta nu este o temă de casă. Mă pregătesc pentru certificarea Java.Noroc

Comentarii

  • Doar o sugestie prostească: – Nu este 2-D array în Java. Este un array of array. –  > Por Rohit Jain.
  • Este implementat în modul de matrice în matrice, dar în cărți se numește matrice 2D. –  > Por uml.
  • @uml… Poate fi, dar totuși un array of array este un termen mai bun pentru a-l denumi. Îl veți cunoaște în viitor. 🙂 –  > Por Rohit Jain.
  • @uml Știu că o mulțime de cărți îl numesc matrice 2D, iar dacă aș avea nevoie de o matrice 2D într-un program Java, aș mapa-o în această structură, dar în realitate este o matrice de matrice și este mult mai bine să ne gândim la ea în acest fel. De exemplu, răspunsul la întrebarea dvs. devine evident dacă vă gândiți la bucla for ca la o iterație peste un tablou, fiecare dintre elementele căruia este un int[]. –  > Por Patricia Shanahan.
4 răspunsuri
Rohit Jain

Deoarece întrebarea dvs. uu este un array of array. Deci, atunci când iterați peste el, veți obține mai întâi un arrayși apoi puteți itera peste această matrice pentru a obține elemente individuale.

Astfel, bucla exterioară are int[] ca tip și, prin urmare, această declarație. Dacă iterați prin u într-o altă buclă interioară, veți obține tipul int: –

for (int[] u: uu) {
    for (int elem: u) {
        // Your individual element
    }
}

ShyJ

Acest lucru se datorează faptului că uu este o matrice de int[] array-uri. Deci, fiecare element din el este int[]. Într-un for buclă se declară tipul unui element dintr-o matrice peste care se face iterația.

amit

Bucla itera pe elementele din uucare sunt obiecte de tip int[]. (Sau, cu alte cuvinte, – u este un element din uu, deci este un element int[]).

Declarația este întotdeauna de tipul obiectelor recuperate prin iterație – în acest caz – este int[]

Același lucru ca și iterarea peste un int[] este:

 for (int x : myArray) { ...}

deoarece fiecare element din x este de tip int.

XenoRo

„de ce partea de declarație a buclei for este declarată ca int[] u, dar nu ca int[][][] u?”

Matricea este bidimensională, deci aveți de-a face cu o iterație pe două niveluri. Aveți un array „în interiorul” altuia, pe același principiu ca și în cazul lui List<List<Integer>> ar funcționa.

Pentru a itera prin toate elementele, ar trebui să luați în considerare o structură rows-elements. Este necesar să obțineți fiecare rând din container și apoi fiecare element din fiecare rând.

for(int[] u: uu) este pur și simplu o iterație for-each rows, cu același principiu de for(int row = 0; row < container.length; row++), și u sau, respectiv container[row] nu sunt elemente în sine, ci rânduri (array-uri) de elemente. Ceea ce înseamnă că aveți nevoie de un al doilea strat de iterație pentru a obține elementele:

int[][] container = new int[10][10];
//... - Fill elements.
for(int row = 0; row < container.length; row++){
  for(int element = 0; element < container[row].length; element++){
    System.out.printf("Row: %d Element: %d Value: %d
", row, element, container[row][element]);
  }
}