Rozdział 6 - Tablice - Użycie pętli z tablicami

Pętle świetnie nadają się do iterowania (czyli przechodzenia) przez elementy tablicy. Możemy w tym celu skorzystać z pętli for w następujący sposób:

  1. Zmienną, używaną w pętli, zainicjalizujemy wartością 0, która jest indeksem pierwszego elementu w każdej tablicy.
  2. Warunek pętli napiszemy w taki sposób, by pętla zakończyła się, gdy wartość zmiennej przekroczy zakres indeksów tablicy – skorzystamy tutaj z atrybutu length tablicy.
  3. W instrukcji kroku będziemy zwiększać wartość zmiennej pętli o 1, dzięki czemu przejdziemy przez indeksy wszystkich elementów tablicy.

Spójrzmy na prosty przykład programu, który wypisujemy na ekran wszystkie elementy tablicy:

Nazwa pliku: WypiszElementyTablicy.java
public class WypiszElementyTablicy {
  public static void main(String[] args) {
    int[] liczby = { -5, 100, 1, 0, 20 };

    for (int i = 0; i < liczby.length; i++) {
      System.out.print(liczby[i] + " ");
    }
  }
}

Pętlę for zapisaliśmy zgodnie z powyższym opisem. Dzięki temu, w prosty sposób jesteśmy w stanie przejść po kolei przez wszystkie elementy tablicy liczby. Na ekranie zobaczymy:

-5 100 1 0 20

Zwróćmy uwagę, że w warunku pętli korzystamy z operatora < a nie <=. Jak już wiemy, length zwraca liczbę elementów, a ostatni element w tablicy ma zawsze indeks o jeden mniejszy od liczby elementów (ponieważ numeracja indeksów rozpoczyna się od 0). Gdybyśmy użyli z operatora <=, to w ostatnim obiegu pętli zmienna i wynosiłaby 5, a indeks 5 jest poza zakresem tablicy liczby – w takim przypadku, na ekranie zobaczylibyśmy błąd ArrayIndexOutOfBoundsException.

Moglibyśmy również przejść przez elementy tablicy w odwrotnej kolejności – wystarczy odwrócić zapis pętli for:

Nazwa pliku: WypiszElementyTablicy.java
for (int i = liczby.length - 1; i >= 0 ; i--) {
  System.out.print(liczby[i] + " ");
}

Tym razem, zaczynamy od ostatniego indeksu i kierujemy się do pierwszego. Na ekranie zobaczymy:

20 0 1 100 -5

Spójrzmy na bardziej złożony przykład – program, który odpowiada na pytanie, czy w tablicy liczb znajduje się dana liczba:

Nazwa pliku: CzyLiczbaJestWTablicy.java
public class CzyLiczbaJestWTablicy {
  public static void main(String[] args) {
    boolean znaleziona = false;
    int[] liczby = { -20, 105, 0, 26, -99, 7, 1026 };

    int szukanaLiczba = 7;

    for (int i = 0; i < liczby.length; i++) {
      if (liczby[i] == szukanaLiczba) {
        znaleziona = true;
        break; // znalezlismy liczbe - mozemy wiec przerwac petle
      }
    }

    if (znaleziona) {
      System.out.println("Liczba zostala znaleziona!");
    } else {
      System.out.println("Liczba nie zostala znaleziona.");
    }
  }
}

Na początku programu tworzymy tablicę liczby zainicjalizowaną kilkoma liczbami. Szukaną liczbę zapisujemy natomiast w zmiennej szukanaLiczba. Zmienna znaleziona służy jako wyznacznik tego, czy udało nam się znaleźć liczbę, czy nie. Początkowo nadajemy tej zmiennej wartość false – jeżeli odnajdziemy liczbę w pętli, to zmienimy wartość na true.

Następnie, przechodzimy w pętli przez elementy tablicy liczby i porównujemy każdy z nich z szukaną liczbą. Jeżeli liczby są sobie równe, to znaczy, że znaleźliśmy szukaną liczbę w tablicy. Ustawiamy zmienna znaleziona na true oraz przerywamy pętlę – dalsze procesowanie elementów tablicy nie ma sensu, ponieważ już wiemy, że tablica zawiera szukaną liczbę.

Na końcu programu wypisujemy na ekran komunikat, w zależności do tego, czy znaleźliśmy szukaną liczbę, czy nie.

Szukana liczba to 7. W kodzie programu w tablicy liczby znajduje się taka liczba – dlatego na ekranie zobaczymy następujący komunikat:

Liczba zostala znaleziona!
Szukanie konkretnych elementów w tablicach (i ogólnie w kolekcjach) to częste wymaganie w programowaniu. W zależności od rodzaju kolekcji i rozłożeniu w niej danych, czasy potrzebne na znalezienie elementu bardzo się różnią. Opowiemy sobie więcej o tym problemie w rozdziale o kolekcjach języka Java.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.