Spis treści
- Tablice to obiekty, które mogą przechowywać określoną liczbę elementów danego typu.
- Tablicę definiuje się poprzez podanie typu, po którym następują nawiasy kwadratowe, a potem nazwa zmiennej. Dla przykładu, poniższa tablica to tablica elementów typu int, czyli może ona przechowywać liczby całkowite typu int:
int[] mojaTablica;
- Zanim będziemy mogli używać tablicy, musimy ją utworzyć. Aby to zrobić, możemy:
- utworzyć tablicę, podając ile maksymalnie elementów może przechowywać, korzystając ze słowa kluczowego new,
- zainicjalizować tablicę w momencie jej definiowania wartościami zawartymi w nawiasach klamrowych,
- nie tworzyć tablicy od razu, lecz utworzyć ją później, korzystając ze słowa kluczowego new oraz podając w nawiasach klamrowych wartości, jakie na wstępie mają być zawarte w tablicy:
// tablica, ktora moze przechowywac maksymalnie 5 wartosci calkowitych int[] calkowite = new int[5]; // tablica, ktora moze przechowywac maksymalnie 3 wartosci rzeczywiste // wstepnie zainicjalizowane wartosciami 3.14, 5, -20.5 double[] rzeczywiste = { 3.14, 5, -20.5 }; // tablica, ktora bedzie mogla przechowywac ciagi znakow // na razie nie podalismy, ile wartosci typu String // ta tablica bedzie mogla przechowywac String[] slowa; // tworzymy tablice, ktora bedzie mogla miec maksymalnie // trzy elementy, i inicjalizujemy ja trzema elementami, // kolejno: Ala, ma, kota slowa = new String[] { "Ala", "ma", "kota" };
- Rozmiar raz utworzonej tablicy pozostaje niezmienny.
- Aby odnieść się do poszczególnych elementów tablicy, używamy operatora [ ] (nawiasy kwadratowe), któremu podajemy indeks elementu, do którego chcemy się odnieść.
calkowite[0] = 10; // pierwszy element ma indeks 0 (a nie 1)! calkowite[1] = 15; calkowite[4] = 200; // piaty element ma indeks 4 (a nie 5)!
- Elementy tablic w języku Java zaczynają się od indeksu 0, a nie 1!
- Wartości tablic inicjalizowane są domyślną wartością danego typu. W przypadku typu int jest to 0.
- Zmienną tablicową można "odpytać" o liczbę elementów, które przechowuje, korzystając z atrybutu tablicy o nazwie length:
double[] rzeczywiste = { 3.14, 5, -20.5 }; System.out.println(rzeczywiste.length); // wypisze 3
- Typ String można odpytać o liczbę znaków, z których się składa, za pomocą metody length() – należy zwrócić uwagę, że w przypadku typu String, korzystając z length, należy dodać na końcu nawiasy. W przypadku tablic, używamy atrybutu length – bez nawiasów.
- Jeżeli spróbujemy pobrać element spoza zakresu tablicy, to w trakcie działania programu zobaczymy błąd ArrayIndexOutOfBoundsException.
- Podczas iterowania po tablicy (przechodzenia przez jej elementy) należy zwrócić uwagę, by odpowiednio ustawić warunek zakończenie pętli. Pierwszy z poniższych przykładów jest poprawny, a drugi zakończy się błędem ArrayIndexOutOfBoundsException po uruchomieniu:
for (int i = 0; i < rzeczywiste.length; i++) { System.out.print(rzeczywiste[i] + ", "); } // blad! powinnismy uzyc operatora < zamiast <= // poniewaz ostatni element w tablicy ma indeks rowny length - 1 // (bo numeracja elementow zaczyna sie od 0, a nie 1) for (int i = 0; i <= rzeczywiste.length; i++) { System.out.print(rzeczywiste[i] + ", "); }
- Tablice mogą mieć więcej niż jeden wymiar:
int[][] tablica2d = new int[3][5]; char[][] kwadrat = { { 'X', 'X', 'X', 'X' }, { 'X', 'O', 'O', 'X' }, { 'X', 'O', 'O', 'X' }, { 'X', 'X', 'X', 'X' } }; tablica2d[1][1] = 10; tablica2d[1][2] = -2; tablica2d[1][3] = 100; tablica2d[1][4] = 42;
- Możemy także sprawdzić długość każdego wymiaru tablicy wielowymiarowej w następujący sposób:
System.out.println("Pierwszy wymiar: " + tablica2d.length); System.out.println("Drugi wymiar: " + tablica2d[0].length);
Pierwszy wymiar: 3 Drugi wymiar: 5 - Możemy użyć zagnieżdżonych pętli, by przejść przez wszystkie elementy tablicy wielowymiarowej:
for (int rzad = 0; rzad < tablica2d.length; rzad++) { for (int kolumna = 0; kolumna < tablica2d[rzad].length; kolumna++) { System.out.print(tablica2d[rzad][kolumna]); } System.out.println(); }
- Pętla zwana for-each pozwala na łatwe iterowanie po tablicy bądź kolekcji:
for (typ nazwaZmiennejPetli : tablica_badz_kolekcja) { // instrukcje }
- Przykład:
int[] liczby = { 1, 5, 20 }; for (int x : liczby) { System.out.println(x); }
- Pętla for-each iteruje po wszystkich elementach tablicy, od pierwszego do ostatniego elementu. Jest krótką i wygodną alternatywą dla np. pętli for.
- Aby sprawdzić, czy dwie tabele są takie same, nie powinniśmy korzystać z operatora ==, lecz:
- sprawdzić, czy obie tablice mają taką samą liczbę elementów (korzystając z atrybutu length obu tablic),
- porównać wszystkie elementy obu tablic o tych samych indeksach – jeżeli rozmiary się zgadzają i wszystkie elementy parami (pod tymi samymi indeksami) są takie same, to tablice są sobie równe.
- Rozmiaru tablic nie można co prawda zmienić, ale możemy utworzyć nową tablicę o większym rozmiarze, przepisać do niej elementy z pierwszej tablicy, a następnie przypisać nowo utworzoną tablicę do pierwszej zmiennej tablicy.