Java – tablice – przechowywanie zbioru wartości

Do przechowywania wielu wartości w Javie, możemy wykorzystać tablice. W tym artykule dowiesz się jak stworzyć tablicę jedno i dwu wymiarową. Jak pobrać i wpisać do nich wartości.

Artykuł jest kontynuacją darmowego kursu, jeśli nie przerobiłeś poprzednich tematów, możesz mieć problem ze zrozumieniem tego artykułu.


Weźmy dla przykładu sytuację, w której chcielibyśmy stworzyć krzyżówkę. Do zapisania haseł krzyżówki, będziemy potrzebowali strukturę, która pozwoli nam przechowywać zestawy znaków.

np.
a l a
m a r c i n
j u r e k


Mamy już cel, teraz przejdźmy do poznania wszystkich elementów potrzebnych do jego realizacji.

Przyjrzymy się tablicy jednowymiarowej, tablicy dwuwymiarowej regularnej oraz dwuwymiarowej o nieregularnej liczbie kolumn.

Tablica jednowymiarowa

// deklaracja
typ[] nazwaTablicy;

// inicjalizacja
nazwaTablicy = new typ[rozmiarTablicy];

Podczas tworzenia tablicy musimy wskazać, jaki będzie miała rozmiar, nie ma możliwości rozszerzenia lub pomniejszenia tablicy w późniejszym czasie. Deklaracja mówi, że chcemy mieć tablicę. Inicjalizacja to etap, w którym prosimy o zarezerwowanie miejsca dla tablicy.

Dostęp do elementów tablicy

Omawiając tablice, musimy powiedzieć sobie o indeksach. Indeksy wykorzystujemy w celu odwołania się do poszczególnych elementów tablicy. Indeksy rozpoczynają się od 0 i kończą na wartości o jeden mniejszej niż długość tablicy.

Dla tablicy o długości 5, mamy indeksy od 0 do 4. Pierwszy element tablicy to indeks 0, trzeci element tablicy to indeks 2.

Przypisanie wartości

// deklaracja z inicjalizacją
int[] liczby = new int[3];

// przypisanie wartości
liczby[0] = 1;
liczby[1] = 2;
liczby[2] = 3;

Odczytanie wartości

// wyświetlenie drugiego elementu tablicy
System.out.println(liczby[1]);   // wyświetli liczbę 2

Wartości domyślne

Java zawsze ustawia domyślne wartości dla typów. Niezależnie od tego gdzie ich używamy.

Wartości domyślne dla typów:

  • całkowitoliczbowe (byte, short, int, long): 0
  • zmiennoprzecinkowe (float, double): 0.0
  • znakowy (char): ’ ’;
  • logiczny (boolean): false
  • referencyjny (obiekty): null

Przykład:

// deklaracja z inicjalizacją
char[] znaki = new char[5];

// wyświetlenie wartości
System.out.println(znaki[3])   // wyświetli pusty znak

Tablica dwuwymariowa

W tablicy dwuwymiarowej mamy do czynienia z dwoma wymiarami, a więc trzeba je uwzględnić podczas deklaracji oraz inicjalizacji.

Najprostszym sposobem na zobrazowanie tablicy dwuwymiarowej, jest zaprezentowanie jej w formie tabeli, która ma określoną liczbę wierszy i kolumn.

Przykład:

// deklaracja z inicjalizacją
int[][] liczby = new int[2][4];

// przykładowe wartości tablicy
//  1 2 3 4
//  2 4 6 8

// przypisanie wartości
liczby[0][0] = 1;
liczby[0][1] = 2;
liczby[0][2] = 3;
liczby[0][3] = 4;
liczby[1][0] = 2;
liczby[1][1] = 4;
liczby[1][2] = 6;
liczby[1][3] = 8;

Teraz zastanówmy się, jak przygotować tablicę, która będzie miała nieregularną liczbę kolumn.

Tablica o nieregularnej liczbie kolumn

Żeby dobrze zrozumieć taką tablicę, należy inaczej spojrzeć na tablicę dwuwymiarową. Tablica dwuwymiarowa, to jednowymiarowa tablica tablic jednowymiarowych.

W takim podejściu każdy wiersz jest tablicą jednowymiarową. Definiowanie różnej liczby kolumn w wierszu sprowadzimy do inicjalizowania różnej długości tablic jednowymiarowych dla danego wiersza.

Przykład:

// a a a
// z z
// p p p p 

char[][] znaki = new char[3][] // mówimy ile będzie wierszy
znaki[0] = new char[3]; // mówimy ile będzie kolumn w pierwszym wierszu
znaki[1] = new char[2]; // mówimy ile będzie kolumn w drugim wierszu
znaki[2] = new char[4]; // mówimy ile będzie kolumn w trzecim wierszu

// przypisanie wartości
znaki[0][0] = "a";
znaki[0][1] = "a";
znaki[0][2] = "a";
znaki[1][0] = "z";
znaki[1][1] = "z";
znaki[2][0] = "p";
znaki[2][1] = "p";
znaki[2][2] = "p";
znaki[2][3] = "p";

Jesteśmy już bardzo blisko stworzenia krzyżówki, a praktycznie już ją stworzyliśmy 🙂 Opakujmy wszystko w program, który będzie można uruchomić 🙂

Krzyżówka – implementacja

class Program {
  public static void main (String args[]) {	
		char[][] krzyzowka = new char[3][];
		krzyzowka[0] = new char[3];
		krzyzowka[1] = new char[6];
		krzyzowka[2] = new char[5];
		
		krzyzowka[0][0] = "a";
		krzyzowka[0][1] = "l";
		krzyzowka[0][2] = "a";
		krzyzowka[1][0] = "m";
		krzyzowka[1][1] = "a";
		krzyzowka[1][2] = "r";
		krzyzowka[1][3] = "c";
		krzyzowka[1][4] = "i";
		krzyzowka[1][5] = "n";
		krzyzowka[2][0] = "j";
		krzyzowka[2][1] = "u";
		krzyzowka[2][2] = "r";
		krzyzowka[2][3] = "e";
		krzyzowka[2][4] = "k";
  }
}

Zdefiniowaliśmy krzyżówkę, ale co nam po niej, jeśli nie możemy spróbować jej odgadnąć? 🙂

W przyszłości poznamy lepszy mechanizm, który umożliwi nam przeprowadzenie rozgrywki. Póki co musisz zadowolić się faktem przechowania wartości krzyżówki w zmiennej tablicowej.

Czas na Ciebie 🙂

Zadanie 1. Napisz program, który wczyta do tablicy dwuwymiarowej 4 liczby (a,b,c,d):
a b
c d
Tak wprowadzoną tablicę program powinien zmodyfikować, przemnażając każdy jej element przez dwa. Na końcu wyświetl wszystkie elementy tablicy.

W wolnej chwili poczytaj nieco o klasie Arrays, która dostarcza wiele przydatnych metod dla tablic.

Podsumowanie

Poznaliśmy tablice w javie, jedno i dwuwymiarowe, wiemy już jak przechowywać więcej niż jedną wartość w zmiennej. W kolejnych artykułach dowiesz się nieco o obiektowości, wyjątkach, wątkach, typach sparametryzowanych, kolekcjach i innych.

Jeśli artykuł był dla Ciebie pomocny, proszę, udostępnij go, być może przyda się też innym. Zapraszam Cię do komentowania, zadawania pytań 🙂

Do kolejnego ! 🙂