Rozdział 6 - Tablice - Podsumowanie

  • 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ć nowoutworzoną tablicę do pierwszej zmiennej tablicy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.