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.
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.
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.
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.
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? :)))
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.