Tablice

Tablice to struktury trochę podobne do zmiennych. Też potrafią zapamiętywać wartości, ale w przeciwieństwie do zmiennych są w stanie zapamiętać więcej niż tylko jedną wartość.

Tablice potrafią pamiętać wiele wartości w uporządkowanej formie.

Na powyższym obrazku Single variable to zmienna – jest w stanie zapamiętać tylko jedną wartość (jedną liczbę). Poniżej tablica (ang. array) 5-elementowa (składająca się z 5 elementów), która może zapamiętać 5 różnych wartości.

Rozmiar tablicy

Tablicę, która potrafi zapamiętać 5 różnych wartości, nazywamy więc tablicą pięcioelementową i często też mówi się, że rozmiar takiej tablicy wynosi 5. Mówiąc o rozmiarze będziemy mieli na mysli jej wielkość, to ile różnych wartości potrafi przechować.

Deklaracja tablicy

Aby zadeklarować tablicę, piszemy:

typ[] nazwaTablicy = new typ[liczba_elementow];

Jako typ musimy oczywiście podać typ danych, które będziemy przechowywać w tablicy (o typach danych pisałem szerzej w artykule dotyczącym zmiennych). I tak żeby na przykład zadeklarować 5-elementową tablicę liczb całkowitych, piszemy:

int[] tab = new int[5];

Nasza tablica ma nazwę tab. Jej rozmiar określiliśmy jako 5, więc potrafi zapamiętać 5 różnych liczb całkowitych. Rozmiar tablicy musi być podany w momencie deklarowania tablicy. Wynika to z tego, że Java rezerwuje w pamięci miejsce na całą tablicę, musi więc wiedzieć, ile tego miejsca trzeba zarezerwować.

Indeksy tablicy

Skoro w tablicy możemy zapamiętać wiele różnych wartości, to jak się w nich połapać, jak dostać się do konkretnego elementu tablicy?

Aby dotrzeć do jakiegoś jednego konkretnego elementu w tablicy, posłużymy się indeksem tego elementu. Indeks to inaczej numer pola. To trochę jak numerowanie foteli w sali koncertowej: każdy fotel ma swój numer i ten numer to jest właśnie jego indeks.

Przyjrzyjcie się dobrze obrazkowi powyżej. Widać na nim 10-elementową tablicę. Każdy element w tablicy ma swój numer czyli indeks. I tu ważna rzecz: numerowanie pól w tablicy rozpoczyna się od 0, nie od 1. Dlatego indeks pierwszego pola to 0, drugiego to 1 itd. Indeks ostatniego dziesiątego elementu to 9. Łatwo więc zapamiętać, że ostatni element ma indeks o 1 mniejszy, niż wynosi rozmiar tablicy. Np. jeśli będziemy używać tablicy o rozmiarze 100, to ostatni element tej tablicy będzie miał indeks 99.

Indeksy pozwalają nam na dostęp do wybranego elementu tablicy. Dlatego też nie możemy sięgać do elementu o indeksie mniejszym niż 0, bo takiego elementu w tablicy nie ma. Podobnie jak nie możemy sięgać do elementu o indeksie większym niż rozmiar tablicy – 1. Jeśli poprzez nieprawidłowe indeksy spróbujemy sięgnąć do nieistniejących elementów tablicy, Java zgłosi błąd i program zakończy działanie.

Wpisywanie wartości do tablicy

Tablica liczb całkowitych (typu int) po zadeklarowaniu wypełniona będzie w całości zerami, czyli każdy element będzie miał wartość 0. Wynika to ze specyfiki typu int, ale dla uproszczenia możemy przyjąć, że w tablicy nie ma żadnych wartości, dopóki jakiejś wartości do niej nie wpiszemy sami.

Aby wpisać wartość do wybranego elementu tablicy, piszemy nazwę tablicy i w nawiasach kwadratowych podajemy indeks pola, do którego chcemy coś wpisać. Np. aby wpisać wartość do pierwszego elementu tablicy o nazwie tab, napiszemy:

tab[0] = 123;

Dzięki temu wartością pierwszego elementu tablicy będzie liczba 123. Aby wypełnić wartościami kolejne elementy, np. drugi i trzeci, napiszemy więc:

tab[1] = 234;
tab[2] = 345;

W ten sposób – podając indeksy kolejnych elementów – możemy wypełnić wartościami całą tablicę. Ale już teraz łatwo sobie wyobrazić, że w przypadku dużych tablic taki sposób byłby bardzo niewygodny.

Jeśli używamy względnie niedużych tablic, to istnieje wygodny sposób wypełniania tablicy wartościami od razu w momencie jej deklarowania:

int[] tab = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Używając takiego zapisu nie podajemy rozmiaru tablicy. Java sama go sobie wyliczy na podstawie tego, ile wartości podaliśmy w nawiasach klamrowych.

Użycie pętli FOR do wpisania wartości

Dobrym pomysłem na wypełnienie tablicy wartościami może być użycie do tego celu pętli FOR. Tak zaprogramujemy pętlę, by wykonała się dokładnie tyle razy, ile mamy elementów w tablicy. Dodatkowo, jeśli licznik w pętli będzie rozpoczynał liczenie od 0, to będziemy mogli go wykorzystać do wskazania indeksu elementu tablicy, który chcemy w danej chwili wypełnić.

for (int k = 0; k < 10; k++) {
  tab[k] = k;
}

Co zrobi powyższy kawałek kodu? Do każdego elementu o indeksie k (a licznik k zmienia się od 0 do 9) zostanie wpisana wartość licznika k. W efekcie nasza 10-elementowa tablica będzie zawierała elementy o wartościach od 0 do 9.

Wyświetlenie zawartości tablicy

Operując na tablicy dobrze byłoby też umieć zmusić nasz program do wyświetlenia zawartości wszystkich elementów tablicy na ekranie. Dzięki temu moglibyśmy zobaczyć, co znajduje się w naszej tablicy.

Do tego również warto użyć pętli FOR:

for (int k = 0; k < 10; k++) {
  System.out.println(tab[k]);
}

System.out to jedna z wbudowanych klas w Javie. Zawiera ona metodę println(), umożliwiającą wyświetlenie dowolnego tekstu lub wartości liczbowych na ekranie. Pisząc w pętli System.out.println(tab[k]) spowodujemy, że każdym przebiegu pętli wyświetlimy na ekranie linię z wartością elementu tablicy o indeksie k.

Na koniec małe usprawnienie wyświetlania całej zawartości tablicy na ekranie. W przypadku dużych tablic wyświetlanie poszczególnych elementów w osobnych liniach będzie mało czytelne. Dobrze, gdyby dało się w jednej linii wyświetlić zawartość całej tablicy tak, by zamiast

0
1
2
3
4
5
6
7
8
9

wyświetlone zostało coś takiego:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Okazuje się, że jest to możliwe i bardzo łatwe, jeśli wykorzystamy klasy przygotowane przez twórców języka Java.

Najpierw musimy w naszym programie zaimportować klasę java.util.Arrays

Nie przejmujcie się, jeśli jeszcze nie wiecie, co to znaczy „zaimportować klasę” i do czego służy słowo kluczowe import. Już wkrótce i to się wyjaśni.

package pl.coderion;

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {

        Integer[] tab = new Integer[10];

        for (int k = 0; k < 10; k++) {
            tab[k] = k;
        }

        System.out.println(Arrays.toString(tab));
    }
}

Interesuje nas głównie ostatnia linia, w której wyświetlamy na ekranie Arrays.toString(tab). Arrays to jedna z wielu wbudowanych klas Javy. Klasa ta zawiera metodę toString(), której jako parametr podajemy nazwę tablicy, której zawartość chcemy wyświetlić. Po wykonaniu powinniśmy otrzymać taki wynik:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]