Tablice w Javie: indeksy, pętle i tablice 2D

Zaktualizowano 22 października 2026

Tablica w Javie rozwiązuje prosty problem: w jednej zmiennej zapiszesz tylko jedną wartość. Na dziesięć pomiarów albo siedem dni tygodnia potrzebowałbyś dziesięciu albo siedmiu zmiennych. Tablica grupuje wiele wartości tego samego typu pod jedną nazwą, a pętlą w Javie przechodzisz przez nie wszystkie.

Tworzenie, odczyt, zmiana

Nawiasy kwadratowe po typie robią z niego tablicę: int[], String[], double[]. Tablicę można utworzyć na dwa sposoby:

  • ze stałymi wartościami: String[] fruits = {"Apple", "Banana", "Cherry"};
  • z rozmiarem: int[] zeros = new int[4]; (wszystkie miejsca mają wtedy wartość 0, dla String null)

Każde miejsce ma numer, czyli indeks. Liczymy od 0: fruits[0] to pierwszy element, fruits[fruits.length - 1] ostatni. length to liczba miejsc. Jest ustalana przy tworzeniu tablicy i potem się nie zmienia.

Arrays.toString(...) (z import java.util.Arrays;) zamienia tablicę na czytelny tekst.

import java.util.Arrays;
public class Main {    public static void main(String[] args) {        String[] fruits = {"Apple", "Banana", "Cherry"};        System.out.println(fruits[0]);        System.out.println("Length: " + fruits.length);
        fruits[1] = "Mango";        for (int i = 0; i < fruits.length; i++) {            System.out.println(i + ": " + fruits[i]);        }
        int[] zeros = new int[4];        System.out.println(Arrays.toString(zeros));        System.out.println(Arrays.toString(fruits));    }}

Tablice i pętle

Klasyczna forma przechodzi indeksem od 0 do length - 1. Dzięki temu możesz czytać, zapisywać, a nawet iść od tyłu. Tak działa też wyszukiwanie liniowe.

Jeśli nie potrzebujesz indeksu, krótsza jest pętla for-each: for (int number : numbers) oznacza „dla każdej liczby w numbers”. Ona tylko czyta. Zmienić nią wartości w tablicy się nie da.

import java.util.Arrays;import java.util.Scanner;
public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int[] numbers = new int[n];        for (int i = 0; i < n; i++) {            numbers[i] = scanner.nextInt();        }        System.out.println("Read: " + Arrays.toString(numbers));
        int even = 0;        for (int number : numbers) {            if (number % 2 == 0) {                even++;            }        }        System.out.println("Even numbers: " + even);
        System.out.print("Backwards:");        for (int i = numbers.length - 1; i >= 0; i--) {            System.out.print(" " + numbers[i]);        }        System.out.println();    }}
Wejście
5
3 8 1 6 4

Pierwsza liczba na wejściu mówi, ile liczb nastąpi po niej.

Tablice dwuwymiarowe

Tablica może sama zawierać tablice, na przykład dla tabeli, planszy do gry albo sali kinowej. int[][] points to tablica wierszy, a każdy wiersz to int[]. points[1][2] to wiersz 1, kolumna 2 (oba liczone od 0). points.length to liczba wierszy, points[row].length długość jednego wiersza.

public class Main {    public static void main(String[] args) {        // One row per student, one column per exercise        int[][] points = {            {3, 5, 4},            {2, 5, 5},            {4, 1, 3},        };        for (int row = 0; row < points.length; row++) {            int total = 0;            for (int col = 0; col < points[row].length; col++) {                total += points[row][col];            }            System.out.println("Student " + (row + 1) + ": " + total + " points");        }        System.out.println("Second student, third exercise: " + points[1][2]);    }}

Typowe błędy

  • Indeks poza tablicą

    Ostatni element ma indeks length - 1. Przy i <= numbers.length pętla sięga o jeden krok za daleko i program się wysypuje:

    ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

    W warunku powinno być <, a nie <=.

  • Wypisywanie tablicy wprost

    System.out.println(numbers) nie wypisuje zawartości, tylko coś w rodzaju [I@1b6d3586. Żeby zobaczyć zawartość, użyj Arrays.toString(numbers).

  • Przypisanie to nie kopiowanie

    Zmienna tablicowa wskazuje na tablicę, a nie ją zawiera. Po int[] b = a; obie wskazują na tę samą tablicę:

    int[] a = {1, 2, 3};int[] b = a;b[0] = 99;System.out.println(a[0]); // 99
  • Za mała tablica

    Rozmiaru tablicy nie da się później zmienić. Jeśli liczbę elementów poznajesz dopiero z wejścia, najpierw ją wczytaj, a potem utwórz tablicę: int[] numbers = new int[n];. Jeśli kolekcja ma rosnąć w trakcie działania programu, użyj ArrayList (zobacz listy i mapy w Javie).

Zadania z tego tematu

Przećwicz to, czego się nauczyłeś, od razu w przeglądarce. Testy natychmiast sprawdzają twoje rozwiązanie.

Powiązane artykuły