Tablice wielowymiarowe i pętle- pomoc

0

Witajcie,
prosiłbym kogoś o pomoc w wyjaśnieniu jak przy pomocy pętli (np. for) wypełniać (i wyświetlać) oraz ogólnie używanie (odwoływanie do poszczególnych indexów idt.) tablice wielowymiarowe.
W przypadku tablic jednowymiarowych sobie radzę, jednak dalej już utknąłem w miejscu. O tablicach czytałem tutaj : http://javastart.pl/podstawy-jezyka/tablice-wielowymiarowe/ jednak nic to nie pomogło (zadania również nie potrafię zrobić/ nie rozumie dlaczego tak, a nie inaczej). Dziękuję za poświęcony czas na wytłumaczenie mi tego i pozdrawiam.

0

Well, raczej na forum nikt nie wytłumaczy Ci tego, co jest napisane na setkach innych stron (zarówno po polsku, jak i angielsku) oraz w książkach.
Byłoby prościej, jakbyś powiedział, czego dokładnie nie rozumiesz - skoro umiesz obsługiwać tablice jednowymiarowe, dwuwymiarowe (oraz wszystkie inne) nie powinny być wielkim problemem.

0

Może na przykładzie tego zadanie z podanej przeze mnie strony (javastart.pl/rozdzial1/rozwiazanie-1-14/). Nie rozumie dlaczego na początku została zadeklarowana jeszcze jedna zmienna (typu int, licznik), dlaczego pętle się zazębiają oraz czemu akurat pierwsza (int i ) odpowiada "pierwszemu indeksowi" (dokładnie chodzi o to tab**[i]**[j], nie wiedziałem jak to nazwać), a druga pętla (int j) drugiemu. Druga kwestia:

int[][] tablica = new int[3][];
tablica[0] = new int[3];
tablica[1] = new int[2];
tablica[2] = new int[1];

Skoro tablica jest wielowymiarowa to dlaczego ma ona 3 elementy i zero ([3][])? W takim wypadku nie można było zrobić jednowymiarowej?
Reasumując ogólnie nie pojmuję jak wypełniać tablice przy pomoc pętli (szczególnie to co wspomniałem na początku wiadomości).
Pozdrawiam i dziękuję za pomoc.

0

Ad.1. Tablica jest inicjalizowana wierszami (pierwszy wierz,drugi,...) kolejnymi liczbami całkowitymi poczynając od zera (w pierwszą komórkę 0, w drugą 1,...), zmienna licznik tylko po to jest potrzebna.
Ad.2. Pętle się nie zazębiają tylko się zagnieżdżają (jedna w drugiej) aby zrealizować przeglądanie całości wierszami. Nie musi pierwsza odpowiadać pierwszemu wymiarowi, a druga drugiemu, jeżeli to odwrócić to będzie przeglądanie kolumnami.
Ad.3. int[][] to nie zupełnie tablica dwuwymiarowa, raczej tablica tablic. Najpierw przydzielasz wymiar pierwszy, a potem niezależnie każdy wiersz, zauważ że te wiersze mają nawet różne rozmiary.

1

tablica[4][5] (tablica[i][j])

Wyobraź sobie teraz blok z 4 piętrami (od parteru do 3 ;) ), na każdym piętrze po 5 mieszkań.

Jeśli chciałbyś zapukać do każdych drzwi mieszkania musiałbyś przelecieć po każdym piętrze (indeks i) i po każdym mieszkaniu (indeks j).

Dlatego pętle się zagnieżdzają. Najpierw jest pętla od piętra, później od mieszkania.

for(int i=0; i< tablica.length; i++) //piętra, gdzie i to pietro
    for(int j=0; j< tablica[i].length; j++) // mieszkania, gdzie i oznacza piętro a j kolejne mieszkanie na danym pietrze
        //pukanie do drzwi

Teraz przeanalizujmy przy pomocy pieter i mieszkań na tym kodzie co podałeś:

int[][] tablica = new int[3][]; // blok z 3 piętrami
tablica[0] = new int[3]; //pierwsze pietro ma 3 mieszkania
tablica[1] = new int[2]; //drugie pietro ma 2 mieszkania
tablica[2] = new int[1]; //trzecie pietro ma 1 mieszkanie

Czy jest coś jaśniej czy zbyt abstrakcyjnie do tego podszedłem? :)))

0

Wielkie dzięki!
Perfekcyjne tłumaczenie! Sporo się rozjaśniło. Masz WIELKI plus ode mnie! Spróbuję po raz kolejny podejść do zadania ze strony- zobaczymy z jakim efektem tym razem.
Jeszcze raz dziękuję za pomoc i pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1